我对XSD格式有疑问。
例如,我有一个XML文档
<?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格式的问题
问题:
无效的'name'属性值'media:group':''''''字符,十六进制值0x3A,在名称中的第5位,不能包含在名称中。'。
<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:element的名称不能包含“:”字符??? 如果上述问题是正确的,我该如何解决。
如果你知道的话,请帮助我。
非常感谢你!
答案 0 :(得分:1)
尝试使用其他验证器。我对此网站一无所知,但根据您的证据,他们使用非命名空间感知的XML解析器解析XML。这是一件非常奇怪的事情。
答案 1 :(得分: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">
您还可以通过omitting targetNamespace
建立一个其元素没有命名空间的架构:
<xsd:schema ...>
...
<xsd:element name="entry">
注意:要在两个名称空间中定义元素,您需要两个模式。通常,您可以将架构importing
组合到另一个架构中。但是你的XML存在问题:名称空间的引用是循环的,<entry>
包含<media:group>
,其中包含<trailer>
。
抱歉:我无法解决此问题。我最好的尝试使用了第三个架构(定义{{1}}),但这会导致<trailer>
崩溃......其他任何人都可以解决它吗?