2017-02-20 57 views
0

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

例如: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> 
+0

你尝试过什么? – Niitaku

+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

+0

我的解决方案接近第二种方法,我分为两组,但工会不适合我。 –

+0

如何检查第二个元素的元素,例如?跳过第一个。 –

相关问题