[英]Is there something radically wrong with this XML Schema?
我对XML Schema只有基本的了解。 这基本上是我第一次以任何严肃的方式与他们互动而且我遇到了一些问题。 我已经阅读了谷歌上的XSD,所有内容都可以看到这个文件。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="credits">
<xs:complexType>
<xs:sequence>
<xs:element ref="property" maxOccurs="16" minOccurs="13" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="property" type="xs:string">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute ref="name" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="item" type="xs:string"/>
<xs:attribute name="name" type="xs:string">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="example1"/>
<xs:enumeration value="example2"/>
<xs:enumeration value="example3"/>
<xs:enumeration value="example4"/>
<xs:enumeration value="example5"/>
<xs:enumeration value="example6"/>
<xs:enumeration value="example7"/>
<xs:enumeration value="example8"/>
<xs:enumeration value="example9"/>
<xs:enumeration value="example10"/>
<xs:enumeration value="example11"/>
<xs:enumeration value="example12"/>
<xs:enumeration value="example13"/>
<xs:enumeration value="example14"/>
<xs:enumeration value="example15"/>
<xs:enumeration value="example16"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:schema>
这是我加载它的方式:
SchemaFactory schemaFactory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
Schema schemaXSD = schemaFactory.newSchema( new File ( "test.xsd" ) );
我得到如下例外:
org.xml.sax.SAXParseException:src-element.3:元素'property'同时具有'type'属性和'anonymous type'子元素。 元素中只允许其中一个。
谢谢你的帮助! 关于阅读/使用他人创建的模式的任何一般建议也表示赞赏! :d
元素'property'具有'type'属性和'anonymous type'子元素
换句话说,你说type="xs:string"
,这就规定了像<property>foo</property>
这样的节点。 但是你也将ComplexType item
放在property
,这就规定了像<property><item>...</item></property>
这样的节点。 这是解析器认为是错误的矛盾。
如果要在每个property
存储多个item
, 并为每个property
存储一个单独的字符串,请将此字符串存储为单独的节点,具有标记的子项或属性的property
。 例如<property mystring="foo"><item>...</item></property>
这个位是你的问题代码:
<xs:element name="property" type="xs:string">
<xs:complexType>
<xs:sequence>
<xs:element ref="item" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute ref="name" use="required"/>
</xs:complexType>
</xs:element>
要么删除外部元素上的类型( type="xs:string"
),要么删除匿名内部complexType元素( <xs:complexType> ... </xs:complexType>
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.