基于xsd中标记值的约束

时间:2017-01-31 05:33:26

标签: xsd xsd-validation

我必须根据其标记值

在xml下面创建约束
<struct>
<member>
<name>Identifier</name>
<value><i4>11002</i4></value>
</member>
<member>
<name>StartDate</name>
<value><dateTime.iso8601>20160701T12:00:00+0000</dateTime.iso8601>      
</value>
</member>
<member>
<name>Type</name>
<value><i4>0</i4></value>
</member>
</struct>

我创建的xsd格式就像,它只是简短的代码形式,并使用在线工具生成。

<xs:element minOccurs="0" name="struct">
    <xs:complexType>
         <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="member">
                <xs:complexType>
                     <xs:sequence>
                         <xs:element minOccurs="0" name="name" type="xs:string" />
                         <xs:element minOccurs="0" name="value">
                         <xs:complexType>
                            <xs:sequence>
                                <xs:element minOccurs="0" name="string" type="xs:string" />
                            </xs:sequence>
                         </xs:complexType>
                        </xs:element>
                     </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

我需要的是对startDate施加约束,使其格式正确。 和标识符只有5到10位数。

1 个答案:

答案 0 :(得分:0)

您的XML设计过于元化,从而使您无法使用XSD 1.0表达对数据值的约束。

您可以执行以下操作之一:

  1. 重新设计XML以使用具体的标记名称,例如IdentifierStartDate等。
  2. i4以外,dateTime.iso8601name约束。
  3. 使用XSD 1.1断言根据值强制执行检查 name
  4. 建议您选择#1。