我想编写一个仅通过必填字段通过验证的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进行验证,xsd具有一些可选的additioanl属性。如下:
<Order OrderNo="12345" OrgCode="US" Email="ab@gmail.com">
<OrderLines>
<OrderLine OrderLineNo="1" OrderLineKey="1" Qty="2"/>
</OrderLines>
</Order>
我希望以能够允许任意数量的可选属性(电子邮件,数量和任何非强制性属性)和元素的方式编写xsd。即使未在xsd中定义它们。
答案 0 :(得分:0)
您可以在要添加未指定元素的位置使用xs:any元素,并在需要其他属性的位置使用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>