s4s-elt-schema-ns:元素“ schema”的名称空间必须来自模式名称空间“ http://www.w3.org/2001/XMLSchema”

时间:2020-07-29 21:51:12

标签: xml xsd xsd-validation xml-validation

我有一个或多或少的简单任务来构建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。

1 个答案:

答案 0 :(得分:1)

在序列中的元素上放置minOccursmaxOccurs是可以的。

以下是您必须解决的一些问题:

  1. xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"应该是xmlns:xs="http://www.w3.org/2001/XMLSchema"。 (修复标题消息错误,但此后还有更多要解决的问题...)

  2. <xs:element name="purchase-order">不能有xs:element个孩子。请使用xs:complexType的孩子和xs:sequence的孙子。

  3. 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