在xml架构中使用keyref为具有值列表的属性

时间:2013-01-08 15:25:20

标签: java xml xsd schema xerces

我正在尝试设计一个模式来验证已在应用程序中使用的xml格式(重新设计xml的空间不大)。

我正在尝试利用xml架构字典的key和keyref元素来验证身份约束。

一个特别的问题是xml建模一对多关系的方式

<spaceships>
    <spaceship guns="gun1 gun2 gun3"/>
</spaceships>
<guns>
    <gun id="gun1"/>
    <gun id="gun2"/>
    <gun id="gun3"/>
</guns>

我在架构

中想出了这对key / keyref
<xs:key name="gunKey">
    <xs:selector xpath="guns/gun" />
    <xs:field xpath="@id" />
</xs:key>

<xs:keyref name="gunRef" refer="gunKey">
    <xs:selector xpath="spaceships/spaceship" />
    <xs:field xpath="@guns" />
</xs:keyref>

这不会用xerces抗议验证:

  

键'gun1 gun2 gun3'键'gunRef'找不到元素的身份限制。

无论如何在模式中表示列表的值是逗号分隔的对另一个实体的引用列表,并且仍然可以获得身份约束验证的好处吗?

1 个答案:

答案 0 :(得分:1)

我担心,您无法为guns="gun1 gun2 gun3"等属性创建此类引用,因为gun1 gun2 gun3是一个简单的字符串,不会自动分为3个单独的部分。

编辑1:如果想要匹配此类属性,请查看此质量检查:XML schema; multiple from a list of valid attribute values