You are on page 1of 46

Your logo

XML Schema y DTD


Lnea de Profundizacin 2
Politcnico Colombiano Jaime Isaza Cadavid

Agenda (1/2)
Lo que vamos a ver en esta seccin

XML Schema
XSD
Schema
Tipos XSD
- Tipos simples
- Tipos complejos
- Tipos de datos

Agenda (2/2)
Lo que vamos a ver en esta seccin

DTD
Introduccin a los DTD.
Bloques de construccin.
Elementos.
Atributos.
Entidades.
Validaciones.
Ejemplos.

XML Schema Definition

XSD

XSD
XSD (XML Schema Definition)
Describe la estructura de un documento XML.
Es una alternativa en XML a los DTD.

Qu define un XSD?

Elementos vlidos.
Atributos de los elementos.
Qu elementos son hijos de otros.
Cuntos hijos y en qu orden.
Elementos vacos o que pueden tener texto.
Tipos de dato de elementos y atributos.
Valores por defecto.

El elemento Schema
Es el elemento raz del esquema
Atributos:
- xmlns:xs= http://www.w3.org/2001/XMLSchema
Elementos y tipos de datos del esquema.
- targetNamespace="http://www.w3schools.com"
Namespace del que vienen los elementos definidos.
- xmlns="http://www.w3schools.com"
Namespace por defecto
- elementFormDefault="qualified
Usar el cualificador (prefijo) del namespace

Referenciando un XSD
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd"
<?xml version="1.0"?>

<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

Ejemplo No. 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

XSD

XML

<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Tipos XSD

Son dos tipos:


- Simples
- Complejos

Tipos simples: Elemento


Contiene solo texto.
- <xs:element name="xxx" type="yyy default="zzz"/>

- xxx: nombre, yyy: tipo de dato, zzz: valor por defecto


(opcional)

Tipos Ms Comunes:
- xs:string
xs:boolean
- xs:decimal
xs:date
- xs:integer
xs:time

Tipos simples: Atributo


Los elementos simples no pueden tener atributos. El
atributo en s es declarado como tipo simple.
- <xs:attribute name="xxx" type="yyy" default="zzz"/>

Los atributos son opcionales por defecto. Si un atributo es


requerido se debe usar el atributo use="required
Cuando los atributos tienen un tipo definido, ese es una
restriccin del contenido del valor del atributo.

Tipos simples: Restricciones (1/2)


Definen valores aceptables para elementos o atributos. Se
les llama facetas.
El tag que las identifica es:
- <xs:restriction base="xs:data_type">

Ver:
- http://www.w3schools.com/schema/schema_facets.asp

Tipos simples: Restricciones (2/2)


De valor:

<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>

De conjunto de valores:

<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>

De una serie de valores:


(Expresiones regulares)

<xs:pattern value="[a-z]"/>
<xs:pattern value="male|female"/>

De longitud:

<xs:length value="8"/>

Tipos complejos
Son elementos XML que contienen otros elementos o
atributos. Pueden ser:
- Elementos vacos.
- Elementos que contiene solo otros elementos.
- Elementos que contienen solo texto.
- Elementos que contienen otros elementos y texto.
- Todos los anteriores pueden incluir atributos.

Cmo definir un elemento complejo?


<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>

<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>

<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Extender un tipo complejo


<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

Contenido mezclado: Texto y elementos


<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-0713</shipdate>.
</letter>

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

Document Type Definition

DTD

DTD
El propsito de un DTD (Document Type Definition) es
definir los bloques de construccin legales de un
documento XML.
Un DTD define la estructura del documento con una lista
de elementos y atributos legales.
Un DTD puede ser declarado dentro de un documento
XML document, o mediante una referencia externa.

Declaracin interna
Si el DTD es declarado dentro del archivo XML, slo basta
con encerrarlo en una definicin DOCTYPE con la
siguiente sintaxis:
<!DOCTYPE root-element [element-declarations]>

Declaracin externa
Si el DTD es declarado en un archivo externo, slo basta
con tener una definicin DOCTYPE con la siguiente
sintaxis:
<!DOCTYPE root-element SYSTEM "filename">

Por qu usar una DTD?


Con una DTD, cada uno de sus archivos XML pueden tener
una descripcin de su propio formato.

Con una DTD, grupos independientes de personas pueden


aceptar el uso de un DTD estndar para intercambiar datos.
Su aplicacin puede usar una DTD estndar para verificar
que los datos que se han recibido desde el exterior son
vlidos.

Tambin puede usar una DTD para verificar sus propios


datos.

Bloques de construccin de documentos XML


Desde el punto de vista de las DTD, todos los documentos
XML (y tambin los documentos HTML) son hechos bajo
los siguientes bloques de construccin:
-

Elementos
Attributos
Entidades.
PCDATA.
CDATA.

Declarando elementos
En una DTD, los elementos XML se incluyen en una
declaracin similar a la del DOCTYPE, pero usando el tipo
ELEMENT, con la siguiente sintaxis:
<!ELEMENT nombre-del-elemento categoria>

<!ELEMENT nombre-del-elemento (contenido)>

Elementos vacos
Los elementos vacos son declarados con la palabra clave
o categora EMPTY:
<!ELEMENT nombre-del-elemento EMPTY>

Ejemplo:
<!ELEMENT mensaje EMPTY>

Elementos con PCDATA


Los elementos que slo pueden interpretar PCDATA son
declarados con #PCDATA entre parntesis:
<!ELEMENT nombre-del-elemento (#PCDATA)>

Ejemplo:
<!ELEMENT para (#PCDATA)>

Elementos con cualquier contenido


Los elementos son declarados con la categora ANY, que
puede contener cualquier combinacin de datos a
interpretar:
<!ELEMENT nombre-del-elemento ANY>

Ejemplo:
<!ELEMENT contenido ANY>

Elementos con hijos (secuencias) (1/2)


Los elementos con uno o ms hijos son declarados con los
nombres de sus elementos hijos entre parntesis:
<!ELEMENT nombre-del-elemento (hijo1)>

<!ELEMENT nombre-del-elemento (hijo1,hijo2)>

Ejemplo:
<!ELEMENT mensaje (para,de,encabezado,cuerpo)>

Elementos con hijos (secuencias) (2/2)


Cuando los hijos son declarados en una secuencia separada
por comas, los hijos deben aparecer en la misma secuencia
dentro del documento. En una declaracin completa, los
hijos tambin deben ser declarados, y los hijos pueden
tambin tener otros hijos. La declaracin completa sera
como en este ejemplo:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT

mensaje (para,de,encabezado,cuerpo)>
para (#PCDATA)>
de (#PCDATA)>
encabezado (#PCDATA)>
cuerpo (#PCDATA)>

Declarando una sola ocurrencia del elemento


Se declara que el elemento hijo puede ocurrir una y slo
una vez dentro del elemento padre:
<!ELEMENT nombre-del-elemento (nombre-hijo)>

Para el ejemplo:
<!ELEMENT mensaje (contenido)>

Declarando mnimo una ocurrencia del elemento


Al lado del hijo aparece un signo +, que indica que el
elemento hijo ocurre una o ms veces dentro del elemento
padre:
<!ELEMENT nombre-del-elemento (nombre-hijo+)>

Para el ejemplo:
<!ELEMENT mensaje (contenido+)>

Cero o ms ocurrencias de un elemento


Al lado del hijo aparece un signo *, que indica que el
elemento hijo aparece cero o ms veces dentro del
elemento padre:
<!ELEMENT nombre-del-elemento (nombre-hijo*)>

Para el ejemplo:
<!ELEMENT mensaje (contenido*)>

Cero o una ocurrencia de un elemento


Al lado del hijo aparece un signo ?, que indica que el
elemento hijo slo puede no aparecer o aparecer una vez
dentro del elemento padre:
<!ELEMENT nombre-del-elemento (nombre-hijo?)>

Para el ejemplo:
<!ELEMENT mensaje (contenido?)>

Aparece el uno o el otro


Este caso se ve cuando un elemento es declarado con
varios hijos y se puede optar por uno u otro en uno de los
bloques. Para ello, se utiliza el carcter | en medio de
aquellos elementos optativos:
<!ELEMENT mensaje (para,de,(cuerpo|contenido))>

Contenido mezclado
Aqu se presenta una mezcla de las declaraciones que
anteriormente mencionamos. En este ejemplo, el elemento
mensaje puede contener cero o ms ocurrencias de
caracteres de datos a interpretar o de los elementos para,
de, encabezado o cuerpo:
<!ELEMENT mensaje
(#PCDATA|para|de|encabezado|cuerpo)*>

Declarando atributos
En una DTD, una declaracin de atributo tiene la siguiente
sintaxis:

<!ATTLIST nombre-elemento xxx yyy zzz>


Donde:
- xxx: Nombre del atributo.
- yyy: Tipo de dato del atributo.
- zzz: Valor por defecto.

Declarando atributos
Ejemplo:

Para el DTD
<!ATTLIST pago tipo CDATA "efectivo">
Para el documento XML:
<pago tipo="efectivo" />

Tipos de atributos

Tipos de valores por defecto

Valores requeridos
<!ATTLIST nombre-elemento nombre tipo defecto
#REQUIRED>
En la DTD:
<!ATTLIST persona numero CDATA #REQUIRED>
XML vlido:
<persona numero="5677" />
XML no vlido:
<persona />

Valores implicados
<!ATTLIST nombre-elemento nombre tipo #IMPLIED>
Atributo que no est forzado a tener un valor por defecto.

En la DTD:
<!ATTLIST contacto fax CDATA #IMPLIED>
XML vlido:
<contacto fax="567-8901234" />
XML vlido:
<contacto />

Valores fijos
<!ATTLIST nombre-elemento nombre tipo #FIXED>
Atributo que siempre deber tener un valor fijo.

En la DTD:
<!ATTLIST estudiante institucion CDATA #FIXED
"Politecnico">
XML vlido:
<estudiante institucion="Politecnico" />
XML no vlido:
<estudiante institucion="U de A" />

Valores enumerados
<!ATTLIST elemento atributo (en1|en2|..) defecto>
Atributo que siempre se mueve en un conjunto de valores.

En la DTD:
<!ATTLIST pago tipo (efectivo|cheque) "cheque">
XML vlido:
<pago tipo="efectivo" />
O tambin:
<pago tipo="cheque" />

Referencias
http://www.w3schools.com/xml
http://www.w3schools.com/schema/default.asp
http://validator.w3.org/check
http://www.w3schools.com/schema/schema_elements_ref.asp
http://www.xfront.com/BestPracticesHomepage.html
http://www.w3schools.com/schema/schema_facets.asp

www.presentationpoint.com

Software and Tools for Microsoft PowerPoint.


The website with innovative solutions.
Save time and money by automating your presentations.

Desarrollo de Aplicaciones Web I Pg. 46

You might also like