无效 xsd- SAXParseException
invalid xsd- SAXParseException
我目前正在使用 xsd 并尝试定义一个简单的 XSD 文件,用于包含一些 order-items 的订单。但是如果我验证 xsd 文件,我会收到 SAXParseException。谁能看到问题?到目前为止我无法修复它:(
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:attribute name='orderId' type='xs:string' use='required'/>
<xs:attribute name='orderDate' type='xs:date' use='required'/>
<xs:sequence>
<xs:element name='orderItem' type='OrderItem'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name='OrderItem'>
<xs:sequence>
<xs:element name='title' type='xs:string'/>
<xs:element name='manufacturer' type='Company'/>
<xs:element name='quantity' type='xs:positiveInteger'/>
<xs:element name='price' type='xs:decimal'/>
</xs:sequence>
</xs:complexType>
<xs:complexType name='Company'>
<xs:element name='name' type='xs:string'/>
<xs:element name='adress' type='Adress'/>
</xs:complexType>
<xs:complexType name="Adress">
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:complexType>
</xs:schema>
还有一个示例 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<order orderId='1001' orderDate='2015-05-22'>
<orderItem>
<title>Nikon D5200</title>
<manufacturer>
<name>Nikon</name>
<adress>
<street>Hauptstr. 12</street>
<city>Mannheim</city>
<zip>68161</zip>
<country>DE</country>
</adress>
</manufacturer>
<quantity>1</quantity>
<price>559.25</price>
</orderItem>
</order>
异常:
Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/C:/Users/andre/Documents/dtd/order.xsd; lineNumber: 8; columnNumber: 16; s4s-elt-invalid-content.1: Content from "#AnonType_order" is invalid. Element "sequence" is invalid, occurs too often or on wrong place.
编辑:对我来说另一个谜是我什么时候需要一个 ?我在标签中使用它,所以我可以插入几个标签,这是有道理的。但是在标签定义中需要它吗?因为一个 orderItem object 应该只有一个标题等等 - 所以我需要一个标签吗?
出现此错误是因为您的架构未正确构建。
对于元素订单
xs:sequence
必须在 xs:attribute
声明之前。正确的版本是:
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name='orderItem' type='OrderItem'/>
</xs:sequence>
<xs:attribute name='orderId' type='xs:string' use='required'/>
<xs:attribute name='orderDate' type='xs:date' use='required'/>
</xs:complexType>
</xs:element>
对于复杂类型公司和地址
您必须使用 xs:sequence
来指定您希望元素以特定顺序出现。应该这样修正
<xs:complexType name='Company'>
<xs:sequence>
<xs:element name='name' type='xs:string'/>
<xs:element name='adress' type='Adress'/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Adress">
<xs:sequence>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
这些是非常基本的功能。强烈建议您阅读有关 XML Schema 的任何教程以熟悉此内容。
我目前正在使用 xsd 并尝试定义一个简单的 XSD 文件,用于包含一些 order-items 的订单。但是如果我验证 xsd 文件,我会收到 SAXParseException。谁能看到问题?到目前为止我无法修复它:(
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:attribute name='orderId' type='xs:string' use='required'/>
<xs:attribute name='orderDate' type='xs:date' use='required'/>
<xs:sequence>
<xs:element name='orderItem' type='OrderItem'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name='OrderItem'>
<xs:sequence>
<xs:element name='title' type='xs:string'/>
<xs:element name='manufacturer' type='Company'/>
<xs:element name='quantity' type='xs:positiveInteger'/>
<xs:element name='price' type='xs:decimal'/>
</xs:sequence>
</xs:complexType>
<xs:complexType name='Company'>
<xs:element name='name' type='xs:string'/>
<xs:element name='adress' type='Adress'/>
</xs:complexType>
<xs:complexType name="Adress">
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:complexType>
</xs:schema>
还有一个示例 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<order orderId='1001' orderDate='2015-05-22'>
<orderItem>
<title>Nikon D5200</title>
<manufacturer>
<name>Nikon</name>
<adress>
<street>Hauptstr. 12</street>
<city>Mannheim</city>
<zip>68161</zip>
<country>DE</country>
</adress>
</manufacturer>
<quantity>1</quantity>
<price>559.25</price>
</orderItem>
</order>
异常:
Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/C:/Users/andre/Documents/dtd/order.xsd; lineNumber: 8; columnNumber: 16; s4s-elt-invalid-content.1: Content from "#AnonType_order" is invalid. Element "sequence" is invalid, occurs too often or on wrong place.
编辑:对我来说另一个谜是我什么时候需要一个 ?我在标签中使用它,所以我可以插入几个标签,这是有道理的。但是在标签定义中需要它吗?因为一个 orderItem object 应该只有一个标题等等 - 所以我需要一个标签吗?
出现此错误是因为您的架构未正确构建。
对于元素订单
xs:sequence
必须在 xs:attribute
声明之前。正确的版本是:
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name='orderItem' type='OrderItem'/>
</xs:sequence>
<xs:attribute name='orderId' type='xs:string' use='required'/>
<xs:attribute name='orderDate' type='xs:date' use='required'/>
</xs:complexType>
</xs:element>
对于复杂类型公司和地址
您必须使用 xs:sequence
来指定您希望元素以特定顺序出现。应该这样修正
<xs:complexType name='Company'>
<xs:sequence>
<xs:element name='name' type='xs:string'/>
<xs:element name='adress' type='Adress'/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Adress">
<xs:sequence>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="zip" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
这些是非常基本的功能。强烈建议您阅读有关 XML Schema 的任何教程以熟悉此内容。