XSD 根据类型属性验证列表项
XSD validation of list items based on type attribute
假设我有这个 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
属性的值在该参考中提供特定集合的名称(颜色或宠物)?
选项 1
使用 Conditional Type Assignment 其中 item
是根据其 @type
属性键入的。这需要 XSD 1.1.
示例:参见
选项 2
重新设计您的 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 中这样做。
假设我有这个 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
属性的值在该参考中提供特定集合的名称(颜色或宠物)?
选项 1
使用 Conditional Type Assignment 其中 item
是根据其 @type
属性键入的。这需要 XSD 1.1.
示例:参见
选项 2
重新设计您的 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 中这样做。