我有一个或多或少的简单任务来构建XSD模式,但是我不确定这里的想法是否正确。尤其是对于元素comment
。
客户可以下达购买订单。采购订单至少包括一个订单位置(产品名称,数量和价格为必填项;评论和发货日期为 可选)。
采购订单具有日期(订购日期)和可选的评论。 客户可以指定不同的地址(计费和 运输)。仅需要送货地址。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<xs:element name="purchase-order">
<xs:element name="order-position" type="order-position-type" minOccurs="1">
<xs:complexType name="order-position-type">
<xs:sequence>
<xs:element name="product-name" type="xs:string"></xs:element>
<xs:element name="quantity" type="xs:integer"></xs:element>
<xs:element name="price" type="xs:decimal"></xs:element>
<xs:element name="comment" type="xs:string" minOccurs="0" maxOccurs="2"></xs:element>
<xs:element name="shipping-date" type="xs:date" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="order-date" type="xs:date" minOccurs="0"></xs:element>
<xs:element name="billing-address" type="xs:string"></xs:element>
<xs:element name="shipping-address" type="xs:string" minOccurs="1"></xs:element>
</xs:element>
</xs:schema>
同一元素(这里comment
)是否出现多次?现在,我有comment
的min和maxOccurs,但是按顺序排列,所以可能是错误的。
您可能还会在哪里看到错误?还是可以使它变得更容易? at least one order position
点让我在complexType之前创建一个元素,以告知minOccurs值为1。
答案 0 :(得分:1)
在序列中的元素上放置minOccurs
和maxOccurs
是可以的。
以下是您必须解决的一些问题:
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
应该是xmlns:xs="http://www.w3.org/2001/XMLSchema"
。 (修复标题消息错误,但此后还有更多要解决的问题...)
<xs:element name="purchase-order">
不能有xs:element
个孩子。请使用xs:complexType
的孩子和xs:sequence
的孙子。
order-position
元素的声明不能同时具有type
属性和xs:complexType
子元素。使用另一个。
其他问题仍然存在(例如,满足您的基数要求),但这是一个XSD,已解决了以上语法问题,至少可以帮助您解决问题:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="purchase-order">
<xs:complexType>
<xs:sequence>
<xs:element name="order-position" type="order-position-type" minOccurs="1"/>
<xs:element name="order-date" type="xs:date" minOccurs="0"/>
<xs:element name="billing-address" type="xs:string"/>
<xs:element name="shipping-address" type="xs:string" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="order-position-type">
<xs:sequence>
<xs:element name="product-name" type="xs:string"/>
<xs:element name="quantity" type="xs:integer"/>
<xs:element name="price" type="xs:decimal"/>
<xs:element name="comment" type="xs:string" minOccurs="0" maxOccurs="2"/>
<xs:element name="shipping-date" type="xs:date" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
您将要使用XML编辑器或验证解析器来检查XSD是否为well-formed and valid。