2008-09-02 8 views
6

Lors de la définition XSD, vous pouvez choisir de définir vos types comme imbriquées types ou globaux types (complexType). Je comprends que les types globaux sont beaucoup plus utiles quand il s'agit de morphisme ou de réutilisation d'éléments. Toutefois, si vous avez un modèle de données volumineux, vous devez définir pour chaque niveau un complexType global, puis créer un élément référençant le type global.XSD: Types vs emboîtées mondiaux Types

Nested

<xs:element name="person"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="firstname"/> 
          <xs:element name="lastname"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="address"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="street"/> 
          <xs:element name="city"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 

mondial

<xs:element name="person"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="name" type="nameType"/> 
      <xs:element name="address" type="addressType"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:complexType name="nameType"> 
    <xs:sequence> 
     <xs:element name="firstname"/> 
     <xs:element name="lastname"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="addressType"> 
    <xs:sequence> 
     <xs:element name="street"/> 
     <xs:element name="city"/> 
    </xs:sequence> 
</xs:complexType> 

Par conséquent, ma question: Quand vous utilisez des types imbriqués au lieu de les faire global?

Pour les personnes intéressées: Ma question concerne d'une manière ou d'une autre cette question (XML attribute vs element).

Répondre

7

Dans l'exemple donné, il n'y a pas de réelle différence entre les deux - et pas d'avantages ou d'inconvénients significatifs pour les deux. Cependant, dans les schémas plus grands, les choses peuvent devenir très brouillon et difficiles à gérer lorsque la pratique de choisir imbriqué global n'est pas clairement définie.

Les raisons évidentes de l'utilisation de types globaux (principalement la réutilisation et l'imbrication) tendent à dicter - en général, je préfère un mode ou l'autre. C'est à dire. Si vous réutilisez des types complexes mais pas d'autres, faites en sorte qu'ils soient tous globaux. Si vous ne réutilisez rien, faites-les tous imbriqués. L'exception à ceci (et c'est quelque chose que j'ai rencontré fréquemment) est si la définition des types composent l'essentiel de la complexité (!) De votre schéma, et leur confinement est relativement simple. Dans ce cas, peu importe s'ils sont réutilisés, je vous recommande de les rendre globaux car il est beaucoup plus facile de restructurer/réorganiser votre document lorsque vous n'avez pas à parcourir des définitions complexes complexes. Ils sont aussi théoriquement plus portables. Il existe également des cas où vous ne pouvez pas réaliser certaines structures de document avec des types imbriqués - un exemple de ceci est l'utilisation de deux types complexes dans une séquence pouvant contenir 0 à des instances illimitées de chaque type, dans n'importe quel ordre mélangé. Ce n'est pas possible avec les types imbriqués, mais avec les types globaux référencés.