8

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

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

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

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

我在我的架构中想出了这对密钥/密钥引用

<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”。

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

4

1 回答 1

1

恐怕您不能为属性创建这样的引用,guns="gun1 gun2 gun3"因为gun1 gun2 gun3它是一个简单的字符串,不会自动分为 3 个单独的部分。

编辑 1:如果您想匹配此类属性,请查看此 QA:XML 模式;来自有效属性值列表的多个

于 2013-01-08T15:35:25.850 回答