Как сделать общий xsd, который должен проверять только основные поля - PullRequest
0 голосов
/ 13 мая 2019

Я хочу написать xsd, который пройдет проверку только для обязательных полей.

Я написал ниже xsd для xml.

<Order OrderNo="12345" OrgCode="US">
    <OrderLines>
        <OrderLine OrderLineNo="1" OrderLineKey="1" />
        <OrderLine OrderLineNo="2" OrderLineKey="2" />
    </OrderLines>
</Order>

В приведенном выше xml OrderNo, OrgCode,OrderLineNo, OrderLineKey являются обязательными полями.

Я написал ниже xsd для выше xml.

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="OrderLines">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OrderLine" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:byte" name="OrderLineNo" use="required"/>
                      <xs:attribute type="xs:byte" name="OrderLineKey" use="required"/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute type="xs:short" name="OrderNo" use="required"/>
      <xs:attribute type="xs:string" name="OrgCode" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Теперь я хочу ниже xml для проверки выше xsd, который имеет некоторые атрибуты additioanl, которые являются необязательными,Как показано ниже:

<Order OrderNo="12345" OrgCode="US" Email="ab@gmail.com">
    <OrderLines>
        <OrderLine OrderLineNo="1" OrderLineKey="1"  Qty="2"/>
    </OrderLines>
</Order>

Я хочу, чтобы мой xsd был написан так, чтобы можно было разрешить любое количество необязательных атрибутов (Email, Qty и любой атрибут, который не является обязательным) и элементов.Даже если они не определены в xsd.

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете использовать xs: любой элемент в том месте, куда хотите добавить неопределенные элементы, и xs: anyAttribute в том месте, где вы хотите добавить дополнительный элемент. атрибутов.

Чтобы ваш пример подтвердился, вам нужно изменить его на

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="OrderLines">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="OrderLine" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:byte" name="OrderLineNo" use="required"/>
                      <xs:attribute type="xs:byte" name="OrderLineKey" use="required"/>
                      <xs:anyAttribute/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute type="xs:short" name="OrderNo" use="required"/>
      <xs:attribute type="xs:string" name="OrgCode" use="required"/>
      <xs:anyAttribute/>
    </xs:complexType>
  </xs:element>
</xs:schema>
...