【发布时间】:2010-10-27 07:00:41
【问题描述】:
编辑:添加键。
嗨,
我有以下类型的 xml 架构:
<xs:complexType name="definition">
<xs:sequence/>
<xs:attribute name="id"/>
</xs:complexType>
<xsd:key name="definitionId">
<xsd:selector xpath="definition"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xs:complexType name="elem">
<xs:sequence>
<xs:element name="entry1" type="elem" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="entry2" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ref" type="xs:string" use="required"/>
</xs:complexType>
这允许类似:
<definition id="A">
<definition id="B">
<definition id="C">
<entry1 ref="A">
<entry1 ref="B">
<entry1 ref="C"/>
<entry2/>
</entry1>
<entry1 ref="C">
</entry1>
</entry1>
我需要一个 XPath 选择器来声明 ref 属性的 keyref,但我不知道如何定义递归路径。
<xsd:keyref name="definitionRef" refer="definitionId">
<xsd:selector xpath="???"/> <<<how to find all "ref" of entry1 ?
<xsd:field xpath="@ref"/>
</xsd:keyref>
感谢您的宝贵时间。
【问题讨论】:
-
你需要keyref吗?语义很重要。
-
我正在定义一些带有 id 属性的元素。 id-attribute 被声明为一个键。我想保证 ref-attribute 的内容是在 id-attribute 中定义的。你明白我的意图还是我应该扩展这个例子?
-
@kasten:我看到的问题是,在您的示例中,您没有为 IDREF 提供 ID 或 KEY。
-
all "ref" of entry1到底是什么意思?//entry1/@ref不就行了吗? -
// 不是 xml-schema 支持的 xpath 子集的一部分。我正在寻找一种等效的方法来做到这一点:(