无效 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 的任何教程以熟悉此内容。