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
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
Vous devez vous connecter pour publier un commentaire.
<xsd:selector>
prend en charge limitée des expressions XPath. Seulementchild
axe est autorisée, mais l'expression XPath peut commencer avec.//
de sorte que vous pouvez utiliser une expression récursive.//entry1
Pour de plus amples informations, consultez le cahier des charges: http://www.w3.org/TR/xmlschema-1/#c-selector-xpath
La
<xsd:selector>
élément contient un XPath (XML Path Language) expression de la spécification de l'ensemble des éléments à travers lesquels les valeurs spécifiées par le champ doit être unique donc il ne devrait pas se référer à l'attributref
.<xsd:field>
élément(s) se référer aux valeurs qui doit être unique au sein de cet ensemble, donc il doit faire référence à l'attributref
(et le reste de lafields
à d'autres valeurs, si vous avez besoin d'une combinaison unique de valeurs).OriginalL'auteur jasso