tipos - http www w3 org 2001 xmlschema
XSD: tipos anidados vs tipos globales (1)
Al definir XSD, puede elegir definir sus tipos como tipos anidados o tipos globales (complexType).
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, debería definir para cada nivel un complexType global y luego crear un elemento que haga referencia al tipo global.
Anidado
<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 utilizan tipos anidados en lugar de hacerlos globales?
Para cualquier persona interesada: Mi pregunta de alguna manera se relaciona con esta pregunta ( atributo XML vs elemento ).
En el ejemplo dado, no hay una diferencia real entre los dos, y no hay ventajas o desventajas significativas para ninguno de los dos.
Sin embargo, en esquemas más grandes, las cosas pueden volverse muy desordenadas y difíciles de manejar cuando la práctica para elegir anidadas sobre las globales no está claramente definida.
Las razones obvias para usar tipos globales (principalmente reutilización, también anidación) tienden a dictar, en general, prefiero un modo u otro. Es decir, si reutiliza 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 en los que no puede lograr ciertas estructuras de documentos con tipos anidados; un ejemplo de esto es el uso de dos complexTypes en una secuencia que puede contener 0 en instancias ilimitadas de cada tipo, en cualquier orden mixto. Esto no es posible con los tipos anidados, pero sí con los tipos globales referenciados.