编辑:添加的键。如何在xml模式中定义递归类型的Xpath选择器
嗨,
我有以下类型的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>
我需要AA XPath的选择申报keyref来ref
属性,但我不知道如何定义递归路径。
<xsd:keyref name="definitionRef" refer="definitionId">
<xsd:selector xpath="???"/> <<<how to find all "ref" of entry1 ?
<xsd:field xpath="@ref"/>
</xsd:keyref>
谢谢你的时间。
为了达到目的,你需要keyref吗?语义是重要的。 – 2010-10-19 12:40:06
我使用id属性定义了一些元素。 id属性被声明为一个键。我想保证ref-attribute的内容是在id-attribute中定义的。你有没有得到我的意图,还是应该扩大范例? – kasten 2010-10-19 12:53:02
@kasten:我看到的问题是,在您的示例中,您没有提供IDREF的ID或KEY。 – 2010-10-19 15:22:41