Comment définir un Xpath-sélecteur de schéma xml pour un type récursif

Edit: ajout de touches.

Salut,

J'ai un schéma xml avec les types suivants:

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

Cela permet à quelque chose comme:

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

J'ai besoin d'un un XPath-sélecteur de déclarer un keyref à la ref attribut, mais je n'ai pas la moindre idée de comment définir une récursif chemin.

<xsd:keyref name="definitionRef" refer="definitionId">
  <xsd:selector xpath="???"/>  <<<how to find all "ref" of entry1 ?    
  <xsd:field xpath="@ref"/>
</xsd:keyref>

Merci pour votre temps.

Pour quel but avez-vous besoin de la keyref? La sémantique est importante.
Je suis la définition de certains éléments avec un id de l'attribut. L'id de l'attribut est déclaré comme une clé. Je veux garantir que le contenu de la ref-attribut est défini dans un id de l'attribut. Voulez-vous obtenir mon intention ou devrais-je mesure l'exemple?
Le problème que je vois c'est que dans votre exemple, vous n'avez pas à fournir l'ID ou de la CLÉ du IDREF.
mise à jour de la clé 🙂
Que voulez-vous dire exactement par all "ref" of entry1? Ne serait pas //entry1/@ref juste travailler?

OriginalL'auteur kasten | 2010-10-19