我正在尝试设计一个模式来验证应用程序中已使用的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”键。
有没有办法在模式中表达列表的值为对另一个实体的逗号分隔引用,并且仍然能够获得唯一约束条件验证的好处?
xs:IDREFS
怎么样? - Steve