2012-11-14 64 views
0

我对XSD格式有疑问。
为例子,我有一个XML文档关于XSD元素无效(XML Schema)

<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns:media="http://search.yahoo.com/mrss/"> 
    <entry> 
    <title>Examples</title> 
    <id>1</id> 
    <media:group> 
     <media:thumbnail url="http://www.abc.com/image.jpg" /> 
     <trailer url="http://www.abc.com" /> 
     <info url="http://www.abc.com/xsd/info.jpg" /> 
     <media:description>1</media:description> 
     <media:content name="video.mp4" type="video" duration="400" repeat="true"/> 
    </media:group> 
    <menu> 
     <item uri="localhost:8080/xyzt" /> 
    </menu> 
    </entry> 
</feed> 

然后,我用的网站http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx自动转换为XSD文件(你可以尝试)。然而,当我使用的网站http://www.xmlforasp.net/schemavalidator.aspx进行检查XSD验证,当时有一个关于XSD格式问题
问题:

无效的“名称”属性值“媒体:组”:“在‘:’字符,名称中位置5处的十六进制值0x3A不能包含在名称中。'。

<xsd:element name="entry"> 
     <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="title" type="xsd:string" /> 
      <xsd:element name="id" type="xsd:int" /> 
      <xsd:element name="media:group">    <!-- here --> 
      <xsd:complexType> 
       <xsd:sequence> 

我不明白...为什么XSD的名称:元素不能包含 “:” 字符??? 如果上述问题是正确的,我该如何解决它。

请帮助我,如果你知道这一点。
非常感谢!

+0

如果包含模式,这很有帮助,因为那是错误所在。等一下,我会解决它......完成。 – 13ren

回答

1

尝试使用其他验证程序。我对这个网站一无所知,但是从您的证据来看,他们使用非名称空间感知的XML解析器来解析XML。这是一件非常奇怪的事情。

1

“:”之前的文字被称为namespace。例如在“media:group”中,命名空间是“media”。

要在命名空间中定义一个元素,不能像您期望的那样仅仅将它称为<xsd:element name="media:group">

相反,您必须将整个模式指定为targetNamespace,然后在该模式中定义的所有所有元素都将具有该名称空间。像这样(的qualified部分意味着你的XML需要使用的命名空间,为你的XML与“媒体”一样):

<xsd:schema targetNamespace="http://search.yahoo.com/mrss/" 
      elementFormDefault="qualified" ...> 
    ... 
    <xsd:element name="group"> 

你也可以有一个模式,它的元素没有命名空间,通过omittingtargetNamespace

<xsd:schema ...> 
    ... 
    <xsd:element name="entry"> 

注意:要在两个名称空间中定义元素,您需要两个模式。通常情况下,您可以将模式按照importing组合到一起。但是,您的XML存在一个问题:对名称空间的引用是循环的,因为<entry>包含<media:group>,其中包含<trailer>

对不起:我解决不了这个问题。我最好的尝试使用第三模式(定义<trailer>),但这崩溃xmllint ......任何人都可以解决它吗?