Java 在xml模式中为具有值列表的属性使用keyref

Java 在xml模式中为具有值列表的属性使用keyref,java,xml,xsd,schema,xerces,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"/>

我试图设计一个模式来验证已经在应用程序中使用的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”


在模式中是否可以表示列表的值是对另一个实体的引用的逗号分隔列表,并且仍然可以获得标识约束验证的好处?

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


编辑1:如果要匹配这些属性,请查看此QA:

是,我理解。。。。我想我可以在key或keyref元素中使用一些xpath魔法来避免重新设计xml格式……好吧,@artur,那么请看这个QA:您链接的问题更多的是关于表示少数已知值的排列,我在这里处理的是身份检查,这是不同的。我需要验证列表中的每个项目是否是文档中某个元素的主键。谢谢,
xs:IDREFS
呢?