Upload
iratxesartaguda
View
5
Download
0
Embed Size (px)
DESCRIPTION
Leng.marcas
Citation preview
Your logo
XML Schema y DTDLínea de Profundización 2
Politécnico Colombiano Jaime Isaza Cadavid
Agenda (1/2)
XML Schema
XSD
Schema
Tipos XSD
- Tipos simples
- Tipos complejos
- Tipos de datos
Lo que vamos a ver en esta sección
Agenda (2/2)
DTD
Introducción a los DTD.
Bloques de construcción.
Elementos.
Atributos.
Entidades.
Validaciones.
Ejemplos.
Lo que vamos a ver en esta sección
XSD
XML Schema Definition
XSD – (XML Schema Definition)
Describe la estructura de un documento XML.
Es una alternativa en XML a los DTD.
XSD
Elementos válidos.
Atributos de los elementos.
Qué elementos son hijos de otros.
Cuántos hijos y en qué orden.
Elementos vacíos o que pueden tener texto.
Tipos de dato de elementos y atributos.
Valores por defecto.
¿Qué define un XSD?
Es el elemento raíz 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
El elemento Schema
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>
Referenciando un XSD
<?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>
<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>
XML
XSD
Ejemplo No. 1
Tipos XSD
Son dos tipos:
- Simples
- Complejos
Contiene solo texto.
- <xs:element name="xxx" type="yyy“ default="zzz"/>
- xxx: nombre, yyy: tipo de dato, zzz: valor por defecto
(opcional)
Tipos Más Comunes:
- xs:string
- xs:decimal
- xs:integer
xs:boolean
xs:date
xs:time
Tipos simples: Elemento
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
restricción del contenido del valor del atributo.
Tipos simples: Atributo
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 (1/2)
De valor:
De conjunto de valores:
De una serie de valores:
(Expresiones regulares)
De longitud:
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:pattern value="[a-z]"/>
<xs:length value="8"/>
<xs:pattern value="male|female"/>
Tipos simples: Restricciones (2/2)
Son elementos XML que contienen otros elementos o
atributos. Pueden ser:
- Elementos vacíos.
- Elementos que contiene solo otros elementos.
- Elementos que contienen solo texto.
- Elementos que contienen otros elementos y texto.
- Todos los anteriores pueden incluir atributos.
Tipos complejos
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
<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>
<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" 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>
¿Cómo definir un elemento 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>
Extender un tipo complejo
<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>
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-
13</shipdate>.
</letter>
Contenido mezclado: Texto y elementos
DTD
Document Type Definition
El propósito de un DTD (Document Type Definition) es
definir los bloques de construcción 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.
DTD
Si el DTD es declarado dentro del archivo XML, sólo basta
con encerrarlo en una definición DOCTYPE con la
siguiente sintaxis:
<!DOCTYPE root-element [element-declarations]>
Declaración interna
Si el DTD es declarado en un archivo externo, sólo basta
con tener una definición DOCTYPE con la siguiente
sintaxis:
<!DOCTYPE root-element SYSTEM "filename">
Declaración externa
Con una DTD, cada uno de sus archivos XML pueden tener
una descripción de su propio formato.
Con una DTD, grupos independientes de personas pueden
aceptar el uso de un DTD estándar para intercambiar datos.
Su aplicación puede usar una DTD estándar para verificar
que los datos que se han recibido desde el exterior son
válidos.
También puede usar una DTD para verificar sus propiosdatos.
¿Por qué usar una DTD?
Desde el punto de vista de las DTD, todos los documentos
XML (y también los documentos HTML) son hechos bajo
los siguientes bloques de construcción:
- Elementos
- Attributos
- Entidades.
- PCDATA.
- CDATA.
Bloques de construcción de documentos XML
En una DTD, los elementos XML se incluyen en una
declaración similar a la del DOCTYPE, pero usando el tipo
ELEMENT, con la siguiente sintaxis:
<!ELEMENT nombre-del-elemento categoria>
<!ELEMENT nombre-del-elemento (contenido)>
Declarando elementos
Los elementos vacíos son declarados con la palabra clave
o categoría EMPTY:
<!ELEMENT nombre-del-elemento EMPTY>
Ejemplo:
<!ELEMENT mensaje EMPTY>
Elementos vacíos
Los elementos que sólo pueden interpretar PCDATA son
declarados con #PCDATA entre paréntesis:
<!ELEMENT nombre-del-elemento (#PCDATA)>
Ejemplo:
<!ELEMENT para (#PCDATA)>
Elementos con PCDATA
Los elementos son declarados con la categoría ANY, que
puede contener cualquier combinación de datos a
interpretar:
<!ELEMENT nombre-del-elemento ANY>
Ejemplo:
<!ELEMENT contenido ANY>
Elementos con cualquier contenido
Los elementos con uno o más hijos son declarados con los
nombres de sus elementos hijos entre paréntesis:
<!ELEMENT nombre-del-elemento (hijo1)>
<!ELEMENT nombre-del-elemento (hijo1,hijo2…)>
Ejemplo:
<!ELEMENT mensaje (para,de,encabezado,cuerpo)>
Elementos con hijos (secuencias) (1/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 declaración completa, los
hijos también deben ser declarados, y los hijos pueden
también tener otros hijos. La declaración completa sería
como en este ejemplo:
<!ELEMENT mensaje (para,de,encabezado,cuerpo)>
<!ELEMENT para (#PCDATA)>
<!ELEMENT de (#PCDATA)>
<!ELEMENT encabezado (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>
Elementos con hijos (secuencias) (2/2)
Se declara que el elemento hijo puede ocurrir una y sólo
una vez dentro del elemento padre:
<!ELEMENT nombre-del-elemento (nombre-hijo)>
Para el ejemplo:
<!ELEMENT mensaje (contenido)>
Declarando una sola ocurrencia del elemento
Al lado del hijo aparece un signo +, que indica que el
elemento hijo ocurre una o más veces dentro del elemento
padre:
<!ELEMENT nombre-del-elemento (nombre-hijo+)>
Para el ejemplo:
<!ELEMENT mensaje (contenido+)>
Declarando mínimo una ocurrencia del elemento
Al lado del hijo aparece un signo *, que indica que el
elemento hijo aparece cero o más veces dentro del
elemento padre:
<!ELEMENT nombre-del-elemento (nombre-hijo*)>
Para el ejemplo:
<!ELEMENT mensaje (contenido*)>
Cero o más ocurrencias de un elemento
Al lado del hijo aparece un signo ?, que indica que el
elemento hijo sólo puede no aparecer o aparecer una vez
dentro del elemento padre:
<!ELEMENT nombre-del-elemento (nombre-hijo?)>
Para el ejemplo:
<!ELEMENT mensaje (contenido?)>
Cero o una ocurrencia de un elemento
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 carácter | en medio de
aquellos elementos optativos:
<!ELEMENT mensaje (para,de,(cuerpo|contenido))>
Aparece el uno o el otro
Aquí se presenta una mezcla de las declaraciones que
anteriormente mencionamos. En este ejemplo, el elemento
mensaje puede contener cero o más ocurrencias de
caracteres de datos a interpretar o de los elementos para,
de, encabezado o cuerpo:
<!ELEMENT mensaje
(#PCDATA|para|de|encabezado|cuerpo)*>
Contenido mezclado
En una DTD, una declaración 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" />
Declarando atributos
Tipos de atributos
Tipos de valores por defecto
<!ATTLIST nombre-elemento nombre tipo defecto
#REQUIRED>
En la DTD:
<!ATTLIST persona numero CDATA #REQUIRED>
XML válido:
<persona numero="5677" />
XML no válido:<persona />
Valores requeridos
<!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 válido:
<contacto fax="567-8901234" />
XML válido:<contacto />
Valores implicados
<!ATTLIST nombre-elemento nombre tipo #FIXED>
Atributo que siempre deberá tener un valor fijo.
En la DTD:<!ATTLIST estudiante institucion CDATA #FIXED
"Politecnico">
XML válido:
<estudiante institucion="Politecnico" />
XML no válido:<estudiante institucion="U de A" />
Valores fijos
<!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 válido:
<pago tipo="efectivo" />
O también:<pago tipo="cheque" />
Valores enumerados
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
Referencias
Software and Tools for Microsoft PowerPoint.
The website with innovative solutions.
Save time and money by automating your presentations.
www.presentationpoint.com
Desarrollo de Aplicaciones Web I Pág. 46