搜索并试验,研究并绞尽脑汁(昨晚梦见它)。
尝试构建XSD架构,以根据标记的约束验证以下示例XML,具体取决于标记的值。
<data>
<dataSet>
<title>mediaType</title>
<value>FullLength</value>
</dataSet>
<dataSet>
<title>available</title>
<value>true</value>
</dataSet>
<dataSet>
<title>country</title>
<value>Canada</value>
</dataSet>
</data>
关于单个dataSet的约束的模式
<xs:complexType name="typeAvailable">
<xs:sequence>
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="available" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:boolean" />
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="typeMediaType">
<xs:sequence>
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="mediaType" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="FullLength|Clip" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="typeCountry">
<xs:sequence>
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="typeCountry" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Canada|US" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
我能想到的最好的方法是不验证dataSet的故障(它们将会出现故障)
<xs:complexType name="typeData">
<xs:all>
<xs:element name="dataSet" type="typeMediaType" />
<xs:element name="dataSet" type="typeAvailable" />
<xs:element name="dataSet" type="typeCountry" />
</xs:all>
</xs:complexType>
当然,我坚持使用我得到的数据,但没有说我无法用XSLT将其转换成什么,我不知道。我希望有一个优雅的XSD解决方案,唉,我担心这是不可能的。
任何人都可以证明我错了吗?这是我很长一段时间内的第一个模式项目。
更新
你知道吗,我想我要验证它的结构,阅读&lt; data&gt;部分w / LINQ并通过XSLT将其转换为
<data>
<mediaType>FullLength</mediaType>
<available>true</available>
<country>Canada</country>
</data>
无论如何,我可能有理由这样做,因为在验证后的数据与&lt; title&gt;&lt; value&gt;中的数据一起变得很糟糕。如何配对。
答案 0 :(得分:1)
XML Schema无法实现“条件”约束。键有很少的技巧,但它们非常有限。考虑使用Schematron,它具有更丰富的验证功能。
通常,XML Schema更多地是关于结构和类型,它的约束能力非常有限。
答案 1 :(得分:0)
Element Declarations Consistent约束不允许使用具有不同类型的相同命名元素。