2011-01-18 5 views
2

J'essaie d'obtenir directement les éléments uniques et clés pour XML Schema, en particulier en ce qui concerne le sélecteur et les éléments de champ à l'intérieur. Je ne suis pas clair sur les sélecteurs et les champs, et je dois obtenir ce droit. Supposons que j'ai un fichier XML avec des sociétés répertoriées dans des groupes fonctionnels. J'ai un élément dans chaque groupe avec un champ unique (pour référence chaque groupe particulier).Localement Unique?

Je souhaite créer un champ unique à l'intérieur de chaque liste de sociétés au sein de chaque groupe qui serait unique uniquement dans ce groupe particulier.

Serait-ce correct ?:

<xs:unique id="company_group_refs" name="company_group_refs"> 
     <xs:selector xpath="root/all_companies/company_group"/> 
     <xs:field xpath="company_group_ref"/> 
    </xs:unique> 

    <xs:unique id="company_refs" name="company_refs"> 
     <xs:selector xpath="root/all_companies/company_group"/> 
     <xs:field xpath="company/company_ref"/> 
    </xs:unique> 

Si oui, pourrais-je condenser ci-dessus à cette ?:

<xs:unique id="company_refs" name="company_refs"> 
     <xs:selector xpath="root/all_companies/company_group"/> 
     <xs:field xpath="company_group_ref"/> 
     <xs:field xpath="company/company_ref"/> 
    </xs:unique> 

Pour référencer un nom d'entreprise en particulier, je veux être en mesure de donnent une expression XPath comme ceci:

racine/all_companies/company_group [company_group_ref = x1]/entreprise [company_ref = x2]/nom

Où: x1 = référence unique pour le groupe d'entreprises.
et: x2 = la référence unique de l'entreprise au sein de ce groupe.

Ce qui suit est un extrait de fichier XML qui illustre ce scénario:

<all_companies> 

    <company_group> 
     <company_group_name>Cleaning</company_group_name> 
     <company_group_ref>1</company_group_ref> 
     <company> 
      <name>Ajax</name> 
      <company_ref>1</company_ref> 
     </company> 
     <company> 
      <name>Bloomburg</name> 
      <company_ref>2</company_ref> 
     </company> 
     <company> 
      <name>Morris</name> 
      <company_ref>3</company_ref> 
     </company> 
    </company_group> 

    <company_group> 
     <company_group_name>Electrical</company_group_name> 
     <company_group_ref>2</company_group_ref> 
     <company> 
      <name>Armstrong</name> 
      <company_ref>1</company_ref> 
     </company> 
     <company> 
      <name>Bloomburg</name> 
      <company_ref>2</company_ref> 
     </company> 
     <company> 
      <name>Zap Electrical</name> 
      <company_ref>3</company_ref> 
     </company> 
     <company> 
      <name>Morris</name> 
      <company_ref>4</company_ref> 
     </company> 
    </company_group> 

</all_companies> 

MERCI !!!

Répondre

1

Votre contrainte pour exiger l'unicité de group_refs est correcte. La contrainte de faire company_refs uniques au sein d'un groupe devrait se lire comme suit

<xs:element name="company_group"> 
    <xs:unique name="company_unique_within_group"> 
    <xs:selector xpath="company"> 
    <xs:field xpath="company_ref"> 
    </xs:unique> 
    ... 
</xs:element> 

Lire que « dans un company_group » « tout sélectionner entreprise » et exige que « company_ref est unique parmi eux ».

Votre contrainte de société_ref indique: "globalement" "pour tous les groupes de société" requiert que "company/company_ref soit unique". Votre contrainte condensée exprime quelque chose de totalement différent: "globalement" "pour tous les groupes de société" requiert que "la combinaison de company_group_ref et company/company_ref" soit unique. "Etant donné qu'il existe plusieurs company_refs par groupe, les deux derniers sont

+0

Salut Martin, merci pour la réponse et la réponse. – user304607