Es una W3C Recommendation que surge como sucesor del DTD (Document Type Definition) pero con mayor potencia descriptiva.
A diferencia del DTD, que tenía su propia sintaxis, los XMLSchema son documentos XML empleados para describir la estructura de otros documentos XML:
- Qué elementos pueden formar parte de un documento XML.
- Qué elementos hijo componen a esos elementos: orden y número.
- Si un elemento está vacío o puede contener texto
- Qué atributos pueden tener los elementos.
- Qué posibles valores pueden tomar los atributos.
Permiten definir nuevos tipos de datos y soportan herencia entre tipos de datos. Asi es posible la reutilización de un xml-schema en otro.
Cabe distinguir entre documento valido y documento bien formado.
Un documento válido será aquel que cumpla el XMLSchema que lo define.
Y un documento bien formado es aquel que sigue las reglas de sintaxis XML:
- debe empezar con la declaracion XML
- debe tener un unico elemento raíz
- Toda etiqueta tiene su correspondiente de cierre
- Los elementos son sensibles a las mayusculas
- Todos los elementos deben ser anidados correctamente
- Todos los atributos deben llevar los valores entre comillas
- Se definen entidades para los caracteres especiales
El elemento Raíz es:
<xs:schema> … </xs:schema>
Definición de un Elemento Simple
Es aquel que contiene sólo texto. No contiene a ningún otro elemento. Tampoco tiene atributos.
<xs:element name=”xxx” type=”yyy” default=”zzz” /> (valor por defecto)
<xs:element name=”xxx” type=”yyy” fixed=”zzz” /> (valor prefijado)
Entre los tipos predefinidos:
- xs:string
- xs:decimal
- xs:integer
- xs:boolean
- xs:date
- xs:time
Definición de un Elemento Complejo
Son aquellos elementos que tiene atributos o se componen de otros elementos o son elementos vacíos (puede tener atributos) o son elementos que contienen solo texto
Definir un elemento complejo compuesto por otro elementos
Al introducir los atributos dentro de <sequence> obliga a ese orden.
<xs:element name=”person”>
<xs:complexType>
<xs:sequence>
<xs:element name=”firstname” type=”xs:string”/>
<xs:element name=”lastname” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:element>
De esta forma los atributos firstname y lastname se pueden aplicar a otros elementos.
<xs:element name=”employee” type=”personinfo”/>
<xs:complexType name=”personinfo”>
<xs:sequence>
<xs:element name=”firstname” type=”xs:string”/>
<xs:element name=”lastname” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
Definir un elemento complejo compuesto por elementos vacíos (puede tener atributos).
<xs:element name=”product”>
<xs:complexType>
<xs:attribute name=”prodid” type=”xs:positiveInteger”/>
</xs:complexType>
</xs:element>
Definir un elemento complejo compuesto contienen solo texto
Se define mediante un “simpleContent”. Para estos casos hay que definir una “extensión” o una “restricción”.
<xs:element name=”somename”>
<xs:complexType>
<xs:simpleContent>
<xs:extension base=”basetype”>
….
….
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Definir un elemento complejo de contenido mixto (texto y otros elementos)
Para ello hay que usar el atributo mixed con valor true.
<xs:element name=”letter”>
<xs:complexType mixed=”true”>
<xs:sequence>
<xs:element name=”name” type=”xs:string”/>
<xs:element name=”orderid” type=”xs:positiveInteger”/>
<xs:element name=”shipdate” type=”xs:date”/>
</xs:sequence>
</xs:complexType>
</xs:element>
Declaración de atributos
Pueden tener un valor por defecto o prefijado (este no se puede modificar). Y pueden ser obligatorios u opcionales
<xs:attribute name=”xxx” type=”yyy” default=”zzz” />
<xs:attribute name=”xxx” type=”yyy” fixed=”zzz” />
<xs:attribute name=”xxx” type=”yyy” use=”required” />
Definición de restricciones
También se conocen como facets. Las restricciones se usan para definir los valores aceptables de los elementos o atributos.
Indicadores
Establecen cómo deben aparecer o usarse los elementos definidos dentro del doc XML.
- Indicadores de orden: establecen un orden de los elementos
- All (cualquier orden y solo una ocurrencia)
- Choice (o un hijo u otro)
- Sequence (orden específico)
- Indicadores de ocurrencia:
- Indicadores de grupo: define grupos de elementos
- Group name: Se debe definir un etiqueta all, choice o sequence dentro de la etiqueta del grupo
- attributeGroup name
Compártelo