Laboratorio de Programación
Unidad: 3
Tecnología XML
Universidad Nacional de la Patagonia Austral
Unidad Académica Río Gallegos
Indice
Repaso
XML
DTD
Entidades
Concepto
Tipos
Internas Externas
Espacio de nombres
Concepto
Definición en XML
Esquemas XML
Concepto: características, tipos de datos, ventajas
Schema XML vs. DTD
Tipos simples y complejos
Enumerados y restricciones
XML
Repaso
Qué es XML?
Es un Lenguaje de Marcado Extensible (Extensible Markup
Language, XML)
XML sirve para estructurar información
XML se parece a HTML
XML es relativamente nuevo
XML es una familia de tecnologías
XML es extensible y modular
XML es libre, independiente de la plataforma, ampliamente
soportado
XML Laboratorio Programacion 2018
Aplicaciones de XML
Frameworks de desarrollo (Struts, Spring,
etc..)
OpenOffice
Configuración de aplicaciones: Tomcat
Estándares de contenidos en E-Learning
Servicios web
Definición de interfaces gráficas (XUL)
Sistemas de publicación de contenidos
Bases de datos
4
Términos en XML
<direccion>
<nombre>
<titulo>Mrs.</titulo>
<nombre> Mary </nombre>
<apellidos>McGoon</apellidos>
</nombre>
<calle> 1401 Main Street </calle>
<ciudad estado="NC">Anytown</ciudad>
<!- Lo que ponga aquí es ignorado
por el parser.
Include <a> marcas </a>-->
</direccion>
Etiqueta/Elemento
Contenido del Elemento
Atributo
XML Laboratorio Programacion 2018
XML: sintaxis
Un ejemplo:
<?xml version="1.0"?> <nota fecha=“7-5-2014”>
<destinatario>Alumnos</destinatario> <remitente>Profesor</remitente> <asunto>Recordatorio</asunto> <texto>¡Hoy tienen clases!</texto> </nota>
Componentes de un documento XML:
Elementos
componentes principales ejemplo: nota, destinatario, …
pueden contener texto, otros elementos o estar vacíos
Etiquetas
delimitan los elementos
<nombre_elemento> marca el comienzo del elemento </nombre_elemento> marca el final del elemento
6
XML: sintaxis
Atributos
ofrecen información adicional sobre los elementos
aparecen en la etiqueta de comienzo del elemento
ejemplo: <nota fecha=“8-5-2013”>
Entidades
representan una porción de texto
escapado de caracteres especiales
predefinidas:
< < > > & & " “ ' „
definidas en DTDs
XML Laboratorio Programacion 2018
Reglas sintácticas
Una raíz
Anidación de las etiquetas
Sensible a mayúsculas
Atributos no vacíos y entrecomillados
Reglas para los nombres de etiquetas y
atributos
¿Satisface las reglas generales de sintaxis de
XML?
Documento bien formado
8
DTD
XML Laboratorio Programacion 2018
Conceptos
DTD: Definición de tipo de documento (Document Type
Definition)
Define el formato del documento, su esquema o tipo, el
vocabulario a utilizar en un documento XML:
elementos
atributos
entidades
cómo se estructuran
XML + DTD = documentos auto-descriptivos
Intercambio, compartir información
compromiso entre las partes participantes en el formato a utilizar
Validación de los datos para su procesamiento automático
10
DTD‟s
Dos niveles de corrección en XML:
¿Satisface las reglas generales de sintaxis de XML?
Documento bien formado
¿Satisface el DTD?
Documento válido
DTD incluido en el propio documento XML:
<!DOCTYPE elemento-raiz [declaracion-elementos]>
DTD externo:
<!DOCTYPE elemento-raiz SYSTEM “nombre_archivo.dtd”>
Documentos XML sin DTD
XML Laboratorio Programacion 2018
XML: DTDs
Declaración de tipo de documento interna
<?xml version="1.0"?>
<!DOCTYPE nota [
<!ELEMENT nota (destinatario,remitente,asunto,texto)>
<!ELEMENT destinatario (#PCDATA)>
<!ELEMENT remitente (#PCDATA)>
<!ELEMENT asunto (#PCDATA)>
<!ELEMENT texto (#PCDATA)>
]>
<nota>
<destinatario>Alumnos</destinatario>
<remitente>Profesor</remitente>
<asunto>Recordatorio</asunto>
<texto>¡Hoy tienen clases!</texto>
</nota>
12
XML: DTDs
Declaración de tipo de documento externa
<?xml version="1.0"?>
<!DOCTYPE nota SYSTEM “nota.dtd”>
<nota>
<destinatario>Alumnos</destinatario>
<remitente>Profesor</remitente>
<asunto>Recordatorio</asunto>
<texto>¡Hoy tienen clases!</texto>
</nota>
Nota.dtd
<!ELEMENT nota (destinatario,remitente,asunto,texto)>
<!ELEMENT destinatario (#PCDATA)>
XML Laboratorio Programacion 2018
DTDs - elementos
Elementos
<!ELEMENT nombre-elemento tipo-elemento>
<!ELEMENT nombre-elemento (contenido-elemento)>
Elementos vacíos
<!ELEMENT nombre-elemento EMPTY>
Ejemplo en DTD: <!ELEMENT edad EMPTY>
Ejemplo en XML: <edad />
Elementos de sólo texto
<!ELEMENT nombre-elemento (#PCDATA)>
ejemplo: <!ELEMENT destinatario (#PCDATA)>
Elementos con cualquier tipo de contenido
<!ELEMENT nombre-elemento ANY>
ejemplo: <!ELEMENT nota ANY>
14
DTDs - elementos
Elementos con hijos (secuencias)
Los hijos deberán aparecer en esta misma secuencia en el documento XML
<!ELEMENT nombre-elemento (hijo,
nombre-elemento-hijo,...)>
ejemplo: <!ELEMENT nota (destinatario,remitente,asunto,texto)>
un único elemento hijo
<!ELEMENT nombre-elemento (nombre-elemento-hijo)>
ejemplo: <!ELEMENT nota (mensaje)>
una o más ocurrencias del elemento hijo
<!ELEMENT nombre-elemento (nombre-elemento-hijo +)>
ejemplo: <!ELEMENT nota (mensaje+)>
cero o más ocurrencias del mismo elemento
<!ELEMENT nombre-elemento (nombre-elemento-hijo *)>
XML Laboratorio Programacion 2018
DTDs - elementos
Elemento hijo opcional
<!ELEMENT nombre-elemento (nombre-hijo?)>
un elemento u otro
<!ELEMENT elemento (hijo1 |
nombre-hijo2)>
ejemplo: <!ELEMENT persona
(nombre,domicilio,(masculino|femenino))>
ejemplo: <!ELEMENT nota
(#PCDATA|destinatario|remitente|asunto|texto)*>
16
DTDs - atributos
Atributos
<!ATTLIST nombre-elemento nombre-atributo tipo-atributo default-value>
Ejemplo: <!ATTLIST pago tipo CDATA “cheque”>
Ejemplo XML: <pago tipo=“cheque” />
Tipo de atributo
CDATA
(v1|v2|…) el valor será v1 o v2 o …
ID el valor es un identificador único
IDREF el valor es el identificador de otro elemento
IDREFS el valor es una lista de identificadores
…
valor por defecto
el valor por defecto del atributo es
value
#REQUIRED valor obligatorio
#IMPLIED valor optativo
XML Laboratorio Programacion 2018
DTDs - atributos
Especificando el valor por defecto de un atributo ejemplo:
<!ELEMENT cuadrado EMPTY>
<!ATTLIST cuadrado lado CDATA “0”>
ejemplo XML: <cuadrado lado=“100” />
#IMPLIED
ejemplo: <!ATTLIST contact fax CDATA #IMPLIED>
ejemplo XML: <contacto fax=“555-667788” />
<contacto />
#REQUIRED
ejemplo: <!ATTLIST persona identificador CDATA #REQUIRED>
ejemplo XML: <persona identificador=“555” />
<persona />
Mal
18
DTDs - atributos
#FIXED
Ejemplo: <!ATTLIST remitente compania CDATA #FIXED
“Compania A”>
Ejemplo XML: <remitente compania=“Compania A” />
<remitente compania =“Compania B” />
Lista de valores posibles
Ejemplo: <!ATTLIST pago tipo (cheque|efectivo) “efectivo”>
Ejemplo XML: <pago tipo=“cheque” />
< pago tipo =“efectivo” />
Entidades
Entidades
Son
abreviaturas que representan un valor
(su
contenido).
Pueden ser:
Internas
: su valor está indicado en el mismo DTD en el que
se declaran.
Externas
: su valor está en documentos externos al DTD en
el que se declaran.
Generales
: se emplean en DTDs y en documentos XML
Parámetro
: sólo se emplean en DTDs
Las entidades generales internas son las más
simples.
Una entidad de este tipo es siempre una entidad
XML Laboratorio Programacion 2018
Entidades generales
Asignan nombres a ciertos elementos (similar a variables)
Se denotan por
&entidad;
No se admite recursividad
Entidades numéricas: Código numérico del carácter
Entidades predefinidas: Permiten incluir etiquetas sin analizar
22
Entidad interna
Ejemplo de declaración de entidad general
interna:
Se declaran en el mismo DTD
<?xml version="1.0" ?>
<!DOCTYPE ejemplo SYSTEM "ejemplo.dtd" [ <!ENTITY xml "Extensible Markup
Language"> ]>
<ejemplo> &xml; </ejemplo>
<?xml version="1.0" ?>
<!DOCTYPE ejemplo SYSTEM "ejemplo.dtd" [ <!ENTITY xml "Extensible Markup Language"> ]>
XML Laboratorio Programacion 2018
Entidades externas
Permiten usar archivos externos (Incluir otros documentos XML)
También se pueden incluir archivos externos de formatos binarios
24
Entidades parámetro
Permiten dar nombres a partes de un DTD
Se denotan por
%entidad;
Entidades externas: Permiten incluir elementos externos en una DTD
Espacio de nombres
(namespace)
Espacio de nombres
Tengo una lista de clientes y otras de empleados y quiero
guardar en un documento XML los clientes y el empleado que
los atiende.
¿Cómo distinguir <nombre> del cliente de <nombre> del
empleado?
<?xml version="1.0"?> <clientes>
<nombre>Juan</nombre> <nombre>Luis</nombre> ...
</clientes>
<?xml version="1.0"?> <empleados>
<nombre>Juana</nombre> <nombre>Luisa</nombre> ...
</empleados>
<?xml version="1.0"?> <clientes>
<nombre>Juan</nombre>
<nombre>Juana</nombre> <!-- cual? -->
... </clientes>
XML Laboratorio Programacion 2018
Solución
Solución: Asociar un alias a los elementos de un espacio de
nombres dentro de un ámbito.
xmlns:
alias,
define
alias
en el ámbito de un elemento.
<?xml version="1.0"?> <clientes-empleados
xmlns:clientes="http://www.una-url.com/clientes/" xmlns:empleados="http://www.otra-url.com/empleados/"> <clientes:nombre>Juan</clientes:nombre>
...
<empleados:nombre>Juana</empleados:nombre> ...
</clientes-empleados>
Son 2 etiquetas distintas
Definimos un namespace. Debe ser única y se suele utilizar una URL
NOTA: Las URIs sólo se utilizan para que el nombre sea único, no son enlaces, ni tienen que contener información
28
Espacio de nombres: conceptos
Un documento XML puede hacer uso de espacios de nombres.
Un
namespace
es un ámbito de definición de etiquetas.
Surgió del problema de no poder usar elementos con el mismo nombre
en dos o mas contextos diferentes.
Para cada etiqueta hemos de indicar, además su
namespace
.
xmlns:prefijo:”nombre o url”
Las direcciones URL deben ser únicas.
Se especifican en el prologo en el caso de usar varios espacios de
nombres.
<clientes-empleados
xmlns:clientes="http://www.una-url.com/clientes/" xmlns:empleados="http://www.otra-url.com/empleados/"> …
</clientes-empleados>
XML Laboratorio Programacion 2018
Espacio de nombres: conceptos
Cada espacio de nombres está asociado a una URI, que debe ser única
Se aconseja usar URLs
No tienen porque tener una existencia real
(y de hecho, no
suelen tenerla).
Espacio de nombres por defecto
Mediante
xmlns=“...”
se define un espacio de nombres por defecto (sin
alias)
<?xml version="1.0"?> <clientes-empleados
xmlns="http://www.una-url.com/clientes/"
xmlns:empleados="http://www.otra-url.com/empleados/">
<nombre>Juan</nombre>
...
<empleados:nombre>Juana</empleados:nombre> ...
</clientes-empleados>
30
XML Laboratorio Programacion 2018
Limitaciones DTD
No utilizan un modelo de contenido abierto, no tolera elementos no
definidos.
Tipos de datos limitados: los DTDs proveen tipos de datos muy
limitados:
Los DTDs no usan sintaxis XML
Es difícil definir rangos o conjuntos
<!ATTLIST fecha diaDeLaSemana (lunes | martes | miércoles | jueves | viernes | sábado | domingo)
#IMPLIED >
32
Limitaciones DTD
Sin Subclases
DTD no permiten describir las estructuras de datos comunes en
una definición de clase y capturar todas las variaciones en
subclases.
El orden de los hijos es demasiado rígido, los DTD requieren:
Listar todos los elementos hijos en el orden en que deben ocurrir
<!ELEMENT P (A, B+, C?)>
Sin soporte de espacio de nombres
Para controlar la validez, debemos mantener los prefijos del
documento XML en sincronización con el DTD
Limitadas formas de expresar repeticiones
El elemento B debe ocurrir exactamente 15 veces:
XML Laboratorio Programacion 2018
Esquemas:
Ventajas sobre los DTDs
Son documentos XML
se pueden procesar como cualquier otro documento XML
Soportan tipos de datos
se pueden definir elementos enteros, de punto flotante,
fechas, strings, entre otros.
Son extensibles
se pueden crear nuevos tipos de datos.
Mecanismos de Orientación a Objetos
Permiten extender o restringir un tipo previamente definido
Tiene más poder de expresión
Por ejemplo, que cierto valor no tenga más de 2 caracteres.
34
XML con DTD
Documento XML
Document Type Definition (DTD)
<?xml version="1.0"?>
<!DOCTYPE date SYSTEM "date.dtd"> <date>
<day>14</day>
<month>September</month> <year>2003</year> <weekday>Sunday</weekday> </date>
<!ELEMENT date (day, month, year, weekday?)> <!ELEMENT day (#PCDATA)>
XML Laboratorio Programacion 2018
Conceptos
XML Schema (esquema)
Es un lenguaje de esquema utilizado para describir la
estructura y las restricciones de los contenidos de los
documentos XML de una forma muy precisa.
Desarrollado por W3C (World Wide Web Consorcium)
36
Ejemplo: XML Schema
<?xml version="1.0"?> <xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="date">
<xsd:complexType> <xsd:sequence>
<xsd:element name="day" type="xsd:string"/> <xsd:element name="month" type="xsd:string"/> <xsd:element name="year" type="xsd:string"/> <xsd:element name="weekday“
minOccur="0" type="xsd:string"/> </xsd:sequence>
</xsd:complexType> </xsd:element> </xsd:schema> elemento schema ->
XML Laboratorio Programacion 2018
XML Referenciando a Schema
¿Como se inserta en el documento XML?
El enlace o referencia al Schema relacionado al XML, se inserta en el elemento raíz del siguiente modo:
<elemento-raiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=“nombre-archivo.xsd">
…
</elemento-raiz>
Ejemplo
: <?xml version="1.0"?> <datexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="date.xsd"
>
<day>14</day>
<month>September</month> <year>2003</year> <weekday>Sunday</weekday> </date>
ubicación del Documento esquema -> Espacio de nombres -> declaración de instancias de documentos XML
38
DTD y Esquema XML
Ejemplo DTD cliente
<!ELEMENT cliente (persona-contacto, direccion, ciudad)> <!ELEMENT persona-contacto (titulo?, nombre, apellidos)> <!ELEMENT titulo (#PCDATA)>
XML Laboratorio Programacion 2018
Ejemplo Esquema XML
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="cliente ">
<xsd:complexType> <xsd:sequence> <xsd:element ref="persona-contacto"/> <xsd:element ref="direccion"/> <xsd:element ref="ciudad"/> </xsd:sequence> </xsd:complexType> </xsd:element>
<xsd:element name ="direccion" type="xsd:string"/> <xsd:element name ="ciudad" type="xsd:string"/> <xsd:element name="persona-contacto">
<xsd:complexType> <xsd:sequence>
<xsd:element ref="titulo" minOccurs="0"/> <xsd:element ref="nombre"/>
<xsd:element ref="apellidos"/> </xsd:sequence>
</xsd:complexType> </xsd:element>
<xsd:element name="titulo" type="xsd:string"/> <xsd:element name ="nombre" type="xsd:string"/> <xsd:element name ="apellidos" type="xsd:string"/> </xsd:schema>
40
Otro ejemplo
Ejemplo mas breve:
<?xml version="1.0"?>
<schema xmlns=“http://www.w3.org/2001/XMLSchema” elementFormDefault="qualified">
<element name="nombre-y-apellidos"> <complexType>
<sequence>
<element name="nombre" type="string"/> <element name="apellido1" type="string"/> <element name="apellido2" type="string"/> </sequence>
<attribute name="sexo" type="string"/> </complexType>
</element> </schema>
Namespace del Schema.
Este es el namespace recomendado en la especificación.
Declaración de un elemento. Compuesto por una secuencia de
otros elementos.
XML Laboratorio Programacion 2018
…ejemplo
<?xml version="1.0"?>
<schema xmlns=“http://www.w3.org/2001/XMLSchema” elementFormDefault="qualified">
<element name="nombre-y-apellidos"> <complexType>
<sequence>
<element name="nombre" type="string"/> <element name="apellido1" type="string"/> <element name="apellido2" type="string"/> </sequence>
<attribute name="sexo" type="string"/> </complexType>
</element> </schema>
Elementos simples que sólo pueden contener
texto.
42
XML Schema & XML
<?xml version="1.0"?>
<schema xmlns=“http://www.w3.org/2001/XMLSchema” elementFormDefault="qualified">
<element name="nombre-y-apellidos"> <complexType>
<sequence>
<element name="nombre" type="string"/> <element name="apellido1" type="string"/> <element name="apellido2" type="string"/> </sequence>
<attribute name="sexo" type="string"/> </complexType>
</element> </schema>
<nombre-y-apellidos sexo="varon"> <nombre> Juan </nombre>
XML Laboratorio Programacion 2018
Schema XML: características
Son documentos XML.
Elemento raíz <schema>
Soportan tipos de datos.
Soportan namespaces.
Permiten definir nuevos tipos de datos y restricciones
sobre los valores de un elemento.
Ofrecen mayor precisión que los DTDs.
Extensión .xsd
44
Comentarios
Dos formas de insertar comentarios:
Siempre dentro del elemento xs:annotation:
xs:documentation: es la forma de introducir documentación para
un lector (fecha de creación, copyright, etc.)
xs:appinfo: esta orientada a pasar información extra a las
aplicaciones que hagan uso del esquema (enlace a la hoja de estilo
a aplicar)
Comentarios de XML:
<!-- comentario -->
XML Laboratorio Programacion 2018 46
Comentarios
Es preferible utilizar el tipo de comentario
propio de XML Schema:
Se pueden estructurar
Se pueden procesar como un fragmento de
documento XML
Comentarios
XML Laboratorio Programacion 2018 48
Atributos
Reglas para declaración atributos
Tiene que aparecer después de la declaración de los
subelementos
No pueden contener hijos
Tipo simple
Su declaración no impone un orden de uso
Tipo por defecto
anySimpleType:
representa
cualquier cadena de caracteres XML válidos
XML Laboratorio Programacion 2018 50
Atributos
Reglas para la declaracion de atributos (2):
Sin cardinalidad
Opcional por defecto
Tres atributos para restringir los valores del
Atributos
use:
required: el atributo es obligatorio
optional: puede o no aparecer (valor por defecto)
prohibited: el atributo no puede aparecer en el elemento
default:
Valor por defecto del atributo
Si el atributo no está, el procesador XML empleará este valor
<fixed>
Valor fijo del atributo
El atributo puede aparecer o no, pero si aparece debe contener solo dicho
valor.
XML Laboratorio Programacion 2018 52
Declaración de Atributos
<xs:complexType name="Círculo"> <xs:attribute name="radio"
type="xs:float" use="required" />
<xs:attribute name="color" type="Color"
default="255 0 0"/>
<xs:attribute name="tipo" type="xs:string" fixed="jpeg" /> </xs:complexType>
Por defecto los atributos son opcionales. Indicar que son obligatorios: use="required"
Valor por defecto de un atributo. Podría definirse otro
valor.
Valor fijo de un atributo. Si no se define, se utiliza
XML Laboratorio Programacion 2018
Tipos Complejos vs
Simples
Pueden declararse 2 tipos:
Complejos: Pueden contener sub-elementos y atributos.
Simples: No contienen sub-elementos ni atributos
Pueden aparecer dentro de elementos o en valores de atributos
<alumno dni=“9873435”> <nombre>Jose</nombre> <apellidos>Bueno</apellidos> </alumno> complejos simples 54
Indicadores
Indicadores de orden.
All: los elementos hijos pueden aparecer en cualquier orden
y que aparecen como mucho solo una vez
Choice: representa alternativas
Sequence: indica en que orden
exacto deben aparecer los hijos.
<xs:complexType name="Transporte"> <xs:choice>
<xs:element name="coche" type="xs:string"/> <xs:element name="tren" type="xs:string"/> <xs:element name="avión" type="xs:string"/> </xs:choice> </xs:complexType> <transporte> <coche>Renault R23</coche> </transporte> <?xml version="1.0"?> <schema ...> <element name="nombre-y-apellidos"> <complexType> <sequence>
<element name="nombre" type="string"/> <element name="apellido1" type="string"/> <element name="apellido2" type="string"/> </sequence>
XML Laboratorio Programacion 2018
Indicadores
Indicadores de cantidad.
maxOccurs
minOccurs
ilimitado: maxOccurs="unbounded“
56
Tipos propios
<xs:complexType name="persona"> <xs:sequence>
<xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> </xs:sequence>
</xs:complexType>
<xs:element name="empleado" type="persona"> <xs:element name="cliente" type="persona">
... <empleado>
<nombre> Juan </nombre> <apellidos> Perez </apellidos> </empleado>
<cliente>
<nombre> Luis </nombre> <apellidos> Gomez </apellidos> </cliente>
XML Laboratorio Programacion 2018
Tipo complejos: Anónimos vs.
con nombre
<xs:complexType> <xs:sequence>
<xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> </xs:sequence>
</xs:complexType>
…
<xs:element name="empleado" type="persona"> …
<xs:complexType name="persona"> <xs:sequence>
<xs:element name="nombre" type="xs:string"/> <xs:element name="apellidos" type="xs:string"/> </xs:sequence>
</xs:complexType>
+ legible
+ reutilizable
58
Enumeraciones y restricciones
Restricción
Enumeración
<xs:element name="edad"> <xs:simpleType>
<xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction>
</xs:simpleType> </xs:element>
<xs:element name="coche"> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value=“Fiat"/> <xs:enumeration value=“Ford"/> </xs:restriction>
El elemento edad puede tener el valor entre
0 y 100
El elemento coche sólo puede ser Audi, Fiat
XML Laboratorio Programacion 2018
Restricciones: más ejemplos
<xs:element name="iniciales"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> </xs:restriction>
</xs:simpleType> </xs:element>
<xsd:element name ="codigo-postal"> <xsd:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> </xs:restriction>
</xsd:simpleType> </xsd:element>
Tres Letras
Un código postal de 5 dígitos
60
Restricciones: más ejemplos
<xs:element name="clave"> <xs:simpleType>
<xs:restriction base="xs:string"> <xs:minLength value="5"/> <xs:maxLength value="8"/> </xs:restriction>
</xs:simpleType> </xs:element>
XML Laboratorio Programacion 2018
Tipos Derivados por
Extensión
Similar a las subclases de OO: Añadir elementos a un tipo base
<xs:complexType name="Figura" >
<xs:attribute name="color" type="Color"/> </xs:complexType>
<xs:complexType name="Rectángulo"> <xs:complexContent>
<xs:extension base="Figura">
<xs:attribute name="base" type="xs:float" /> <xs:attribute name="altura" type="xs:float" /> </xs:extension>
</xs:complexContent> </xs:complexType>
<xs:complexType name="Círculo"> ...similar pero incluyendo el radio </xs:complexType>
Rectángulo contiene el elemento color, base y altura
62
XML Laboratorio Programacion 2018
Ejercicio práctico
Construir un esquema XML de acuerdo al DTD y XML
provistos. Realizar los siguientes pasos:
Crear el documento XML (ver XML adjunto)
Crear el DTD (ver DTD adjunto)
Validar DTD con el documento XML
Crear el Esquema XML
64
Ejercicio práctico…
DTD Libro:
<!ELEMENT Libro (Titulo, Contenido, Copyright)> <!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Contenido ((Capitulo+, Separacion?)+)> <!ELEMENT Capitulo (Tema, Seccion+)>
<!ATTLIST Capitulo materia (XML|Java) "Java"> <!ELEMENT Tema (#PCDATA)>
<!ELEMENT Seccion (#PCDATA)>
<!ATTLIST Seccion apartados CDATA #REQUIRED dificil (si|no) "no"> <!ELEMENT Separacion EMPTY>
XML Laboratorio Programacion 2018
Ejercicio práctico…
y probarlo con este documento XML:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Libro SYSTEM "libro.dtd"> <Libro>
<Titulo>Java y XML</Titulo> <Contenido>
<Capitulo materia="XML"> <Tema>Introducción</Tema>
<Seccion apartados="7">Qué es</Seccion> <Seccion apartados="3">Cómo se usa</Seccion> </Capitulo>
<Capitulo materia="XML"> <Tema>Creando XML</Tema>
<Seccion apartados="0">Un documento XML</Seccion> <Seccion apartados="2">La cabecera</Seccion> <Seccion apartados="6">El contenido</Seccion> </Capitulo>
66
Ejercicio práctico…
<Capitulo>
<Tema>Analizando XML</Tema>
<Seccion apartados="3">Preparación</Seccion> <Seccion apartados="3" dificil="si">SAX</Seccion> <Seccion apartados="9" dificil="si">Manejadores</Seccion> <Seccion apartados="0">Una forma mejor de cargar el analizador</Seccion>
</Capitulo> <Separacion/>
<Capitulo materia="Java"> <Tema>JDOM</Tema>
<Seccion apartados="2">Introducción</Seccion>
<Seccion apartados="4" dificil="si">DOM&JDOM</Seccion> </Capitulo>
</Contenido>
XML Laboratorio Programacion 2018
Próximas clases
Teoría:
Proxima: Miércoles 16/5
Temas:
Repaso
DOM
Hojas de estilo XLS
Ejemplos y ejercitación
Práctica:
Jueves 10/8 y Jueves 17/5
TP3 (2da. clase)