关于 xsd:XML Schema 来限制一个字段基于另一个
XML Schema to restrict one field based on another
我有以下架构,我使用它来确保一个人的 PhoneNumber 和 PhoneNumberType(家庭、工作等)不超过 10 个字符。但是,我想改进此架构,以便如果未提供 PhoneNumber,则不需要 PhoneNumberType,但如果提供了 PhoneNumber,则需要。有没有办法在 XML Schema 1.0 中做到这一点?
我知道这可以在 XML Schema 1.1 中使用 <xs:assert/> 完成,但不幸的是我被 XML Schema 1.0 卡住了。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xs:element name="PhoneNumber"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="PhoneNumberType"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> </xs:element> </xsd:schema> |
抱歉,XML Schema 不能这样做。
一些类似的问题:
- 两个xml列表的长度可以定义为要求相等吗?
- 基于属性限制元素值
- 如何使用属性值作为 XML 多态类型选择的判别器?
- 如何在 XSD 中根据它的邻居 xml 节点值验证 xml 节点值
可能为时已晚,但您可以像这样将它们分组
|
1
2 3 4 5 |
<xs:group name="group">
<xs:sequence> <xs:element ref="PhoneNumber"/> <xs:element ref="PhoneNymberType" /> </xs:sequence> |
是否需要这个组
在我看来,这是一种"有"关系。
如果你有一个PhoneNumber 元素,那么它应该有一个PhoneNumberType 类型的属性。我建议您将 PhoneNumber 转换为复杂元素并将 PhoneNumberType 设置为它的必需属性,而不是搞乱验证和限制。
相关讨论
- 我无法更改 XML 文档的结构,因为它来自外部源。