Acepto el siguiente consejo de cdragon para evitar la opción # 2. La elección entre # 1 & # 3 es en gran parte una cuestión de estilo. Me gusta usar atributos para lo que considero atributos de la entidad y elementos para lo que considero datos. A veces, es difícil de clasificar. Sin embargo, ninguno está "equivocado".
Y mientras hablamos del tema del diseño de esquemas, agregaré mis dos centavos con respecto a mi nivel preferido de reutilización (máxima) (de elementos y tipos), que también puede facilitar la referencia "lógica" externa de estas entidades en, por ejemplo, un diccionario de datos almacenado en una base de datos.
Tenga en cuenta que, si bien el patrón de esquema "Garden of Eden" ofrece la máxima reutilización, también implica la mayor parte del trabajo. En la parte inferior de esta publicación, proporcioné enlaces a otros patrones cubiertos en la serie de blogs.
• El jardín de Edén enfoquehttp://blogs.msdn.com/skaufman/archive/2005/05/10/416269.aspx
utiliza un enfoque modular mediante la definición de todos los elementos a nivel mundial y como el enfoque de persiana veneciana todas las definiciones de tipos se declaran a nivel mundial. Cada elemento se define globalmente como un elemento secundario inmediato del nodo y su atributo de tipo se puede establecer en uno de los tipos complejos nombrados.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="TargetNamespace" xmlns:TN="TargetNamespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified"/>
<xs:element name="BookInformation" type="BookInformationType"/>
<xs:complexType name="BookInformationType"/>
<xs:sequence>
<xs:element ref="Title"/>
<xs:element ref="ISBN"/>
<xs:element ref="Publisher"/>
<xs:element ref="PeopleInvolved" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PeopleInvolvedType">
<xs:sequence>
<xs:element name="Author"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Title"/>
<xs:element name="ISBN"/>
<xs:element name="Publisher"/>
<xs:element name="PeopleInvolved" type="PeopleInvolvedType"/>
</xs:schema>
La ventaja de este enfoque es que los esquemas son reutilizables. Dado que tanto los elementos como los tipos están definidos globalmente, ambos están disponibles para su reutilización. Este enfoque ofrece la cantidad máxima de contenido reutilizable. Las desventajas son que el esquema es detallado. Este sería un diseño apropiado cuando crea bibliotecas generales en las que no puede hacer suposiciones sobre el alcance de los elementos y tipos de esquema y su uso en otros esquemas, particularmente en lo que se refiere a extensibilidad y modularidad.
Dado que cada tipo y elemento distintos tienen una sola definición global, estas partículas/componentes canónicos se pueden relacionar uno a uno con los identificadores de una base de datos. Y aunque a primera vista puede parecer una tarea manual en curso tedioso para mantener las asociaciones entre las Pruebas XSD partículas/componentes y la base de datos, SQL Server 2005 puede, de hecho, generar identificadores de los componentes del esquema canónicas a través de la declaración
CREATE XML SCHEMA COLLECTION
http://technet.microsoft.com/en-us/library/ms179457.aspx
a la inversa, para construir un esquema de las partículas canónicas, SQL Server 2005 proporciona la
SELECT xml_schema_namespace function
http://technet.microsoft.com/en-us/library/ms191170.aspx
ca · non · i · cal Relacionado a Matemáticas. (de una ecuación, coordenadas, etc.) "en simple o en forma estándar" http://dictionary.reference.com/browse/canonical
Otros, más fácil de construir, pero menos resuable patrones de esquema/más "desnormalizadas/redundantes" incluyen
• El enfoque de la muñeca rusahttp://blogs.msdn.com/skaufman/archive/2005/04/21/410486.aspx
El esquema tiene un único elemento global: el elemento raíz. Todos los demás elementos y tipos se anidan progresivamente a mayor profundidad dándole el nombre debido a que cada tipo se ajusta al que está encima. Como los elementos de este diseño se declaran localmente, no serán reutilizables mediante las instrucciones de importación o inclusión.
• El enfoque Salami Rebanadahttp://blogs.msdn.com/skaufman/archive/2005/04/25/411809.aspx
Todos los elementos se definen globalmente pero las definiciones de tipos se definen localmente. De esta forma, otros esquemas pueden reutilizar los elementos. Con este enfoque, un elemento global con su tipo definido localmente proporciona una descripción completa del contenido de los elementos. Este 'segmento' de información se declara individualmente y luego se agrega de nuevo y también se puede reconstruir para construir otros esquemas.
• El enfoque persiana venecianahttp://blogs.msdn.com/skaufman/archive/2005/04/29/413491.aspx
Al igual que en el enfoque de la muñeca rusa en cuanto a que ambos utilizan un único elemento global. El enfoque de Persiana veneciana describe un enfoque modular nombrando y definiendo todas las definiciones de tipo de forma global (en oposición al enfoque de Salami Slice que declara los elementos globalmente y los tipos localmente). Cada tipo definido globalmente describe un "slat" individual y puede ser reutilizado por otros componentes. Además, todos los elementos declarados localmente pueden ser espacios de nombres calificados o espacios de nombres no calificados (los listones pueden "abrirse" o "cerrarse") dependiendo de la configuración del atributo elementFormDefault en la parte superior del esquema.
buena pregunta, lástima que no hay una respuesta definitiva :) Pero al menos sé que a nadie le importa, así que puedo seguir diseñando aleatoriamente mis esquemas :) –