xml - 如何制作应该只验证mandaotry字段的通用xsd
问题描述
我想写一个 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,它有一些可选的附加属性。如下:
<Order OrderNo="12345" OrgCode="US" Email="ab@gmail.com">
<OrderLines>
<OrderLine OrderLineNo="1" OrderLineKey="1" Qty="2"/>
</OrderLines>
</Order>
我希望我的 xsd 以允许任意数量的可选属性(电子邮件、数量和任何非强制性属性)和元素的方式编写。即使它们没有在 xsd 中定义。
解决方案
You can use xs:any element in the place you want to be able to add the unspecified elements to, and xs:anyAttribute element in the place where you want the additional attributes.
To make your example validate, you would need to change it to
<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>
推荐阅读
- terraform - Terraform 私有提供者如何获取 GKE 集群的 kubeconfig
- python - 这是在 python 中重新创建 C 数据类型的可行方法吗?
- regex - 使用 RegExr 跳过第一个位置匹配 Javascript
- swift - “形状”变量如何在引擎盖下工作?
- python - 如何使用 lambda 函数将文件上传到 Amazon S3?
- spring-boot - 您如何断言将对象添加到另一个对象多对多
- python - 我可以有效地进行多维切片吗?
- python - 火炬 | 使用数据集 Omniglot 获取“RuntimeError: Found dtype Long but expected Float”
- windows - 在安全桌面(登录屏幕)上的 Windows 10 轻松访问菜单中添加自定义条目
- objective-c - 解析 PFUser 对象不会解码