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

art*_*tur 7 java xml schema xsd 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>
Run Code Online (Sandbox Code Playgroud)

我在我的架构中想出了这对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>
Run Code Online (Sandbox Code Playgroud)

这不会与xerces抗议验证:

键'gun1 gun2 gun3'键'gunRef'找不到元素的身份约束.

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

And*_*niy 1

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

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