XML

De WikiEducator
Saltar a: navegación, buscar





Documentación general

Editores


¿Qué es XML?


Lectura inicial


Un ejemplo

XML (EXtensible Markup Language) es un modo multiplataforma de representar datos. XML te permite crear datos que se podrán leer por cualquier aplicación en cualquier plataforma. Puedes crearlo y editarlo a mano por estar basado en tecnologías de etiquetas.

<?xml version="1.0"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>



Listado de cursos en XML

Icon activity.jpg

Listado de cursos en XML

Crea una versión en XML con la información de 5 cursos de http://plan.aragon.es/MapaRec.nsf/fmrListado?OpenForm






Icon activity.jpg

Actividad


Icon objectives.jpg

Objetivo

  • Vas a crear un documento xml válido que almacene información de alumnos del centro (al menos 5).
  • De cada alumno tendremos la siguiente información:
    • Nombre
    • Apellido
    • Fecha de nacimiento (día, mes y año)
    • Asignaturas que está cursando
    • Número de matrícula
    • Turno (mañana, tarde, noche)
  • De las asignaturas tendremos la información:
    • Nombre
    • Notas
  • Crea una estructura para representar la información anterior.
  • Elige qué pondrías como atributos y qué como elementos
  • Recuerda que los atributos:
    • No pueden contener varios valores
    • No pueden contener estructuras de nuevos árboles
    • Son más complejos de expandir y mantener.
  • Usa elementos para los datos y atributos para información no tan relevante.






Ventajas de usar XML



Icon preknowledge.gif

Ventajas

  • Separa datos de presentación
  • Simplifica compartir e intercambiar datos
  • La información se almacena en texto plano: software y hardware independiente.
  • Simplifica el transporte de la información.
  • Simplifica los cambios de plataforma
  • Hace los datos disponibles más fácil
  • Usado en los nuevos lenguajes de internet: xhtml, servicios web, rss, rdf, smil





Icon objectives.jpg

¿Para qué sirve?

  • Guardar datos
  • Servicios web
  • Podcast y suscripción de datos
  • RDF, microformatos y tecnologías semánticas
  • AJAX
  • Mashups






Visualización con CSS

Documentación

En el doc xml

En el documento xml introducimos una referencia al documento .css

 <?xml-stylesheet type="text/css" href="url_del_css"?>
Ejemplo: http://www.w3schools.com/xml/xml_display.asp

Chuleta CSS

  • Básico
long {display: none;}
abbreviation {display: inline;}
abbreviation * {display: inline;}
* {display: block;}
  • Generar contenido
title:before {content: 'Title: ';}
title:after {content: ' (technical paper)';}
subtitle:before {content: 'Subtitle: ';}
author:before {content: 'Author: ';}
  • Comillas
subtitle:before {content: open-quote;}
subtitle:after {content: close-quote;}
  • Atributos
author:after {content: ' (' attr(e-mail) ')';}
  • Contadores
section:before {
  content: "Section " counter(section) "\A\A0";
  counter-increment: section;
  white-space: pre;
}
  • Contenido desde uris
paper:after {
  content: url('disclaimer.txt');
  white-space: pre;
}


Sintaxis XML

La estructura de los documentos XML

  • Los documentos XML tienen información de texto que abarca las marcas y el contenido.
  • Las marcas describen los datos y están encerradas entre signos < y >
  • El prólogo es la parte introductoria del doc XML: precede al primer elemento:
<?xml version="1.0" encoding="utf-8"?>
  • El contenido del documento se encuentra en sus elementos y atributos.
    • Los elementos empiezan y finalizan con una etiqueta de inicio y fin.
    • Los atributos están en la etiqueta de inicio.
  • Restricciones para los nombres:
    • Tienen que empezar por letra, quión bajo o dos puntos (recomendado letra)
    • Se distinguen mayúsculas y minúsculas
    • Los dos puntos deberían de usarse sólo para separar namespaces.
    • No deben de empezar con el carácter xml (reservados para el W3C)

Documentos bien formados

  • Un elmento raíz que encierra los demás
  • Todos los elementos tienen una etiqueta de inicio y una de fin ( o son elementos vacíos)
  • Todos los elementos están anidados jerárquicamente (sin solapamientos)
  • Todos los valores de los atributos están entre comillas (dobles o sencillas)
<elemento_vacio></elemento_vacio>
<elemento_vacio />

Secciones CDATA

  • Incluyen caracteres no permitidos: <, >, &, "
<formula>4 < 5 </formula>   # NO VÁLIDO
<formula><![CDATA[4<5>]]> </formula>

Documentos válidos

  • Según un tipo de documento (DTD, xml schema, relax NG, ...)


DTD

Un DTD es el documento que define la estructura que debe tener un documento XML(elementos, atributos, entidades, notaciones, etc, que pueden aparecer, el orden y el número de veces que pueden aparecer, cuáles pueden ser hijos de cuáles, etc.)

Icon present.gif
Tip: Aquí tienes un buen resumen: http://www.mclibre.org/consultar/xml/lecciones/xml_dtd.html


Funciones de un DTD

  • Validar documentos
  • Dar valores por defecto a atributos que no existen
  • Declarar y reemplazar entidades
  • Documentar los documentos.

¿Cómo se introduce?

  • declaración DOCTYPE

¿Dónde?

  • Pueden aparecer dentro del documento xml, fuera o en ambos sitios.
  • Dentro del doc:
<!DOCTYPE root  ... >
  • Fuera del documento:
 <!DOCTYPE root SYSTEM 
        "http://...">
  • Primero lee el externo, depués el interno


Declaraciones ELEMENT

  • Especifican qué pueden contener los elementos
  • No soporte directo de namespaces
  • Los elementos pueden contener:
    • Nada
 <!ELEMENT name EMPTY>
    • Texto
 <!ELEMENT name (#PCDATA)>
    • Texto y nuevos elementos (hijos)
 <!ELEMENT name
  (#PCDATA|elem1|elem2|...)*>
    • Hijos
 <!ELEMENT name
  (elem1|elem2|...)*>

Sintaxis de declaraciones ELEMENT

  • Secuencia de hijos
 <!ELEMENT name (ch1, ch2)>
  • Elección entre hijos
 <!ELEMENT name (ch1|ch2)>
  • Secuencia de hijos opcionales
 <!ELEMENT name
    (ch?, ch2?, ch3?)>
  • Cero o más ...
 <!ELEMENT name (child*)>
  • Uno o más
 <!ELEMENT name (child+)>

Se pueden combinar las posibilidades

  • Elección entre secuencias:
 ((a, b) | (c, d)
  • Secuencia de opciones
 ((a | b), (c | d))
  • Secuencia opcional
 (a, b, c)?

No se puede mezclar , y | en una lista. Usa paréntesis para desambiguar.

Restricciones

  • Un modelo mixto no puede restringir cuántas veces y el orden en que aparecen los hijos. Sólo los elementos permitidos.
  • Un modelo de sólo elementos requiere que cada elemento hijo de la instancia coincida exactamente con una parte del modelo. Lo siguente no es legal:
 (A?, A?)

Comodines

  • Un elmento que puede contener cualquier elemento declarado en el DTD o texto
 <!ELEMENT name ANY>

Declaración de atributos de un elemento

 <!ATTLIST ename
   attr1 type1 default1
   attr2 type2 default2
   ...>

Tipos de atributos

  • CDATA
sin restricción
  • ID
un identificador
  • IDREF
tiene que coincidir con un ID de un elemento.
  • NMTOKEN
nombre o número
  • IDREFS
uno o más IDs separados por espacios
  • NMTOKENS
uno o más separados por espacios

Atributos por defecto

  • Valor requerido, lo insertará el parser
  #FIXED "value"
  • Atributo requerido, pero sin valor específico
 #REQUIRED
  • Atributo no requerido, con valor por defecto
 "valor"
  • Atributo no requerido, sin valor por defecto:
 #IMPLIED

Declaración de entidades

  • Declaran un nombre para texto que se insertará en el documento
 <!ENTITY nombreEntidad "valorEntidad">
  • Se insertan así:
 &nombreEntidad;

Entidades parámetro

<!ENTITY %datos_personales "nombre|telefono|email">
<!ENTITY %empleado (departamento, %datos_personales)>

Entidades y notaciones

Combinar datos textuales y no textuales.

 <!ELEMENT logo EMPTY>
 <!ATTLIST logo imagen ENTITY #REQUIRED>
 <!NOTATION GIF SYSTEM "visor_sistemas">
 <!ENTITY logo_centro SYSTEM "http://www.miempresa.com/logo.gif">
    NDATA GIF>


<logo imagen="logo_centro" />


Ejercicios DTDs

Icon activity.jpg

Ejercicios DTDs

Realiza los ejercicios de DTDs de la siguiente página de Bartolomé Sintes Marco: http://www.mclibre.org/consultar/xml/ejercicios/dtd.html






Uso de Namespaces

(Ejemplos de

Motivación

  • Objetivo: resolver conflictos cuando coinciden elementos con el mismo nombre, pero con diferente significado.
  • Ocurre con frecuencia cuando construimos nuevas estructuras desde definiciones existentes.
  • Recomendación del W3C. Se usa para identificar el origen de cada elemento: http://www.w3.org/TR/REC-xml-names/

Ejemplo 1

<table>
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>
This XML carries information about a table (a piece of furniture):

Ejemplo 2

<table>
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>

Declaración de namespaces

  • A cada namespace se le asigna un prefijo
  • El prefijo hace referencia a una URI (Uniform Resource Identifier), que no suele tener equivalencia física (convención para crear espacios únicos)
<root>
 
<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
 
<f:table xmlns:f="http://www.w3schools.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
 
</root>

Declaración al inicio

<root
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
 
<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
 
<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
 
</root>

Namespace por defecto

  • Sin prefijo: los elementos sin especificación del namespace están en el namespace por defecto, excepto si el elemento que no tiene prefijo es hijo de un elemento que sí que lo tiene.
<table xmlns="http://www.w3.org/TR/html4/">
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>

Namespace vacío

  • Si un elemento no va a estar asociado a ningún namespace, se puede definir un namespace vacío.

Namespaces y atributos

  • La declaración de namespaces no tienen efecto sobre los atributos
  • Si los atributos no están calificados, no se asocian a ningún namespace.


Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg


XML Schema

Documentación

Objetivo

XML Schema es una alternativa a DTD basada en XML. Describe la estructura de un documento XML.

  • Definir la estructura correcta de bloques de un documento XML
  • Define los elementos y atributos que pueden aparecer
  • Define qué elementos son hijos, cuántos hijos y en qué orden.
  • Define si un elemento puede contener texto o tiene que estar vacío.
  • Define los tipos de datos de elementos y atributos.
  • Define valores fijos y por defecto

A diferencia del DTD:

  • es un modelo extensible y tiene más poder expresivo.
  • están escritos en XML
  • soporta tipos de datos y namespaces
  • son una recomendación del W3C

El tipo de documento XML

La estructura de un documento XML la forman:

  • Su vocabulario (elementos y atributos)
  • El modelo de contenido de cada elemento
  • Los tipos de datos del contenido

Componentes de un esquema

  • Componentes primarios: tipos de datos, elementos y atributos
  • Componentes secundarios: definiciones especiales (grupos de atributos, restricciones y anotaciones)
  • Componentes de ayuda. Se usan en otros componentes

Un ejemplo

(fuente: http://www.aafunky.com/w3c/xmlschema/xmlschema-0es.html)

<?xml version="1.0"?>
<hojaPedido fechaPedido="1999-10-20">
    <enviarA pais="EEUU">
 
        <nombre>Alice Smith</nombre>
        <calle>123 Maple Street</calle>
        <ciudad>Mill Valley</ciudad>
        <estado>CA</estado>
 
        <zip>90952</zip>
    </enviarA>
    <facturarA pais="EEUU">
        <nombre>Robert Smith</nombre>
 
        <calle>8 Oak Avenue</calle>
        <ciudad>Old Town</ciudad>
        <estado>PA</estado>
        <zip>95819</zip>
 
    </facturarA>
    <comentario>¡Deprisa, mi césped parece una selva!</comentario>
    <elementos>
        <elemento numProducto="872-AA">
            <nombreProducto>Cortacesped</nombreProducto>
 
            <cantidad>1</cantidad>
            <precioEEUU>148.95</precioEEUU>
            <comentario>Confirmar que es eléctrico</comentario>
        </elemento>
 
        <elemento numProducto="926-AA">
            <nombreProducto>Monitor para bebes</nombreProducto>
            <cantidad>1</cantidad>
            <precioEEUU>39.98</precioEEUU>
 
            <fechaEnvio>1999-05-21</fechaEnvio>
        </elemento>
    </elementos>
</hojaPedido>


XML Schema:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
 <xsd:annotation>
  <xsd:documentation xml:lang="es">
   Esquema de hoja de pedido para Example.com.
   Copyright 2000 Example.com. Todos los derechos reservados.
  </xsd:documentation>
 </xsd:annotation>
 
 <xsd:element name="hojaPedido" type="TipoHojaPedido"/>
 
 <xsd:element name="comentario"  type="xsd:string"/>
 
 <xsd:complexType name="TipoHojaPedido">
  <xsd:sequence>
 
   <xsd:element name="enviarA"   type="direccionEEUU"/>
   <xsd:element name="facturarA" type="direccionEEUU"/>
   <xsd:element ref="comentario" minOccurs="0"/>
 
   <xsd:element name="elementos" type="Elementos"/>
  </xsd:sequence>
  <xsd:attribute name="fechaPedido" type="xsd:date"/>
 
 </xsd:complexType>
 
 <xsd:complexType name="direccionEEUU">
  <xsd:sequence>
   <xsd:element name="nombre" type="xsd:string"/>
 
   <xsd:element name="calle"  type="xsd:string"/>
   <xsd:element name="ciudad" type="xsd:string"/>
   <xsd:element name="estado" type="xsd:string"/>
 
   <xsd:element name="zip"    type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="pais" type="xsd:NMTOKEN" fixed="EEUU"/>
 
 </xsd:complexType>
 
 <xsd:complexType name="Elementos">
  <xsd:sequence>
   <xsd:element name="elemento" minOccurs="0" maxOccurs="unbounded">
 
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element name="nombreProducto" type="xsd:string"/>
      <xsd:element name="cantidad">
 
       <xsd:simpleType>
        <xsd:restriction base="xsd:positiveInteger">
         <xsd:maxExclusive value="100"/>
        </xsd:restriction>
       </xsd:simpleType>
 
      </xsd:element>
      <xsd:element name="precioEEUU" type="xsd:decimal"/>
      <xsd:element ref="comentario"  minOccurs="0"/>
 
      <xsd:element name="fechaEnvio" type="xsd:date" minOccurs="0"/>
     </xsd:sequence>
     <xsd:attribute name="numProducto" type="SKU" use="required"/>
 
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
 </xsd:complexType>
 
 <!-- Stock Keeping Unit [Código de Almacenaje], -->
 
  <!-- un código para identificar productos -->
 <xsd:simpleType name="SKU">
  <xsd:restriction base="xsd:string">
   <xsd:pattern value="\d{3}-[A-Z]{2}"/>
  </xsd:restriction>
 
 </xsd:simpleType>
</xsd:schema>

Elemento schema

  • Declaración del espacio de nombres de la recomendación del W3C
  • Los hijos directos de schema son declaraciones y definiciones globales
  • Elemento raíz (declarado a nivel global).
  • Sequence: los elementos tienen que aparecer en el mismo orden (especificador)
  • Tipos simples (limitan el texto que se puede insertar como valor)
  • Tipos complejos (pueden ser anónimos)
element
para declarar elementos. Atributos: name, ref, type, sympleType, complexType
attribute
para declarar atributos. Nomalmente dentro de attributeGroup. Tipos: simpleType o type. Siempre son de tipo simple. Frecuencia: use: required, optional, prohibited,.
sequence
los elementos tienen que aparecer en el mismo orden
cardinalidad
minOccurs, maxOccurs. Si no se especifica nada: 1.
Restricciones de valor
fixed, default,

Intro XPath

Intro a XPath

Intro a XSLT

Intro a XSLT