以下是示例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以满足这些要求,这可能吗?如果是这样的话?
感谢。
答案 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>