假设我有这个XML:
<list>
<item id="red" type="colors"/>
<item id="green" type="colors"/>
<item id="dog" type="pets"/>
<item id="blue" type="pets"/> <!-- invalid because blue is not pets -->
<item id="cat" type="pets"/>
</list>
<enumeration name="colors">
<items>
<item value="red"/>
<item value="blue"/>
<item value="green"/>
<items>
</enumeration>
<enumeration name="pets">
<items>
<item value="dog"/>
<item value="cat"/>
<item value="chicken"/>
</items>
</enumeration>
如何在上面标记为无效的项目上编写约束(XSD 1.0)失败?我根据type
属性的值,坚持如何创建引用并在该引用中提供特定集合的名称(颜色或宠物)?
答案 0 :(得分:1)
使用 Conditional Type Assignment 根据item
属性键入@type
。这需要XSD 1.1。
示例:请参阅 How to make type depend on attribute value using Conditional Type Assignment
重新设计XML,使通用item
名称替换为实际传达元素类型的名称:color
或pet
:
<list>
<color id="red"/>
<color id="green"/>
<pet id="dog"/>
<pet id="blue"/>
<pet id="cat"/>
</list>
然后,为您的XML编写XSD将是微不足道的,您可以在XSD 1.0中执行此操作。