Documentos de Académico
Documentos de Profesional
Documentos de Cultura
XML
XML
ndice.
Introduccin a XML.
Estudiando XML.
DTDs y Schemas.
Manipulacin de XML.
Qu es XML?.
XML
eXtensible
Markup
Language
XML vs HTML
<html>
<head>
<title>Hello John</title>
</head>
<body bgcolor="#FFFFFF"
text="#000000">
<p> Hello John. </P>
</body>
</html>
XML vs HTML
<html>
Es el ttulo de la pgina
<head>
<title>Hello John</title>
</head>
<body bgcolor="#FFFFFF"
text="#000000">
<p> Hello John. </P>
</body>
</html>
Es un prrafo
HTML no es XML !!
<bib>
<libro>
<titulo>TCP/IP Illustrated</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio> 65.95</precio>
</libro>
</bib>
<libro>
<titulo>
<autor>
<apellido>
<editorial>
<precio>
<nombre>
Estudiando XML
XML es un metalenguage
Ojo, XML no es un lenguaje de etiquetas,
sino un conjunto de reglas para definir
lenguajes de etiquetas (como XHTML).
XML me dice como crear mis propias
etiquetas.
Aplicaciones de XML
Conces alguna situacin donde se
aplique XML?.
Se te ocurre alguna situacin donde se
pueda aplicar XML?.
Un ejemplo: RSS
Really Simple Syndication:
Syndication: formato de sindicacin de contenidos.
Lenguaje de etiquetas construido a partir de XML.
<rss version="0.92">
<channel>
<title>Dave Winer: Grateful Dead</title>
<link>http://www.scripting.com/blog/categories/gratefulDead.html
</link>
<description>
A high-fidelity Grateful Dead song every day.
</description>
<lastBuildDate>Fri, 13 Apr 2001 19:23:02 GMT</lastBuildDate>
<docs>http://backend.userland.com/rss092</docs>
<managingEditor>dave@userland.com (Dave Winer)</managingEditor>
<webMaster>dave@userland.com (Dave Winer)</webMaster>
<cloud domain="data.ourfavoritesongs.com" port="80" path="/RPC2"
registerProcedure="ourFavoriteSongs.rssPleaseNotify" protocol="xml-rpc"/>
<item>
<description> It's been a few days since I added a song to the Grateful Dead channel.
</description>
<enclosure url="http://www.scripting.com/mp3s/weatherReportDicksPicsVol7.mp3"
length="6182912" type="audio/mpeg"/>
</item>
...
</channel>
</rss>
Trminos en XML
<direccion>
<nombre>
Etiqueta
<titulo>Mrs.</titulo>
<nombre> Mary </nombre>
Elemento
<apellidos>McGoon</apellidos>
</nombre>
<calle> 1401 Main Street </calle>
Atributo
<ciudad estado="NC">Anytown</ciudad>
<!- Lo que ponga aqu es ignorado
por el parser.
Comentario
Reglas sintcticas
Una raiz.
Anidacin de las etiquetas.
Sensible a maysculas.
Atributos no vacos y entrecomillados.
Reglas para los nombres de etiquetas y
atributos.
Caracteres no permitidos
&
&
<
<
>
>
'
"
Ejercicio
<?xml version="1.0"?>
<X> Hola Mundo! </X>
<X> Hola Mundo! </X>
<?xml version="1.0"?>
<A>
<B>
<C> 1 </B>
</C>
<C> 2 </C>
</A>
<?xml version="1.0"?>
<A ID=1>
<B X=xyz>
<C C=45> 1 </C>
</B>
</A>
<?xml version="1.0"?>
<A>
<B>
<C> 1 </C>
</B>
<C> 2 </C>
</A>
3
<?xml version="1.0"?>
<P>
<X A=23 />
<X B=24 />
</P>
<?xml version="1.0"?>
<X> Hola Mundo! </X>
Un ejercicio
Qu similitudes y diferencias existen entre almacenar
informacin en una BBDD y en XML?.
Nombre
Apellidos
Calle
Ciudad
<direccion>
<nombre>
<titulo>Mrs.</titulo>
Mary
McGoon
1401
Main
Street
Anytown
Un ejemplo
Sin atributos
<mensajes>
<mensaje>
<tipo> Informativo </tipo>
<texto> Reunin a las 12 </texto>
</mensaje>
<mensaje>
<tipo> Solicitud </tipo>
<texto> Informe 9A </texto>
</mensaje>
</mensajes>
Con atributos
<mensajes>
<mensaje tipo="Informativo">
Reunin a las 12
</mensaje>
<mensaje tipo="Solicitud">
Necesito el informe 9A
</mensaje>
</mensajes>
10
En resumen
Lenguaje textual.
XML no especifica ninguna etiqueta.
Es estricto.
11
Un ejemplo
IBM
Un ejemplo
IBM
12
Un ejercicio
Queremos guardar informacin d eun libro:
libro: su ttulo,
ttulo, sus
autores y el ao de edicin.
edicin.
<libro>
<titulo> Libro 1 </titulo>
<autores>
<autor> Uno </autor>
<libro ao="1999">
<autor> Dos </autor>
<titulo> Libro 1 </titulo>
</autores>
<autores>
<ao> 1999 </ao>
<autor nombre="Uno" />
Tengo que
</libro>
<autor nombre="Dos"
/> poner siempre, al menos
</autores>
</libro>
Otro ejemplo.
Un juego de texto donde cada habitacin tiene un
identificador,
identificador, una descripcin y sus salidas.
salidas.
<ROOM ID="2.1">
<DESCRIPTION>
Te encuentras en un habitculo
exactamente igual al anterior. En el
centro de la habitacin ves un poste de
color blanco de aproximadamente un metro
de alto. Tambin ves un pasillo que nace
en la pared del fondo.
</DESCRIPTION>
<EXITS>
<EXIT ID="NORTH" TO="2.2"/>
</EXITS>
</ROOM>
<HABITACION ID="2.1">
<DESCRIPCION>
Te encuentras en un habitculo
exactamente igual al anterior. En el
centro de la habitacin ves un poste
de color blanco de aproximadamente un
metro de alto. Tambin ves un pasillo
que nace en la pared del fondo.
</DESCRIPCION>
<SALIDA>
<DIRECCION> nORTE </DIRECCION>
<HACIA>2.2</HACIA>
</SALIDA>
</HABITACION>
13
Namespaces
Un namespace es un mbito de definicin
de etiquetas.
Para cada etiqueta hemos de indicar,
adems su namespace.
Los namespaces deben declararse antes
de utilizarse.
14
Namespaces. Un ejemplo
<?xml version="1.0"?>
<clientes-empleados
xmlns:cliente="http://www.una-url.com/clientes/"
xmlns:empleado="http://www.otra-url.com/empleados/">
<cliente:nombre>XYZ</cliente:nombre>
...
<empleado:nombre>XYZ</empleado:nombre>
...
</clientes-empleados>
DTDs y Schemas.
15
16
Definicin de la estructura de un
documento
DTDs y Schemas.
Para definir la estructura de un documento
utilizamos otro documento.
Ambas sirven para lo mismo.
Estructura.
DTD en XML.
Schema, su propia especificacin
Un ejemplo
<!ELEMENT cliente (persona-contacto,
direccion, ciudad)>
<!ELEMENT persona-contacto (titulo?, nombre,
apellidos)>
Documento vlido
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<cliente>
<!ELEMENT apellidos (#PCDATA)>
<persona-contacto>
<!ELEMENT direccion (#PCDATA)>
<titulo> Don </titulo>
<!ELEMENT ciudad (#PCDATA)>
<nombre> Juan </nombre>
<apellidos> Nadie Nadie </apellidos>
</persona-contacto>
<direccion> X </direccion>
<ciudad> Y </ciudad>
</cliente>
<cliente>
<persona-contacto>
<nombre> Juan </nombre>
<apellidos> Nadie Nadie </apellidos>
</persona-contacto>
<direccion> X </direccion>
<ciudad> Y </ciudad>
</cliente>
17
D.T.D.s
Declaracin de tipo de documento.
Declaracin de elementos.
Nos centraremos
en estas dos.
Declaracin de atributos.
Declaracion de notaciones.
Declaracin de entidades.
D.T.D.s
Estas lneas nos dan mucha informacin.
18
<cliente>
<persona-contacto>
</persona-contacto>
<ciudad> ciudad </ciudad
<direccion> d </direccion>
</cliente>
Ejercicio
<cliente>
<persona-contacto>
<nombre> n </nombre>
<apellidos> p>
</persona-contacto>
<direccion> d </direccion>
<ciudad> ciudad </ciudad
</cliente>
<cliente>
<persona-contacto>
<nombre> Juan </nombre>
<nombre> Pablo </nombre>
<apellidos> p </apellidos>
</persona-contacto>
<direccion> d </direccion>
<ciudad> ciudad </ciudad
</cliente>
<cliente>
<persona-contacto>
<nombre> Juan </nombre>
<apellidos>
<primero> X </primero>
<segundo> y </segundo>
</apellidos>
</persona-contacto>
<direccion> d </direccion>
<ciudad> ciudad </ciudad
</cliente>
<cliente>
<persona-contacto>
<nombre> Juan </nombre>
<apellidos> X </apellidos>
<direccion> d </direccion>
</persona-contacto>
<ciudad> ciudad </ciudad
</cliente>
19
Si no se indica, el tercer
atributo vale Valor por
defecto.
Ejercicio
Escribir una DTD para el siguiente
documento.
<!DOCTYPE LIBROS SYSTEM "libros.dtd">
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<LIBROS>
<LIBRO>
<TITULO>AutoSketch</TITULO>
<AUTOR>Ramn Montero</AUTOR>
<PRECIO>2.500</PRECIO>
</LIBRO>
LIBROS
(LIBRO)+>
<LIBRO>
98</TITULO>
LIBRO <TITULO>Windows
(TITULO,AUTOR,PRECIO)>
<AUTOR>Jaime de Yraolagoitia</AUTOR>
TITULO<PRECIO>3.250</PRECIO>
(#PCDATA)>
</LIBRO>
AUTOR
(#PCDATA)>
<LIBRO>
Graphics</TITULO>
PRECIO<TITULO>Web
(#PCDATA)>
<AUTOR>Ron Wodaski</AUTOR>
<PRECIO>8.975</PRECIO>
</LIBRO>
</LIBROS>
20
Schemas
Son documentos XML.
Soportan tipos de datos.
Soportan namespaces.
Permiten definir nuevos tipos de datos y
restricciones sobre los valores de un
elemento.
Ofrecen mayor precisin que los DTDs.
21
Schemas
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
Schemas
<?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"/>
Declaracin de un
elemento.
Compuesto por una
secuencia de otros
elementos.
</schema>
22
Schemas
<?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"/>
Schemas
<?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>
<apellido1> Perez </apellido1>
<apellido2> Perez </apellido2>
</nombre-y-apellidos>
23
Tipos de datos.
string
decimal
integer
positiveInteger
boolean
<xs:element name="producto">
<xs:complexType>
<xs:attribute name="id" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>
Indicadores.
Indicadores de orden.
All
Choice
Sequence
<xs:element name="libro">
<xs:complexType>
<xs:choice>
<xs:element name="autor" type="xs:string"/>
<xs:element name="editor" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
Indicadores de cantidad.
maxOccurs
minOccurs
Ilimitada: maxOccurs="unbounded"
24
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>
...
<empleado>
Extensiones de tipos
<persona edad=36">Jun Prez</ persona >
<xs:element name=persona">
<xs:complexType>
<xs:simpleContent>
<xs:extension base=xs:string">
<xs:attribute name=edad" type="xs:integer" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
25
Extensiones de tipos
<!-- Elementos comunes -->
<xs:complexType name="Tipo-Ficha">
<xs:sequence>
<xs:element name="titulo" type="xs:string" />
<xs:element name="resumen" type="xs:integer"
minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
Restricciones
El elemento edad puede valer
entre 0 y 100
<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="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
26
Restricciones
Tres letras
<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>
Un cdigo postal de 5 dgitos
<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>
Restricciones
Una cadena entre 5 y 8
Caracteres.
<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>
27
Ejercicios
<empleado>
<persona>
<nombre> Yo </nombre>
<nombre> Yo </nombre>
<apellidos> mismo </apellidos>
<apodo> uno </apodo>
</empleado>
<apodo> dos </apodo>
<id> 12ABc </id>
Aadir
un elemento
</
persona
> <clave> de, exactamente, 8 caracteres
al empleado.
Aadir un elemento <foto> con un atributo archivo que
indique el archivo de la foto.
Y si queremos escribir pirmero el apellido y despus el
nombre?. Qu cambiaramos?.
Una persona que pueda tener tantos apodos como se
desee, o ninguno.
Soluciones
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="empleado">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apellidos" type="xs:string"/>
<xs:element name=clave">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="foto">
</xs:sequence>
<xs:complexType>
</xs:complexType>
<xs:sequence>
</xs:element>
<xs:attribute name=archivo" type="xs:string"/>
</xs:schema>
</xs:sequence>
</xs:complexType>
</xs:element>
28
Soluciones
<xs:element name="persona">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="apodo" type="xs:string"
maxOccurs="maxOccurs="unbounded"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Ejercicio
<CHESSBOARD>
<WHITEPIECES>
<KING><POSITION COLUMN="G" ROW="1"/></KING>
<BISHOP><POSITION COLUMN="D" ROW="6"/></BISHOP>
<ROOK><POSITION COLUMN="E" ROW="1"/></ROOK>
<PAWN><POSITION COLUMN="A" ROW="4"/></PAWN>
</WHITEPIECES>
<BLACKPIECES>
<KING><POSITION COLUMN="B" ROW="6"/></KING>
La nica pieza
obligatoria es el rey.
rey.
El rey y la reina solo
aparecen una vez,
vez, el
resto de las piezas
dos veces salvo el
pen que aparece 8.
29
Solucin
<?xml version="1.0" encoding="UTF-8"?>
xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="CHESSBOARD">
<xsd:complexType>
<xsd:complexType name="piece">
<xsd:sequence>
<xsd:sequence>
<xsd:element name="WHITEPIECES"
<xsd:element name="POSITION"
type="pieces" />
minOccurs='1' maxOccurs='1'>
<xsd:element name="BLACKPIECES"
<xsd:complexType>
type="pieces" />
<xsd:attribute name="COLUMN" use='required'>
</xsd:sequence>
<xsd:simpleType>
</xsd:complexType>
<xsd:restriction base="xsd:string">
</xsd:element>
<xsd:pattern value="[A-H]"/>
</xsd:restriction>
<xsd:complexType name="pieces">
</xsd:simpleType>
<xsd:sequence>
</xsd:attribute>
<xsd:element name="KING" type="piece"
<xsd:attribute name="ROW" use='required'>
minOccurs='1' maxOccurs='1'/>
<xsd:simpleType>
<xsd:element name="QUEEN" type="piece"
<xsd:restriction base="xsd:positiveInteger">
minOccurs='0' maxOccurs='1'/>
<xsd:minInclusive value="1"/>
<xsd:element name="BISHOP" type="piece"
<xsd:maxInclusive value="8"/>
minOccurs='0' maxOccurs='2'/>
</xsd:restriction>
<xsd:element name="ROOK" type="piece"
</xsd:simpleType>
minOccurs='0' maxOccurs='2'/>
</xsd:attribute>
<xsd:element name="KNIGHT" type="piece"
</xsd:complexType>
minOccurs='0' maxOccurs='2'/>
</xsd:element>
<xsd:element name="PAWN" type="piece"
</xsd:sequence>
minOccurs='0' maxOccurs='8'/>
</xsd:complexType>
</xsd:sequence>
</xsd:schema>
</xsd:complexType>
Existe ya un vocabulario de
etiquetas para mi problema?
Probablemente s:
http://www.oasisopen.org/cover/xml.html
http://www.dublincore.org
http://www.rosettanet.org
Google.
Aplicaciones similares.
30
Manipulacin de XML.
31
Programa
Termina el
elemento
<nombre>
32
33
Un ejemplo
Un ejemplo
import org.xml.sax.*;
<CHESSBOARD>
import
org.xml.sax.helpers.*;
import
javax.xml.parsers.*;
<WHITEPIECES>
<PAWN><POSITION
COLUMN="A"
ROW="4"/></PAWN>
public
class ChessboardHandler
extends
HandlerBase {
</WHITEPIECES>
private boolean whitePiece = false;
public
void startElement(String name,
<BLACKPIECES>
AttributeList attrs)
{
<KING><POSITION
COLUMN="B"
ROW="6"/></KING>
if
(name.equals("WHITEPIECES"))
{
<PAWN><POSITION
COLUMN="D" ROW="4"/></PAWN>
whitePiece = true;
</BLACKPIECES>
} else if (name.equals("BLACKPIECES")) {
</CHESSBOARD>
whitePiece = false;
} else if (name.equals("KING") || name.equals("QUEEN") || name.equals("BISHOP") ||
name.equals("ROOK")
|| name.equals("KNIGHT") || name.equals("PAWN")) {
System.out.print((whitePiece ? "White" : "Black") + " "+ name.toLowerCase() + ": ");
} else if (name.equals("POSITION")) {
if (attrs != null) {
System.out.print(attrs.getValue("COLUMN"));
System.out.println(attrs.getValue("ROW"));
}
}
return;
}
}
}
34
<bib>
<libro>
<titulo>
<autor>
<apellido>
<editorial>
<precio>
<nombre>
35
36
Un ejemplo
public void print(String fileName)
throws SAXException, IOException {
Document document = builder.parse(fileName);
NodeList positions
= document.getElementsByTagName("POSITION");
for (int i = 0; i < positions.getLength(); i++) {
Element position = (Element) positions.item(i);
Element piece = (Element) position.getParentNode();
Element pieces = (Element) piece.getParentNode();
out.println(
(pieces.getTagName().equals("WHITEPIECES")
? "White " : "Black ")
+ piece.getTagName().toLowerCase() + ": "
+ position.getAttribute("COLUMN")
+ position.getAttribute("ROW"));
}
return;
}
Conclusiones
SAX es til cuando tenemos limitaciones
de memoria o para desarrollar
rpidamente con documentos sencillos.
DOM ofrece el mximo control y
flexibilidad.
Son herramientas bsicas.
En Java: SUN o Xerces (xml.apache.org).
37
Otras APIs
Implementaciones propias de cada
lenguaje.
En Java:
JDom (http://www.jdom.org).
Dom4J (http://www.dom4j.org).
XOM (http://www.cafeconleche.org/XOM/).
Una comparativa:
http://www.dom4j.org/compare.html
XML Binding
Qu es?.
38
XML Binding
Tres elementos
caractersticos.
Generacin de clases.
clases.
Marshalling /
unmarchalling.
unmarchalling.
Vinculacin de
Schemas.
XML Binding
Herramientas (en java).
JAXB http://java.sun.com/xml/jaxb/
Castor http://castor.exolab.org
XMLBeans http://xmlbeans.apache.org
http://xmlbeans.apache.org//
Una buena comparativa:
https://bindmark.dev.java.net/currenthttps://bindmark.dev.java.net/current-results.html
La mejor: http://www.manageability.org/polls/toolhttp://www.manageability.org/polls/tool-forfor-xmlxml-binding
39
XMLBinding. Herramientas.
Castor
http://www.castor.org/
Xgen
http://www.commerceone.com/developers/docso
apxdk
Breeze
http://www.breezefactor.com/
Zeus
http://zeus.objectweb.org/
XMLBeans
http://xml.apache.org/xmlbeans/
Un ejemplo.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns="Faenor.Global"
targetNamespace="Faenor.Global"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="GLOBAL">
<xs:complexType>
<xs:all>
<xs:element name="ROOM" type="xs:string"/>
<xs:element name="WHOAMI" type="xs:string"/>
<xs:element name="INTRO" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema> <?xml version="1.0" encoding="ISO-8859-1"?>
<GLOBAL xmlns="Faenor.Global"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.imsproject.org/xsd/imscp_rootv1p1p2
http://www.imsproject.org/xsd/imscp_rootv1p1p2.xsd
http://www.imsproject.org/xsd/ims_md_rootv1p1
http://www.imsproject.org/xsd/ims_md_rootv1p1.xsd">
<ROOM>1</ROOM>
<WHOAMI> Eres Korbe, el joven hijo de unos granjeros.
</WHOAMI>
<INTRO> Has elegido un magnifico da soleado de primavera para
emprender tu camino. </INTRO>
</GLOBAL>
40
Un ejemplo.
//// This file was generated by the JavaTM Architecture for XML
Binding(JAXB) Reference Implementation, v1.0 package
Adventure.XMLData.Global.impl;
<xs:all>
ac\u00ed\u0000\u0005sr\u0000\'com.sun.msv.grammar.trex.ElementP
<xs:element name="ROOM" type="xs:string"/>
attern\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0
<xs:element name="WHOAMI" type="xs:string"/>
000\u0001L\u0000\tnameClasst\u0000\u001fLcom/sun/msv/grammar/Na
meClass;xr\u0000\u001ecom.sun.msv.grammar.ElementExp\u0000\u000
<xs:element name="INTRO" type="xs:string"/>
0\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0002Z\u0000\
</xs:all>
u001aignoreUndeclaredAttributesL\u0000\fcontentModelt\u0000 ");
</xs:complexType>
</xs:element>
public java.lang.String ____jaxb_ri____getNamespaceURI() {
</xs:schema>
return "Faenor.Global";
}
public java.lang.String ____jaxb_ri____getLocalName() {
return "GLOBAL";
}
private final static java.lang.Class
PRIMARY_INTERFACE_CLASS() {
return Adventure.XMLData.Global.GLOBAL.class;
}
//.
}
Un ejemplo
Global obj;
// 1
JAXBContext jc = JAXBContext.newInstance("Adventure.XMLData.Global");
// 2
Unmarshaller u = jc.createUnmarshaller();
// 3
obj = (Global)u.unmarshal(new FileInputStream(path+name+".xml"));
41
Serializadores
Hay quien los incluye dentro de las
herramientas de Binding.
Su objetivo es el mismo pero sin vnculos
con Schemas.
No generan el cdigo.
Son ms rpidos de aplicar pero menos
potentes.
42
Serializadores
XStream http://xstream.codehaus.org
http://xstream.codehaus.org//
/commons/betwixt/
Betwixt http://jakarta.apache.org
http://jakarta.apache.org/commons/betwixt/
Probablemente haya alguno ms.
Un ejemplo
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>
43
XSLT. Transformaciones.
XPath. Lenguage de expresiones.
XSL-FO. Presentaciones.
44
Un ejemplo
<source>
<title>XSL</title>
<author>Alan</author>
</source>
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/">
<h1>
<xsl:value-of select="//title"/>
</h1>
<h2>
<xsl:value-of select="//author"/>
/h2>
</xsl:template>
</xsl:stylesheet>
<h1>XSL</h1>
<h2>John Smith</h2>
Aplicaciones
Generar pginas web.
Convertir unas estructuras XML en otras
(compatibilidad).
Crear PDFs.
Crear cdigo.
45
Plantillas
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="bold">
Se aplica sobre el elemento <bold>
<p> <b>
<xsl:value-of select="."/>
</b> </p>
Escribe el valor de este elemento.
</xsl:template>
</xsl:stylesheet>
<p>
<b> Frase </b>
<p>
Plantillas
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="bold">
Expresiones XPath
<p> <b>
<xsl:value-of select="."/>
</b> </p>
</xsl:template>
</xsl:stylesheet>
46
XPath
Lenguaje de expresin utilizado para
referenciar nodos de informacin en un
conjunto de datos XML.
Tambin es un estndar del W3C.
Similar a expresiones regulares para
nodos XML.
XPath. Ejemplos.
/html/
html/body/h1
body/h1
//h1
count(//libro)
count(//libro)
//libro[autor
"]
//libro[autor = "Hunter
"Hunter"]
//libro[@ao
//libro[@ao > 1999]
(i | b)
Devuelve todos los nodos <i> o todos los nodos <b> que
encuentre en el nodo contexto. Por defecto el nodo contexto es
el nodo raz del documento.
47
XPath. Ejemplos.
doc("
libros.xml")/
")/bib
bib/lib
/lib
doc("libros.xml
ro/autor[1]
//key
[. = "Tiempo total"]
//key[.
(//key
)[1]/texto
(//key)[1]/texto
Ejercicio.
<bib>
<libro ao="1994">
<titulo>TCP/IP Illustrated</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio> 65.95</precio>
</libro>
<libro ao="1992">
<titulo>Advan Programming for Unix environment</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
....
</bib>
48
XQuery
Una evolucin de XPath.
Podemos considerar a XQuery como el
SQL para XML.
D a to s X M L
< b ib >
XQuery.
< a u to r>
< p re c io >
< n o m b re >
For y Let
C re a n la s tu p la s
W h e re
F iltra la s tu p la s
O rd e r b y
O rd e n a la s tu p la s
R e tu rn
T ra n fo rm a la s tu p la s
R e su ltad o X M L
< b ib >
< a u to r>
< p re c io >
< n o m b re >
49
XQuery
Tres aplicaciones principales.
Ejemplo
for $b in doc("libros.xml")//libro
where $b/@ao = "2000"
return $b/titulo
For y Let
Where
Order by
No
Return
50
Ejemplo
for $b in doc("libros.xml")//libro
let $c := $b/autor
return
<libro>{ $b/titulo,
<autores>{ count($c) }</autores>}
</libro>
<libro>
<titulo>TCP/IP Illustrated</titulo>
<autores>1</autores>
</libro>
<libro>
<titulo>Advanced Programming in the UNIX Environment</titulo>
<autores>1</autores>
</libro>
Ejemplo
<libro ao="1994">
<titulo>TCP/IP Illustrated</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio> 65.95</precio>
</libro>
<libro ao="1992">
<titulo>Programming for Unix env.</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
<html><head><title> </title>
<body>
<table>
<tr><td><I>TCP/IP Illustrated</I></td></tr>
<tr><td><I>Advan Programming for Unix environment</I></td></tr>
<tr><td><I>Data on the Web</I></td></tr>
<tr><td><I>Economics of Technology for Digital TV</I></td></tr>
</table>
</body>
</head></html>
51
XQuery. Enlaces.
XML Query Use Cases.
http://www.w3.org/TR/xmlquery-use-cases
XQuery 1.0: An XML Query Language.
http://www.w3.org/TR/XQuery/
XML Path Language (XPath) 2.0.
http://www.w3.org/TR/xpath20/
XQuery. Herramientas.
XQEngine.
http://xqengine.sourceforge.net/
BumbleBee.
http://www.XQuery.com/bumblebee/
Qexo.
http://www.gnu.org/software/qexo/
Qizx/open.
http://www.xfra.net/qizxopen/
Saxon.
http://saxon.sourceforge.net/
52
Un ejemplo de cdigo
import
import
import
import
import
com.fatdog.xmlEngine.ResultList;
com.fatdog.xmlEngine.XQEngine;
com.fatdog.xmlEngine.exceptions.*;
javax.xml.parsers.*;
org.xml.sax.XMLReader;
Otros
Existen muchas ms herramientas para
trabajar con XML.
53