2009-09-19 5 views
42

La documentation semble indiquer qu'elle fait référence à un autre élément du schéma, mais comment pourrait-elle être utilisée - je ne l'ai jamais vue dans les schémas avec lesquels j'ai travaillé.Que fait l'attribut ref sur un élément dans un XSD?

Quelqu'un at-il eu de beaux cas d'utilisation ou quelque chose qui pourrait expliquer son utilisation plus loin? Par exemple si vous souhaitez déclarer des types d'éléments qui peuvent apparaître profondément imbriqués, mais aussi comme des éléments de niveau supérieur dans un document d'instance. Par exemple:

Répondre

61

Fondamentalement, il fait référence à un autre élément qui est delared ailleurs, qui peut ou peut ne pas être le même document de schéma. Par exemple, il pourrait provenir d'un schéma référencé de manière externe dans un espace de noms différent. Supposons que vous utilisiez l'élément élément beaucoup dans plusieurs schémas différents, vous pouvez le déclarer (et tous les autres types communs et attributs) dans un schéma commun, puis réutiliser ceux dans tous vos autres schémas. Si vous faites référence à votre schéma commun avec l'espace de noms c, vous pouvez déclarer une instance de l'article elemnt seul ou dans le cadre d'un type comme suit:

<xs:element ref="c:item" /><!-- reference here --> 
<xs:complexType name="something"> 
    <xs:sequence> 
     <xs:element ref="c:item" /><!-- and here --> 
    </xs:sequence> 
    <xs:element name="other" type="xs:Name" /> 
</xs:complexType> 

La définition dans les données schéma ressemblerait à ceci:

<xs:element name="item" type="itemType" /><!-- referenced element --> 
<xs:complexType name="itemType"> 
    <xs:sequence> 
     <xs:element name="code" type="xs:Name" minOccurs="0" maxOccurs="unbounded" /> 
    </xs:sequence> 
    <xs:attribute name="description" type="xs:normalizedString" use="required" /> 
</xs:complexType> 
+4

J'ai voté ceci, car c'est une bonne explication. Cependant, un attribut ref se réfère à une entité externe par son "id", pas "name". Pour que votre exemple fonctionne, la déclaration de "item" dans le second bloc de code doit être: rjray

+9

Selon toute la documentation de XSD 'ai vu, le "ref" s'applique à un "nom", comme on le voit ici: http://www.w3schools.com/schema/el_element.asp (ref - Facultatif, se réfère au nom d'un autre élément. ... – grkvlt

+1

Quand choisirais-tu le type ref? – pikachu0

Questions connexes