我有一個好像是相同的元素名稱,但不同的驗證邏輯
<doc>
<field name="simple_meta">book</field>
<field name="complex_meta">journal</field>
<field name="text_date">some text</field>
</doc>
我想通過模式爲基於「name」屬性值來驗證元素文本的XML文件。也就是說,如果屬性的值是「simple_meta」,我想對「simpleRestriction」進行驗證,以防「complex_meta」進行「complexRestriction」驗證。問題是我無法在同一節點下定義具有相同名稱的元素。有人可以幫我解決這個問題嗎?
<xs:schema ......>
<xs:simpleType name="simpleRestriction">
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="complexRestriction">
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
<xs:pattern value="([\w])*"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="str">
<xs:complexType>
<xs:simpleContent>
<xs:extention base="simpleRestriction">
<xs:attribute name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="simple_meta"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extention>
</xs:simpleContent>
</xs:ComplexType>
</xs:element>
<xs:element name="str">
<xs:complexType>
<xs:simpleContent>
<xs:extention base="complexRestriction">
<xs:attribute name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="complex_meta"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extention>
</xs:simpleContent>
</xs:ComplexType>
</xs:element>
</xs:schema>
這不能用XSD 1.0完成 - 你需要d其他系統(Schematron或RelaxNG或XSD 1.1也許,但我不熟悉它們) – MiMo 2013-03-21 20:19:02