2008-09-02 24 views
6

Al definir XSD que puede elegir para definir sus tipos como tipos anidados o tipos globales (complexType).XSD: Tipos anidados vs Tipos globales

Entiendo que los tipos globales son de mucho más uso cuando se trata de morfismo o reutilización de elementos.

Sin embargo, si tiene un modelo de big data, debe definir para cada nivel un complexType global y luego crear un elemento que haga referencia al tipo global.

anidada

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

Global

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

Por lo tanto, mi pregunta: ¿Cuándo se usan tipos anidados en vez de hacerlos global?

Para cualquier persona interesada: Mi pregunta de alguna manera se relaciona con esta pregunta (XML attribute vs element).

Respuesta

7

En el ejemplo dado, no hay una diferencia real entre los dos, y no hay ventajas o desventajas significativas para ninguno de ellos.

Sin embargo, en esquemas más grandes, las cosas pueden volverse muy desordenadas y difíciles de manejar cuando la práctica de elegir anidadas en lugar de globales no está claramente definida.

Las razones obvias para usar tipos globales (principalmente la reutilización, también la anidación) tienden a dictar, en general, prefiero un modo u otro. Es decir. si está reutilizando algunos tipos complejos pero no otros, conviértalos en globales. Si no estás reutilizando nada, haz que todos estén anidados.

La excepción a esto (y esto es algo que he encontrado con frecuencia) es si la definición de los tipos constituye la mayor parte de la complejidad (!) De su esquema, y ​​su contención es relativamente simple. En este caso, independientemente de si se vuelven a utilizar, les recomiendo que sean globales, ya que es mucho más fácil reestructurar/reordenar el documento cuando no tiene que pasar por las complejas definiciones de ComplexType. También son teóricamente más portátiles.

También hay casos donde no puede lograr ciertas estructuras de documentos con tipos anidados - un ejemplo de esto es usar dos tipos complejos en una secuencia que puede contener 0 a instancias ilimitadas de cada tipo, en cualquier orden mixto. Esto no es posible con los tipos anidados, pero sí con los tipos globales referenciados.

Cuestiones relacionadas