Introducción al lenguaje XSD (XML Schema Definition)

Presenter Notes

¿Qué es XSD?

XSD es un formato para definir la estructura de un documento XML. XSD sustituye al anterior formato DTD, y añade funcionalidad para definir la estructura XML con más detalle.

 1 <?xml version="1.0"?>
 2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 3  <xs:element name="note">
 4    <xs:complexType>
 5      <xs:sequence>
 6        <xs:element name="to" type="xs:string"/>
 7        <xs:element name="from" type="xs:string"/>
 8        <xs:element name="heading" type="xs:string"/>
 9        <xs:element name="body" type="xs:string"/>
10      </xs:sequence>
11    </xs:complexType>
12  </xs:element>
13 </xs:schema>

Presenter Notes

Hacer referencia al esquema

 1 <?xml version="1.0"?>
 2 <note
 3 xmlns="http://www.openalfa.com"
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5 xsi:schemaLocation="http://www.openalfa.com note.xsd">
 6   <to>Tove</to>
 7   <from>Jani</from>
 8   <heading>Reminder</heading>
 9   <body>Don't forget me this weekend!</body>
10 </note>
  • Indicamos que el "namespace" al que pertenecen los elementos que aparecen en el documento es "http://www.openalfa.com".
  • Indicamos que también pueden aparecer elementos del namespace "http://www.w3.org/2001/XMLSchema-instance", y deben ir precedidos por el prefijo "xsi".
  • Indicamos la ubicación del esquema XSD contra el que se debe validar el documento XML ("note.xsd").

Presenter Notes

Tipos de datos simples

1 <xs:element name="nombre_del_elemento" type="tipo_de_datos" />
  • xs:string
  • xs:decimal
  • xs.integer
  • xs:boolean
  • xs:date
  • xs:time

Para indicar el tipo de un atributo, por ejemplo:

1 <xs:attribute name="lang" type="xs:string" use="required"/>

Presenter Notes

Restricciones (I)

  • enumeration Defines a list of acceptable values
  • fractionDigits Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero
  • length Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero
  • maxExclusive Specifies the upper bounds for numeric values (the value must be less than this value)
  • maxInclusive Specifies the upper bounds for numeric values (the value must be less than or equal to this value)
  • maxLength Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero

Presenter Notes

Restricciones (II)

  • minExclusive Specifies the lower bounds for numeric values (the value must be greater than this value)
  • minInclusive Specifies the lower bounds for numeric values (the value must be greater than or equal to this value)
  • minLength Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero
  • pattern Defines the exact sequence of characters that are acceptable
  • totalDigits Specifies the exact number of digits allowed. Must be greater than zero
  • whiteSpace Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled

Presenter Notes

Ejemplo de restricciones

 1 <xs:element name="age">
 2   <xs:simpleType>
 3     <xs:restriction base="xs:integer">
 4       <xs:minInclusive value="0"/>
 5       <xs:maxInclusive value="120"/>
 6     </xs:restriction>
 7   </xs:simpleType>
 8 </xs:element>
 9 <xs:element name="car">
10   <xs:simpleType>
11     <xs:restriction base="xs:string">
12       <xs:enumeration value="Audi"/>
13       <xs:enumeration value="Golf"/>
14       <xs:enumeration value="BMW"/>
15     </xs:restriction>
16   </xs:simpleType>
17 </xs:element>
18 <xs:element name="letter">
19   <xs:simpleType>
20     <xs:restriction base="xs:string">
21       <xs:pattern value="([a-z][A-Z])+"/>
22     </xs:restriction>
23   </xs:simpleType>
24 </xs:element>

Presenter Notes

Tipos de Datos Compuestos

 1 <xs:element name="employee" type="fullpersoninfo"/>
 2 <xs:complexType name="personinfo">
 3   <xs:sequence>
 4     <xs:element name="firstname" type="xs:string"/>
 5     <xs:element name="lastname" type="xs:string"/>
 6   </xs:sequence>
 7 </xs:complexType>
 8 <xs:complexType name="fullpersoninfo">
 9   <xs:complexContent>
10     <xs:extension base="personinfo">
11       <xs:sequence>
12         <xs:element name="address" type="xs:string"/>
13         <xs:element name="city" type="xs:string"/>
14         <xs:element name="country" type="xs:string"/>
15       </xs:sequence>
16     </xs:extension>
17   </xs:complexContent>
18 </xs:complexType>

Presenter Notes

Indicadores de orden

1 <xs:element name="person">
2   <xs:complexType>
3     <xs:choice>
4       <xs:element name="employee" type="employee"/>
5       <xs:element name="member" type="member"/>
6     </xs:choice>
7   </xs:complexType>
8 </xs:element>
  • xs:all – Los elementos que contiene pueden aparecer en cualquier orden.
  • xs:choice – Sólo puede aparecer uno de los elementos que contiene
  • xs:sequence – Los elementos que contiene deben aparecer exactamente en el mismo orden en que están definidos

Presenter Notes

Indicadores de ocurrencia

1 <xs:element name="person">
2   <xs:complexType>
3     <xs:sequence>
4       <xs:element name="full_name" type="xs:string"/>
5       <xs:element name="child_name" type="xs:string" maxOccurs="10"/>
6     </xs:sequence>
7   </xs:complexType>
8 </xs:element>
  • maxOccurs=”n” – Atributo que indica que el elemento puede aparecer varias veces, hasta un máximo de “n” veces. Si especificamos maxOccurs=”unbounded”, el elemento puede aparecer un número indefinido de veces.
  • minOccurs=”n” – Atributo que indica que el elementos debe aparecer un mínimo de “n” veces. minOccurs=”0″, significa que el elemento es opcional, y puede no aparecer.

Presenter Notes

Indicadores de grupo

  • Group name – Podemos definir y asignar un nombre a un grupo de elementos de la forma:

    <xs:group name="nombre_grupo">…</xs:group>.
    

    Una vez definido, en la definición de un tipo de datos compuesto podemos hacer referencia al mismo utilizando la sintaxis

    <xs:group ref=”nombre_grupo”/>
    
  • attributeGroup name – De la misma forma, podemos definir y asignar un nombre a un grupo de atributos de la forma

    <xs:attributeGroup name=”nombre_grupo”>…</xs:attributeGroup>.
    

    Una vez definido, podemos hacer referencia a dicho grupo con la sintaxis

    <xs:attributegroup ref=”nombre_grupo”/>
    

Presenter Notes