我有一个XSD类型验证IP地址(简化):
<xs:simpleType name="ip-address">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" />
</xs:restriction>
</xs:simpleType>
我有一个验证IP端口的XSD类型
<xs:simpleType name="ip-port">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1025"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
我有一个XSD类型可以验证IP数据中的通道
<xs:simpleType name="ip-channel">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="1024"/>
</xs:restriction>
</xs:simpleType>
我现在希望添加另一种基本上是上述类型的复合类型,但在每个字段之间使用':'
个分隔符。
结果是XML可以具有读取239.0.0.1:15001:1
的属性。
这是我们公司文档和XML配置中的常见表示法。我们最近才将其作为单元测试的一部分进行XML验证。
模糊解决方案:
<xs:simpleType name="pmc-source">
<xs:restriction base="xs:string">
<!--<xs:pattern value="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,5}\:[0-9]{1,5}"/-->
<xs:pattern value="[ip-address]\:[ip-port]\:[ip-channel]"/>
</xs:restriction>
</xs:simpleType>
注释掉的模式大致有效,但不像其子部分那样严格,因为它不执行范围检查。此外,它是重复验证工作,因为地址,端口和通道验证必须存在,以用于其他无关验证。
是否可以根据XSD中的其他simpleType表达一个XSD simpleType? 如果是这样,那么正确的语法是什么?