XSD - 复合simpleType验证

时间:2017-06-20 10:39:33

标签: xml validation xsd

我有一个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? 如果是这样,那么正确的语法是什么?

0 个答案:

没有答案