XML Flashcards
En que lenguaje se basa XML
SGML
¿Qué es XML? ¿Conoces alguna etiqueta de XML?
Conjnto de reglas para construir lenguajes de etiquetas (html, svg, firma).
No se tienen etiquetas porque no es un lenguaje, son las reglas para crearlo.
Caracteristicas de XML Bien Formado
- Todas las etiquetas tienen que llevar cierre
- Los atributos deben de ir entre dobles comillas
- Case-Sensitive
- Sólo existe un único elemento raíz.
- Todos los elementos se encuentran anidados y correctamente cerrados.
- Los valores de atributos deben ir entre comillas simples o dobles.
- Los elementos vacíos deben terminar con ‘/’ (autocierre) o añadiendo una etiqueta de fin.
- Los nombres de las etiquetas pueden ser alfanuméricos, pero siempre comenzando con una letra (o con ‘:’ y ‘_’ aunque es raro)
Caracteristicas de XML Válido
- Cumple las reglas de la gramática especificadas en el DTD / XSD
Declaración en un fichero XML
<!–- La declaración es opcional –>
<?xml versión=“1.0” encoding=“utf-8” standalone=“no”?>
<!–- Especificamos la gramatica .dtd –>
<!DOCTYPE empleados SYSTEM “empleados.dtd”>
<empleados>
.....
</empleados>
Escapar caracteres especiales en XML
Se pueden hacer con entities, hay que marcarlos con ‘&’ y el parser pondrá su caracter
- & amp;
- & lt;
- & gt
Cuando queramos realizar un texto con caracteres especiales de un cierto tamaño tenemos la opción de decirle al parser que ignore el bloque de código
<observaciones> <![CDATA[ texto que el parser no analiza (<> á | ) ]]> </observaciones>
¿Cómo declarar y usar name spaces en XML?
<root xmlns:h=“http://uri-a” xmlns:f=“http://uri-b”> <h:tag1> … </h:tag1> <f:tag1> … </f:tag1> </root>
Esquema y reglas de un DTD
Antiguos y poco flexibles
- standalone=“yes” / “no”. Indica si el dtd está autocontenido en el fichero. “yes”-> todo en el mismo fichero. “no”-> en dos ficheros.
- *–> 0:N
- +–> 1:N
- # PCDATA –> Texto para !ELEMENT dentro de las etiqueta
- CDATA –> Texto para ATTLIST con comillas
- <!ELEMENT nombreElemento ANY> admite cualquier combinación de texto (#PCDATA) y ELEMENT
- <!ELEMENT nombreElemento EMPTY> sin comentarios :-)
- Otros tipos de atributos son ID e IDREF (similar al concepto de clave primaria y ajena) <!ATTLIST director coddir ID #REQUIRED> ||<!ATTLIST pelicula direccion IDREF #REQUIRED>
- NO podemos definir dominios de datos para contenidos de Elements y atributos. No maneja tipo de datos.
<?xml version="1.0" encoding="UTF-8” standalone=“yes”?> <!DOCTYPE deportistas [ <!ELEMENT deportistas (futbol | f1 | tenis)*> <!ELEMENT futbol (#PCDATA)> <!ELEMENT f1 (#PCDATA)> <!ATTLIST f1 pais CDATA "España"> <!ATTLIST f1 fecha_de_nacimiento CDATA #IMPLIED> <!ATTLIST f1 equipo CDATA #REQUIRED> <!ELEMENT tenis (#PCDATA)> ]> <deportistas> <f1 pais="Alemania" fecha_de_nacimiento="03/07/1987” equipo="Ferrari">Sebastian Vettel</f1> <f1 equipo="McLaren">Fernando Alonso</f1> <tenis>Rafael Nadal</tenis> </deportistas>
Esquema y reglas de un XSD
Nuevos y flexibles
- Se define un name space para asociar el fichero con los datos a la gramatica. Ej.: < aeropuerto xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=”aeropuerto.xsd”>
- < xs:complexType mixed=”true” > Texto y etiquetas dentro del Element
- < xs:all> / < xs:sequence> / < xs:choice> –> Presencia o no y no importa el orden / Presentes y el orden es el de la xsd / Se definen el nº de ocurrencias de cualquiera de los hijos.
- min/maxOccurs=”unbounded” –> para determininar el número de Elements
- type=”xs:string” –> Se pueden definir tipos de datos (xs:time, xs:string, xs:integer, xd:ID….)
- < xs:pattern value=”[CER]”/> –> Validacion por patrones
- Restricciones -> length, min / maxLength, totalDigits …. Ver documento xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="aeropuerto"> <xs:complexType> <!–- Pueden aparecer en cualquier orden, contrario que usar sequence --> <xs:all> <xs:element name="nombre" type="xs:string"/> <xs:element name="vuelos"> <xs:complexType> <xs:sequence> <xs:element name="vuelo" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="diario" minOccurs="0"/> <xs:element name="origen" type="xs:string"/> <xs:element name="destino" type="xs:string"/> <xs:element name="hora-salida" type="xs:time"/> <xs:element name="hora-llegada" type="xs:time"/> </xs:sequence> <xs:attribute name="código" type="xs:ID" use="required"/> <xs:attribute name="estado" default="E"> <!-- Creamos tipo de dato a partir de un tipo base y añadiendo restricciones--> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[CER]"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="fecha" type="xs:date"/> </xs:all> </xs:complexType> </xs:element> </xs:schema>
<?xml version="1.0" encoding="UTF-8"?> <aeropuerto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="aeropuerto.xsd"> <nombre>JFK</nombre> <vuelos> <vuelo código="V22" estado="R"> <diario /> <origen>New York</origen> <destino>Chicago</destino> <hora-salida>09:30:00</hora-salida> <hora-llegada>11:30:00</hora-llegada> </vuelo> <vuelo código="V23" estado="C"> <origen>New York</origen> <destino>Miami</destino> <hora-salida>10:15:00</hora-salida> <hora-llegada>11:15:00</hora-llegada> </vuelo> </vuelos> <fecha>2013-12-20</fecha> </aeropuerto>
Herencia (extensiones) en una xsd
<xs:complexType name="infoPersonaAmpliada"> <xs:complexContent> <xs:extension base="infoPersona"> <xs:sequence> <xs:element name="ciudad" type="xs:string"/> <xs:element name="pais" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="infoPersona"> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="edad" type="edadPersona"/> </xs:sequence> <xs:attribute name="numero" type="xs:integer"/> </xs:complexType> <xs:simpleType name="edadPersona"> <xs:restriction base="xs:integer"> <xs:minExclusive value="-1"/> <xs:maxExclusive value="131"/> </xs:restriction> </xs:simpleType>
Restricciones (facetas) en Elements de un xsd
Tipos de datos en xsd
- xs:string
- xs:integer
- type=”xs:string” default=”B”
- type=”xs:string” fixed=”agosto”
Sequence, All, Choice y cardinalidades
- < xs:all> –> Presencia o no y no importa el orden
- < xs:sequence> –> Presentes y el orden es el de la xsd
- < xs:choice> / Se definen el nº de ocurrencias de cualquiera de los hijos
- maxOccurs=”5”
- minOccurs=”2”
- maxOccurs=”unbounded”
¿Qué es XSL?
eXtensible Stylesheet Language
Cuando pasamos un parser con las directrices de la hoja XSL, el documento se trasnforma en otro documento, ya sea de etiquetas o con otra forma.
- XSL-FO –> eXtensible Stylesheet Language Formatting Objects. Para generar documentos (pdf…)
- XSLT –> Extensible Stylesheet Language Transformations. Genera otro documento de etiquetas (HTML, SVG….)
Lista de API’s XML en Java
- JAX-P -> Conjunto de todas las apis de xml. Dentro DOM/SAX/XSLT/StAX
- DOM
- SAX
- JAX-B
- StAX