如何验证包含2个限制的字符串

时间:2017-02-20 13:36:13

标签: xsd-validation

我需要验证2个限制的字符串。字符串长度为6.前3个元素在[-1000-1000]之间,其他3个元素在[-3.14 -3.14]之间。

例如:1000 1000 900 3 2 3.14

我试过这个:

<xs:complexType name="aaa">
    <xs:simpleContent>
      <xs:extension base="bb">
        <xs:attribute name="size" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>



  <xs:simpleType name="bb">
    <xs:union memberTypes="listtry listtry2 "> 
    </xs:union>
  </xs:simpleType>  

  <xs:simpleType name="listtry">
  <xs:restriction base="mytry">
    <xs:length value="6"/>
  </xs:restriction>
</xs:simpleType> 

   <xs:simpleType name="mytry">
    <xs:list itemType="try1"></xs:list>
  </xs:simpleType>

  <xs:simpleType name="try1">
    <xs:restriction base="xs:double">
      <xs:maxInclusive value="100000"/>
      <xs:minInclusive value="-100000"/>
    </xs:restriction>
  </xs:simpleType>


  <xs:simpleType name="listtry2">
  <xs:restriction base="mytry2">
    <xs:length value="6"/>
  </xs:restriction>
  </xs:simpleType> 

  <xs:simpleType name="mytry2">
    <xs:list itemType="tryPI"> </xs:list>
  </xs:simpleType>

  <xs:simpleType name="tryPI">
    <xs:restriction base="xs:double">
      <xs:maxInclusive value="3.14"/>
      <xs:minInclusive value="-3.14"/>
    </xs:restriction>
  </xs:simpleType>

1 个答案:

答案 0 :(得分:0)

您可以为每个单独的值创建规则(正如您所做的那样),但是他们无法说每个元素的值列表都有不同的验证规则。

我认为你最接近的是一个限制每个值的正则表达式(xs:pattern)。像这样的东西

  

- ?\ d {1,4} - ?\ d {1,4} - ?\ d {1,4} - ?\ d(。\ d +)? - ?\ d(\ d +)? - ?\ d(。\ d +)

(我对正则表达式的东西并不擅长,但我认为这很接近!)

更好的方法可能是将6个值分解为单独的2个(可能是6个)元素/属性。然后,您可以应用已有的验证规则。每组价值观。

我将2个属性的值拆分为

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2017 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Thing">
        <xs:complexType>
            <xs:attribute name="Values3x1000" type="list3Value1000Type" />
            <xs:attribute name="Value3Pi" type="list3ValuePiType" />
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="value1000Type">
        <xs:restriction base="xs:double">
            <xs:maxInclusive value="1000" />
            <xs:minInclusive value="-1000" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="listValue1000Type">
        <xs:list itemType="value1000Type" />
    </xs:simpleType>
    <xs:simpleType name="list3Value1000Type">
        <xs:restriction base="listValue1000Type">
            <xs:length value="3" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="valuePiType">
        <xs:restriction base="xs:double">
            <xs:maxInclusive value="3.14" />
            <xs:minInclusive value="-3.14" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="listValuePiType">
        <xs:list itemType="valuePiType" />
    </xs:simpleType>
    <xs:simpleType name="list3ValuePiType">
        <xs:restriction base="listValuePiType">
            <xs:length value="3" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Liquid XML Simple Types