XSD:使用XSD根据该元素的属性值控制xml元素长度的限制

时间:2016-06-22 09:02:27

标签: xml xsd

以下是示例XML:

 <PatientName>
     <FamilyName updatable="2">Bob</FamilyName>
  </PatientName>

目前使用XSD是这样的:

<xs:simpleType name="reviewFamilyname">  
    <xs:restriction base="xs:string">   
        <xs:maxLength value="20"/>  
    </xs:restriction>  
</xs:simpleType>

<xs:element name="FamilyName" nillable="true">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="reviewFamilyname">
                <xs:attribute type="xs:string" name="updatable"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

目前我对姓氏使用限制,其最大长度应为20个字符。 我正在使用XSD 1.0,我想根据FamilyName元素的属性值对FamilyName元素应用限制。我希望禁用限制,

属性(可更新)值等于FamilyName元素中的2。

属性(可更新)值等于1且FamilyName元素值为空。

在所有其他情况下,应该启用限制。如何更改XSD以满足这些要求,这可能吗?如果是这样的话?

感谢。

1 个答案:

答案 0 :(得分:0)

在XSD 1.0中,元素内容的类型不能取决于其属性的值。

在XSD 1.1中,您可以使用名为条件类型分配的功能实现此目的。

你会想要这样的东西:

<xs:element name="FamilyName" type="xs:anyType">
  <xs:alternative test="@updateable = 1" type="...."/>
  <xs:alternative test="@updateable = 2" type="...."/>
  <xs:alternative type="...."/>
</xs:element>