基于类型属性

时间:2016-07-19 21:55:38

标签: xml xsd xsd-validation xml-validation

假设我有这个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 个答案:

答案 0 :(得分:1)

选项1

使用 Conditional Type Assignment 根据item属性键入@type。这需要XSD 1.1。

示例:请参阅 How to make type depend on attribute value using Conditional Type Assignment

选项2

重新设计XML,使通用item名称替换为实际传达元素类型的名称:colorpet

<list>
  <color id="red"/>
  <color id="green"/>
  <pet id="dog"/>
  <pet id="blue"/>
  <pet id="cat"/>
</list>

然后,为您的XML编写XSD将是微不足道的,您可以在XSD 1.0中执行此操作。