Você está na página 1de 240

XML AVANZADO

XML, DTD, SCHEMA


Introducción
 XML es un lenguaje de marcas generalizado

 Texto Puro

 Sin Marcas existe sólo presentación de


contenido

 Permiten separar el contenido de la


presentación
HTML
 Uno de los más exitosos lenguajes de
marcas

 Diseñado especialmente para


presentación

 No considera estructura de los datos


en la página
XML
 Es un Standard

 No es un Standard aislado, incluye


otras tecnologías de vinculación,
consulta y transformación de
documentos

 Los documentos o instancias están


formados por elementos
XML
 Una definición estricta

 Una definición orientada al Web

 Una Definición Orientada a Datos


XML
 Dos conceptos importantes

 BIEN FORMADO

 VÁLIDO
XML BIEN FORMADO
 Un único elemento raiz

 Apertura y cierre de elementos

 Correcta anidación de elementos

 Sensitivo a mayúsculas y minúsculas


XML BIEN FORMADO
<universidad>
<carrera>
Educación Básica
</carrera>
<listaAlumnos>
<alumno>
<nombre>Nombre de alumnos 1</nombre>
</alumno>
<alumno>
<nombre>Nombre de alumnos 2</nombre>
</alumno>
</listaAlumnos>
</universidad>
XML VÁLIDO
 Es un documento bien formado

 Responde a una definición


 DTD
 ESQUEMA
DTD Ejemplo
 Se posee una colección de películas o
films
 Cada Film tiene un nombre y un
director
 Los nombres de los directores son
texto puro

<!ELEMENT film_list (film*)>


DTD Ejemplo
 * : Cero o más ocurrencias
 + : una o más ocurrencias
 ? : cero o una ocurrencia
Ejemplo

<!ELEMENT film_list (film*)>


<!ELEMENT film (name,director+)>
Contenido Texto
 El contenido de texto se especifica
con la palabra #PCDATA.
 Se puede contener cualquier texto, a
excepción de elementos, en tal caso
el elemento se considera mixto.
Ejemplo

<!ELEMENT film_list (film*)>


<!ELEMENT film (name,director+)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT director(#PCDATA)>
#PCDATA
 Parsed Character Data
 No se trata ni de strings, ni de
números, no hay restricciones de
número de palabras , texto, tipo de
datos, etc.
Declaración de Atributos
Ejemplo:

<!ATTLIST film
Identifier ID #REQUIRED>
Declaración de Atributos

<!ATTLIST film
identifier ID #REQUIRED
classification (G|PG|PG13|R|NC17) #IMPLIED>
Opciones de Atributos
 #REQUIRED : establece que es
obligatoria la incorporación del
atributo en el elemento

 #IMPLIED : Establece que es opcional


la inclusión del atributo en el
elemento.
Valores por defecto
 Se pueden establecer valores por
defecto a los atributos

 Ejemplo :
<!ATTLIST film
identifier ID #REQUIRED
classification (A|B|C) “A”>
Ejercicios
 Definir DTD con libreta de notas de
un alumno (considerar información de
profesor jefe, asignaturas, notas,
fechas relacionadas)
 Crear un documento XML válido
 Probar con herramientas de
validación y visualizar en browser
Entidades
 A veces es práctico poder reutilizar
trozos de XML, para eso se puede
utilizar el concepto de entidad.

 Las entidades se pueden utilizar en


DTDs, como también, en Documentos
XML
Ejemplo

<!ENTITY contenido
“<firstname>Juan</firstname>
<lastname>Perez</lastname>”>
Utilización de Entidades
 Se utiliza el nombre de la entidad con
el prefijo & y con ; de final
 Ejemplo:
<client>
&contenido;
</client>
Modularización
 Se pueden modularizar las entidades
en un Documento XML externo.

 A ENTITY se le acompaña de SYSTEM


para especificar la “entidad externa”
Ejemplo

<!ENTITY foo SYSTEM “foo.xml”>


DTDs en Profundidad
 Declaración de Elementos
 <!ELEMENT nombre contenido>
EMPTY
ANY
(#PCDATA)
(#PCDATA|foo|bar)*
(foo,bar(some|otro)+)?
EMPTY
 Permite establecer el Elemento como
vacío
 <!ELEMENT punto_cartesiano
EMPTY>
 <punto_cartesiano/>
ANY
 Demuestra un diseño mediocre
 Se utiliza sólo cuando necesite probar
los DTDs sin tener que completar
todo el contenido
 <!ELEMENT foo ANY>
(#PCDATA)
Ejemplo:

 <!ELEMENT emphasis (#PCDATA)>


Contenido Mixto
 <!ELEMENT parrafo (#PCDATA|
emphasis|importante)*>
 Se puede encontrar elementos y
texto en el contenido
Elementos hijos solamente
 Las “,” representan secuencialidad y
orden
 Los “|” significan escoger entre uno u
otro elemento
 Se pueden hacer combinaciones
Ejemplos:
<!ELEMENT x (a,b,c)>

<!ELEMENT y (a|b|c)

<!ELEMENT x ((y|z),v,(y|z)>
<!ELEMENT y EMPTY>
<!ELEMENT z EMPTY>
<!ELEMENT v EMPTY>
Consideración
 Cuando el contenido es mixto, no es
posible establecer el orden de los
elementos.
Consideraciones
 No es posible hacer validaciones
respecto del contenido de un
#PCDATA
Declaración de Lista de
Atributos
 <!ATTLIST nombre_elemento
tipo_atributo
declaracion_por_defecto>
Tipo Atributo
 Tipo String
 CDATA
 Tipos Tokenizados
 ID
 IDREF
 IDREFS
 NMTOKEN
 NMTOKENS
 ENTITY
 ENTITIES
Decalaracion_por_defecto
 Requerido
 #REQUIRED
 No Requerido
 #IMPLIED
 Valor atributo por defecto
 “valor”
 Valor fijo
 #FIXED “valor”
ID y IDREF
 ID identifica en forma única al
elemento
 IDREF, permite establecer referencia
a un elemento existente.
Ejemplo
<!ELEMENT artist
(name,bio,influenced*)>
<!ATTLIST artist
id ID #REQUIRED>
<!ELEMENT influenced EMPTY>
<!ATTLIST influenced
by IDREF #REQUIRED>
NMTOKEN y NMTOKENS
 NMTOKEN, permite valores sin
espacios entre ellos (o sea una
palabra)
 NMTOKENS, permite varias palabras
separadas por espacios
ENTITY y ENTITIES
 ENTITY, corresponde a un texto o a
otra entidad previamente declarada
 ENTITIES, es similar a NTOKENS, los
valores se separan por espacios
Ejemplo
<!NOTATION jpeg PUBLIC “JPEG”>
<!ENTITY unicornio SYSTEM http://
www.thefactory.com/unicorn.jpg NDATA
jpeg>
<!ELEMENT animalmitologico (#PCDATA)>
<!ATTLIST animalmitologico
image ENTITY #REQUIRED>
Entidades

 Entidades Parseables (en doc xml)


<!ENTITY reemplazo “texto de
reemplazo”>
 Entidades no Parseables

<!ENTITY % texto “#PCDATA”>


NameSpaces
Espacio de Nombres

Introducción
Definición
 Un espacio de nombres XML es un
conjunto de nombres, identificados por una
referencia URI, que se utilizan en
documentos XML como tipos de elemento y
nombres de atributo

 Un URI es un identificador global único

 No se trata de utilizar un URI como enlace,


ni tiene por qué tener contenido, los URI
sólo se utilizan para que el nombre sea
único
Definición
 Permiten eliminar ambigüedades y solucionar
problemas que se producen en documentos

 En un mismo documento existen palabras con el


mismo nombre, pero con diferentes significados y
espacios semánticos

 <pais nombre=“Chile”>
<capital>Santiago</capital>
</pais>

 <inversion>  
<capital>1000000</capital>
</inversion>
Problema
<inversiones>
<pais nombre=“Chile”>
<capital>Santiago</capital>
<capital>1000000</capital>
</pais>
</inversiones>
Solución

<bolsa:inversiones
xmlns:bolsa=“http://www.bolsacomercio.cl”
xmlns:geografia=“http://www.geograf.com”>
<geografia:pais geografia:nombre=“Chile”>
<geografia:capital>Santiago</geografia:capital
>
<bolsa:capital>1000000</bolsa:capital>
</geografia:pais>
</bolsa:inversiones>
Uso
 Los espacios de nombres se aplican tanto a
atributos como a elementos.

 Para definir un espacio de nombres al que


pertenece un elemento, es necesario añadir
un atributo a la definición de elemento,
donde el nombre del atributo sea xmlns
("xml namespace") y el valor puede ser una
cadena cualquiera, aunque por convención
suelen ser URLs.
Otro ejemplo
<?xml version=“1.0”?>
<cd_review>
<author>Clark Evans</author>
<score points=“8” out of=“10”/>
Este album refleja...bla bla bla...
<author>Lamb</author> es uno ..
<cd id=“987987”>
<title xml:space=“preserve”>Undone</title>
<author>Lamb</author>
<producer>Moby</producer>
<year>2000</year>
<track number=“1”>...</track>
<track number=“2”>...</track>
</cd>
</cd_review>
¿Cómo utilizarlos?
 Incluir namespaces en sus
documentos es muy sencillo
1. Declarar el namespace y hacer uso
de nombres calificados
2. Luego utilizar los namespaces en el
documento
Ejemplo Paso 1
<?xml version=“1.0”?>
<review:cd_reviews xmlns:review=“
http://www.cdreviews.net.df/cdrev”
xmlns:cd=“
http://www.cdreviews.net.df/cd/”>
Ejemplo Paso 2
<?xml version=“1.0” standalone=“yes”?>
<review:cd_reviews xmlns:review=“http://www.cdreviews.net.df/cdrev”
xmlns:cd=“http://www.cdreviews.net.df/cd/”>
<review:author>Matthew Jhonson</review:author>
<review:score points=“8” out_of=“10”/>
Este es un album que....<cd:author>Lamb</cd:author> es uno de ....
<cd:cd id=“786876”>
<cd:title xml:space=“preserve”>Undone</cd:title>
<cd:producer>Moby</cd:producer>
<cd:year>2000</cd:year>
<cd:track number=“1”>...</cd:track>
<cd:track number=“2”>...</cd:track>
</cd:cd>
</review:cd_reviews>
Declaración
 xmlns:prefijo=“nombre”
 Prefijo corresponde a cualquier
conjunto de caracteres exceptuando
el “:”
 El nombre debe ser una URI válida
Ejemplos
<someElement xmlns:panda=“
http://www.thefactory.com/panda”>
<!– aqui pueden ir todos los subs
elementos que utilicen el prefijo
panda 
</someElement>
Ejemplos 2
<xsl:transform xmlns:xsl=http://
www.w3.org/1999/XSL/Transform
version=“1.0” id=“FAA-
XLink2HTML”>
Nombres Calificados
 Los nombres calificados pueden
tomar dos formas
 Una cadena de caracteres que contiene
un prefijo y un nombre (denominado
parte local) separado por el “:”.
xslt:x ó foo:y
 Como parte local
myAtrribute
XML Schema

Definición de Documentos
Schema
 Al igual que las DTDs, describen el
contenido y la estructura, pero de
una forma más precisa.

 Indican tipos de datos, número


mínimo y máximo de ocurrencias y
otras características más específicas.
Schema
 Schema vence las limitaciones de los DTDs

 Los DTD no pueden ser representados via


DOM. Al ser una expresión definida en XML
pueden ser leidos vía DOM e inclusive ser
parseados a través de eventos
Schema
 Schema, permite definir estructuras más
complejas que en los DTDs

 Se puede definir tipos de datos específicos,


por ejemplo no sólo NMTOKEN , #PCDATA
o CDATA.
Schema
 DOM XML Schema, se puede manipular
de manera sencilla via VBScript o en
Páginas ASP o JSP, u otra alternativa de
scripting

 Provee la capacidad de establecer


elementos con relaciones
Schema
 Documentos son escritos en XML

 Mejoran considerablemente la curva de


aprendizaje, ya que deben estar bien
conformados
Schema
 Los elementos se pueden definir con
tipos de datos específicos

 XML Schema, es un mecanismo para


construir tipos de datos complejos,
declarando dentro de los elementos
otros tipos
Schema … ejemplo
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:complexType name="tvguide">
<xsd:sequence>
<xsd:element name="program" type="Show" minOccurs="0" maxOccurs="0"/>
<xsd:element name="slot" type="TVSlot" maxOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Show">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="producer" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="show-id" type="xsd:ID"/>
<xsd:attribute name="first-aired" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="TVSlot">
<xsd:sequence>
<xsd:element name="day" type="xsd:date"/>
<xsd:element name="begin" type="xsd:time"/>
<xsd:element name="end" type="xsd:time"/>
</xsd:sequence>
<xsd:attribute name="show" type="xsd:IDREF"/>
</xsd:complexType>
</xsd:schema>
Schema
 Tipos
 Los tipos en XML Schema están divididos
en dos categorías
 Simples
 Complejos
Schema
 Tipos simples
 Sólo pueden contener caracteres
 No pueden contener elementos
Schema
 Tipos simples

<xsd:element name=“Adobe-Key”>
<xsd:simpleType>
<xsd:restriction base=“xsd:string”>
<xsd:pattern value=“\d{7}[A-Z]{3}\d{3}/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Schema
 Tipos complejos
 Pueden contener un conjunto y
combinaciones de contenido con
elementos, carácter y atributos
Schema
 Tipo complejo
<xsd:complexType name”Show”>
<xsd:sequence>
<xsd:element name=“name” type =“xsd:string”/>
<xsd:element name=“description” type=“xsd:string”/>
<xsd:attribute name=“show-id” type=“xsd:ID”/>
<xsd:attribute name=“first-aired” type=“xsd:date”/>
</xsd:sequence>
</xsd:complexType>
Schema
 Declaración de Schema

<xsd:schema xmlns:xsd=“http://www.w3.org/1999/
XMLSchema”/>
Schema
 Vacío de DTD cubierto por XSML
Schema

 <!ELEMENT sw-key (#PCDATA)>

 <sw-key>2222-IAG-32123</sw-key>
Schema
 XML Schema tipos delimitados

<xsd:element name=“vanilla-sw-key” type=“xsd:string”/>


<xsd:element name=“vanilla-sw-key” type=“xsd:string”/>
<xsd:pattern value=“/d{4}-[A-Z]{3}-/d{5}”/>
</xsd:element>
Schema
 Expresiones regulares
 Se utilizan en la propiedad value del
elemento pattern
Schema
 Ejemplo expresiones regulares
 A*x x,ax,aax,aaax
 A?x ax,x
 A+x ax,aax,aaax
 (a|b)+x ax,bx,aax, abx, bax, aaax
 (ab)[2]x Ababx
Schema
 Expresiones regulares
 * cero o más ocurrencias
 + 1 o más ocurrencias
 () agrupación subexpresión
 | uno u otro
 [ ] intervalo
 [^ ] no considera intervalo
 . Cualquier caracter exceptuando salto de línea
 {}n repetición
Schema
 Expresiones regulares
 \s un carácter de espacio en blanco
(espacio o tabulación)
 \S cualquier carácter no espacio
 \d cualquier carácter numérico
 \D cualquier carácter que no sea dígito
 \w cualquier carácter alfanumérico (letra
número o carácter de subrayado)
Schema
 Expresiones regulares, ejemplo

 Validación de mail
 \S+@\S+\.\S+
 Algún sitio web
 w{3}\.\S\.cl
Schema
 Especificación de restricciones

 A través del elemento restriction más


otros sub-elementos, es posible
establecer valores específicos o rangos
de valores para un tipo definido
Schema
 Restriction – Min y Max

<xsd:simpleType name=“javaShort”>
<xsd:restriction base=“xsd:integer”>
<xsd:minInclusive value=“-32767”/>
<xsd:maxEnclusive value=“32769”/>
</xsd:restriction>
</xsd:simpleType>
Schema
 Restriction - precision

<xsd:simpleType name=“decimalStature>
<xsd:restriction base=“xsd:decimal”>
<xsd:precision value=“2”/>
</xsd:restriction>
</xsd:simpleType>
Schema
 Restriction - enumeration

<xsd:simpleType name=“europeanCountry”>
<xsd:restriction base=“xsd:string”>
<xsd:enumeration value=“Lithuania”/>
<xsd:enumeration value=“Germany”/>
<xsd:enumeration value=“France”/>
</xsd:restriction>
</xsd:simpleType>
Schema
 Tipos anónimos
 Con el fin de no estar declarando cada
elemento que se establecerá en la
instancia de un documento xml, se
puede definir tipos generales para ser
especificados en elementos en particular
Schema
 Tipos anónimos

<xsd:complexType name=“basicMovie”>
<xsd:sequence>
<xsd:element name=“title” type=“xsd:string”>
<xsd:element name=“director” type=“xsd:string”>
<xsd:element name=“release” type=“xsd:date”>
</xsd:sequence>
<xsd:attribute name=“release” type=“xsd:date”/>
</xsd:complexType>

<xsd:element name=“movie” type=“basicMovie”/>


Schema

 Especificando Opciones y Sequencias en


Modelos de Contenido

 Con el propósito de establecer restricciones en


contenido de un elemento complejo se puede hacer
uso de especificación de sequencias y opciones.
Schema
 Elemento - choice
 Es equivalente al contenido en DTD de
(A|B|C)
 Espefica que sólo uno de sus hijos puede
figurar en el contenido
Schema
 Elemento choice

<xsd:complexType name=“foo”>
<xsd:choice>
<xsd:element name=“A” type=“AsType”/>
<xsd:element name=“B” type=“BsType”/>
<xsd:element name=“C” type=“CsType”/>
</xsd:choice>
</xsd:complexType>
Schema
 Contenido mixto

<xsd:element name=“paragraph”>
<xsd:complexType mixed=“true”>
<xsd:choice>
<xsd:element name=“technical-review” type=“xsd:string”/>
<xsd:element name=“review” type=“xsd:string”/>
</xsd:xhoice>
</xsd:complexType>
</xsd:element>
Schema
 Cardinalidades
 Las cardinalidades se pueden especificar
por minOccurs y maxOccurs

<xsd:complexType>
<xsd:sequence>
<xsd:atribute name=“track” type=“xsd:string”
minOccurs=“1” maxOccurs=“*”/>
</xsd:sequence>
</xsd:complexType>
Schema
 Reutilización de Atributos elementos –
Grupos Nombrados

 Es muy similar a declarar entidades en


DTD y luego reutilizarlas
Schema
 Grupo nombrado
 No es más que un nombre asignado a un
conjunto de declaraciones choice,
sequence u all.
Schema
 Grupo nombrado

<xsd:group name=“products”>
<xsd:choice>
<xsd:element name=“soap” type=“SoapType”/>
<xsd:element name=“fruit” type=“FruitType”/>
<xsd:choice>
<xsd:element name=“heineken” type=“BeerType”/>
<xsd:element name=“quilmes” type=“BeerType”/>
<xsd:element name=“budweiser” type=“BeerType”/>
</xsd:choice>
</xsd:choice>
</xsd:group>
Schema
 Aplicación de Grupo Nombrado

<xsd:complexType name=“grocerieList-
draft”>
<xsd:group ref=“products”/>
<xsd:complexType>
Schema
 Anotaciones
 A través del tag annotation y
documentation se pueden agregar notas
de diseño o textos explicativos para un
elemento o tipo definido
Schema
 Ejemplo - Anotaciones

<xsd:complexType name=“grocerieList-draft”>
<xsd:annotation>
<xsd:documentation> Reusing a list of
beers</xsd:documentation>
</xsd:annotation>
<xsd:group ref=“products”/>
<xsd:complexType>
Schema
 Creando Una Instancia XML

<book
xmlns:xsi="http://www.w3.org/2000/10/X
MLSchema-instance"
xsi:noNamespaceSchemaLocation="D:\boo
ks.xsd">
<title/>
<author/>
</book>
Schema
 Hacer schema de DTD construido en
ejercicio anterior
XHTML
XHTML
 Introducción
 XHTML 1.0 es una adaptación de HTML
4.01 al lenguaje XML
 XHTML 1.1 pretende modularizar XHTML.
 XHTML 2.0 (Borrador) supondrá un
cambio muy importante respecto de las
anteriores versiones de XHTML.
XHTML
 Características
 Versión más estricta y limpia de HTML
 Objetivo  remplazar a HTML
 HTML  limitantes de uso con
herramientas basadas en XML
 XHTML extiende HTML
 XHTML
 Combina HTML  diseño
 Combina XML  describir datos
 Más estricto
XHTML
 Necesidad

 Nuevos dispositivos
 Interpretación independiente del dispositivo de
donde se accede

 Incluye otros lenguajes como MathMl,


SMIL, SVG

 Mathematical Markup Language


 Synchronized Multimedia Integration Language
 Scalable Vector Graphics
XHTML
 Mathematical Markup Language
 Aplicación XML para describir notación
matemática y capturar estructura y
contenido.
XHTML
 Synchronized Multimedia Integration
Language
 Lenguage basado en XML que permite a
los autores escribir presentaciones
multimedia interactivas
XHTML
 Scalable Vector Graphics
 Lenguaje para describir gráficos en dos
dimensiones y aplicaciones gráficas en
XML
XHTML
 Documento XHTML
 Los documentos deben estar bien
formados
 Los nombres de atributos y elementos
deben ir en minúsculas
 Los elementos que no estén vacios
necesitan etiquetas de cierre
 Los valores de las etiquetas deben ir
siempre entre comillas
XHTML
 Origen
 XHTML es muy similar al lenguaje HTML.
 XHTML adaptación HTML al lenguaje
XML.
 HTML descendiente de SGML
 XML descendiente de SGML
 XHTML descendiente XML
XHTML
 Origen
XHTML
 Sintaxis XHTML
 HTML original era muy permisivo en su
sintaxis
 Etiquetas podían escribirse en mayúsculas,
en minúsculas e incluso combinando
mayúsculas y minúsculas.
 El valor de los atributos de las etiquetas se
podían indicar con y sin comillas (“).
 Orden en el que se abrían y cerraban las
etiquetas no era importante.
XHTML
 Resultado flexibilidad HTML
 Puede parecer un aspecto positivo
 Resultado final son páginas con código
HTML desordenado, difícil de mantener y
muy poco profesional.
 XHTML soluciona problemas
añadiendo normas en forma de
escribir las etiquetas y atributos.
XHTML
 5 normas
 Las etiquetas se tienen que cerrar de
acuerdo
Ejemplo correcto (XHTML):
<p>Este es un párrafo con <a>un
enlace</a></p>
Ejemplo incorrecto (HTML):
<p>Este es un párrafo con <a>un
enlace</p></a>
XHTML
 5 normas
 Nombres de etiquetas y atributos se
escriben en minúsculas:
Ejemplo correcto (XHTML):
<p>Este es un párrafo con <a href="http://www.google.com">un
enlace</a></p>
Ejemplo incorrecto (HTML):
<P>Este es un párrafo con <A HREF="http://www.google.com">un
enlace</A></P>
XHTML
 5 normas
 El valor de los atributos siempre se
encierra con comillas:
Ejemplo correcto (XHTML):
<p>Este es un párrafo con <a href="http://www.google.com">un
enlace</a></p>
Ejemplo incorrecto (HTML):
<p>Este es un párrafo con <a href=http://www.google.com>un
enlace</a></p>
XHTML
 5 normas
 Los atributos no se pueden
comprimir: (tipo de atributos no
habitual)
Ejemplo correcto (XHTML):
<dl compact="compact">...</dl>
Ejemplo incorrecto (HTML):
<dl compact>...</dl>
XHTML
 5 normas
 Todas las etiquetas deben cerrarse
siempre:
Ejemplo correcto (XHTML):
<br/>
Ejemplo incorrecto (HTML):
<br>
XHTML
 Elementos y etiquetas imprescindibles en
un XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
<head>
<title>...</title>
...
</head>
<body>
...
</body>
</html>
XHTML
 Doctype puede ser también

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
SOAP
 Simple Object Access Protocol

 Protocolo simple de acceso a objetos

 Estándar diseñado para mejorar la


interoperatividad entre plataformas
utilizando WEB y XML
SOAP
 Evolución
 Desde
 Sitios estáticos
 Hasta
 Contenido personalizado para servicios a
usuarios
 Para estos servicios entran en juego un
sinnúmero de componentes en distintos
computadores  Sistemas Distribuidos
SOAP
 Los sistemas distribuidos utilizan dos
modelos de comunicación:
 Paso de mensajes
 Mensajes de petición/respuesta
SOAP
 Paso de mensajes
 Permite que los mensajes se envíen en
cualquier momento (asincrono).
 La aplicación que envía el mensaje
continúa una vez que lo ha enviado
SOAP
 Modelo petición/respuesta
 La petición y la respuesta están
emparejados
 Sistema síncrono
 La aplicación envía la petición y espera
recibir respuesta antes de continuar
 Ejemplo llamada de procedimiento
remoto (RPC) de un objeto de un
computador a otro
SOAP
 Modelo petición/respuesta
 Se usa habitualmente para permitir que
los componentes de distintos servidores
puedan comunicarse usando RPC
SOAP
 Modelo petición/respuesta
 Algunos estándares
 DCOM (Distributed Component Object
Model)  Microsoft
 IIOP (Internet inter-orb protocol)  ORB
(Object request broker) CORBA
 Estos tienen el problema de ser poco
natural , se requiere saber de antemano el
estándar utilizado
SOAP
 Modelo petición/respuesta
 Algunos estándares
 DCOM , CORBA
 Estos tienen el problema de ser poco
natural , se requiere saber de antemano el
estándar utilizado
 No hay inconveniente si se trabaja en
sistema interno
 Complicación ocurre cuando se trabaja en
Internet o Extranet
SOAP
 SOAP y MODELO PETICIÓN RESPUESTA
 SOAP no introduce conceptos nuevos

 Está construido sobre la Tecnología


existente
 Independiente de la plataforma

 Utiliza http como transporte


SOAP
 SOAP y MODELO PETICIÓN RESPUESTA
 http puede atravesar servidores de
seguridad

 Medio más sencillo para transportar


mensajes a cualquier computador

 Es probable que SOAP evolucione a otros


protocolos en el futuro
SOAP
 Paquete SOAP
 Contiene información que se puede
utilizar para invocar a un método
 La especificación SOAP no define la
forma de llamar al método
 No maneja:
 La recolección de basura distribuida
 Seguridad de tipos
SOAP
 Paquete SOAP
 ¿Qué permite?
 PASO DE PARÁMETROS Y COMANDOS
ENTRE CLIENTES Y SERVIDORES HTTP
 En forma independiente de la plataforma
 En forma independiente de aplicaciones en
el cliente y el servidor
SOAP
 Paquete SOAP
 Los parámetros y los comandos se
codifican usando XML
SOAP
 SOAP y ENCABEZADO HTTP
 HTTP  Dos tipos de encabezados
 Encabezados de petición
 Encabezados de respuesta
 Al visitar una URL el navegador crea una
petición y la envía al servidor WEB
 Los servidores de HTTP generan una
respuesta cuando reciben las peticiones
de los clientes
SOAP
 SOAP y ENCABEZADO HTTP
 Cuando se crea un mensaje SOAP se
agrega información adicional a mensajes
estándar
SOAP
 SOAP, CABECERA DE PETICIÓN
 Mensaje típico HTTP en petición SOAP
que se envía a servidor WEB

POST /Order HTTP/1.1


HOST: www.sitioweb.com
Content-Type: text/xml
Content-Length: nnnn
SOAPAction: “urn:sitioweb.com:PO#UpdatePO”
SOAP
 SOAP, CABECERA DE PETICIÓN

POST /Order HTTP/1.1


Método petición, URI petición, versión producto

GET: obtener información, POST: pasar información cliente a servidor

POST se puede enviar cualquier tipo de información

GET sólo cierto tipo de información

SE puede usar MPOST

Al trabajar con POST el URI corresponde al método que se va a invocar


SOAP
 SOAP, CABECERA DE PETICIÓN
HOST: www.sitioweb.com

URL del servidor al que se envía la petición


SOAP
 SOAP, CABECERA DE PETICIÓN
Content-Type: text/xml

Tipo de contenido, carga útil es XML


SOAP
 SOAP, CABECERA DE PETICIÓN
Content-Length: nnnn

Tamaño de la carga útil en byte


SOAP
 SOAP, CABECERA DE PETICIÓN
SOAPAction: “urn:sitioweb.com:PO#UpdatePO”

Objetivo de la petición SOAP


Espacio de nombres seguido por el nombre del método
SOAP
 SOAP, CABECERA DE PETICIÓN
POST /Order HTTP/1.1
HOST: www.sitioweb.com
Content-Type: text/xml
Content-Length: nnnn
SOAPAction:
“urn:sitioweb.com:PO#Updat
ePO”
SE ESTÁ LLAMANDO AL MÉTODO UPDATEPO del OBJETO Order
SOAP
 SOAP, CABECERA DE RESPUESTA

200 OK
Content-Type: text/plain
Content-length: nnnn

Contenido
SOAP
 SOAP, CABECERA DE RESPUESTA

200 OK
Código de estado y mensaje asociado (OK)
Content-Type: text/plain
Content-length: nnnn
SOAP
 MPOST
 Limita mensajes que llegan a través de
un servidor de seguridad o servidor
proxy
 Se define utilizando HTTP Extension
Framework
BIZTALK
 SOAP Interoperabilidad entre plataformas
 WEB y XML

 Framework extensión de especificación 1.1


de SOAP
BIZTALK
 Proporciona estructura para construir
aplicaciones que muevan datos
contenidos en documento soap a
través de fronteras

 Frontera  Punto en el que la


información pasa de un sistema a
otro
BIZTALK
 Frontera
 Ejemplo
 Dos empresas asociadas pueden tener sus
propios sistemas para procesar pedidos

 Paso de pedido de un sistema a otro 


Pedido pasa la frontera
BIZTALK
 Frontera
 Puede corresponder también a
movimientos entre plataformas con
Sistemas Operativos diferentes

 BISTALK  Estructura para el


intercambio entre plataformas diferentes
BIZTALK
 BIZTALK, permite afrontar

 Necesidad de estándar flexible y fácil de utilizar para:


 Especificar, empaquetar, publicar e intercambiar
información estructurada y no estructurada a través de
fronteras con XML
 Especificar, empaquetar, publicar e intercambiar reglas de
negocio

 Necesidad de aplicaciones de software intermedio


para comunicación en frontera

 Necesidad de estándar que proporcione detección de


errores y acuse recibo de información entre fronteras
BIZTALK
 BIZTALK no es estándar W3C

 El estándar es XML

 Objetivo de BIZTALK  facilitar


implementación de XML utilizando
estructura estandarizada
BIZTALK
 Documentos BIZTALK
 Es un mensaje SOAP

 Se compone de dos secciones


 Cabecera del documento BIZTALK
(información acerca del documento)
 Cuerpo (contiene la información real de la
transacción de negocio)
WEB Services
 Origen del problema que da origen a WEB
SERVICE

 Problemas de arquitectura internet (inclusive en


programación Cliente/Servidor tradicional)

 Programación monolítica
WEB Services
 Programación Monolítica

 Sitios con colección de servicios distintos


relacionados

 Combinación de servicios diferentes tras una


única interface de usuario. Por ejemplo en un
sitio único es posible:
 Revisar clientes
 Revisar facturas
 Revisar contabilidad
WEB Services
 Aunque el modelo actual es funcional
presenta los siguientes problemas
 Para crear una aplicación monolítica es necesario
utilizar tiempo y recursos
 Orientado, con frecuencia, a plataforma específica
 Difícil de extender
 Cada proyecto nuevo obliga a un proyecto de
integración.
 …
WEB Services
 …
 La integración de sitios WEB se limitan a link en
las páginas
 No es posible utilizar unidades lógicas de
programación (una función de negocio) en otras
aplicaciones
 Extracción de una parte de una aplicación WEB
(por ejemplo el valor de la UF de un sitio
financiero)  Obliga a explorar el sitio web
completo
WEB Services
 Servicios WEB
 Permiten la misma evolución de COM
 Pero la lógica de programación, en
este caso, está EN UN SERVIDOR
WEB
 Integración puede ser con cualquier
tipo de aplicación
WEB SERVICES
 Diferencia Servicio WEB/COM
 COM estándar binario específico de la
plataforma
 Servicio WEB basado en estándar abierto
 El estándar abierto permite interoperabilidad
con otras plataformas
WEB SERVICES
 XML
 Estándar raíz que define un servicio WEB
 XML se basa en texto
 Permite pasar por canales http normales
 Llamadas DCOM pueden ser abortadas
por cortafuegos
WEB SERVICES
 Identificar nichos de acción

 La institución necesita saber si un


alumno está egresado de enseñanza
media o no

 MINEDUC pone a disposición un servicio


web que reciba como parámetro un rut y
devuelva la condición académica
WEB SERVICES
 Identificar nichos de acción

 Una corredora de bolsa necesita saber el


valor bolsa de una acción

 La bolsa de comercio provee de un servicio web


que recibe como parámetro el instrumento y
devuelve el valor por acción
WEB SERVICES
 Identificar nichos de acción

 Un sistema de gestión requiere información


de sistemas auxiliares que están en
plataformas distintas

 Cada sistema auxiliar crea un servicio web que


recibe por ejemplo una cuenta auxiliar y
devuelve el detalle de sus movimientos
WEB SERVICES
 Identificar nichos de acción

 Una empresa de pago de servicios necesita


saber el monto a pagar por una cuenta

 Las empresas de servicios crean un servicio


web que devuelve el monto a pagar una vez
que se envía como parámetro el identificador de
la cuenta
WEB SERVICES
 Identificar nichos de acción

 Una consultora necesita saber si una


persona es o no profesional

 Las Universidades proveen un servicio web que


permite saber si una persona es o no titulada
de dicha casa de estudios
WEB SERVICES
 Los servicios WEB se diseñan sobre
la base de estándares abiertos

 Su arquitectura debe ser genérica

 Se basa en estándares,
principalmente WSDL y SOAP
WEB SERVICES
 WSDL

 Indica al cliente los métodos en un servicio web,


parámetros y valores de retorno
 SOAP

 Modo de codificar información (como los valores de


datos) antes de enviarla a o desde un servicio web.
También se utiliza http get y http post
 HTTP

 Protocolo sobre el que se lleva a cabo la


comunicación. Mensajes SOAP se llevan sobre canales
http
WEB SERVICES
 DISCO
 Estándar de descubrimiento (discovery).
Contiene vínculos a los servicios web, se
puede utilizar para una lista dinámica de
servicios web
 UDDI
 Concepto nuevo. Registro de negocio que
lista información sobre las empresas,
servicio web que proporcionan y URL
correspondientes
WEB SERVICES
 WDSL
 Lenguaje de descripción de servicio WEB
 Estándar basado en XML
 Especifica cómo se puede interactuar con
un servicio web
 Incluye detalle de parámetros y valores de
retorno
 Incluye protocolo utilizado para transmisión
por internet (SOAP, HTTP GET, HTTP POST)
WEB SERVICES
 WDSL
<?xml version="1.0" encoding="utf-8" ?>
- <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="obtienePromedio">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="n1" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="n2" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="n3" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="obtienePromedioResponse">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="obtienePromedioResult" type="s:double" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
WEB SERVICES
 …
- <wsdl:message name="obtienePromedioSoapIn">
<wsdl:part name="parameters" element="tns:obtienePromedio" />
</wsdl:message>
- <wsdl:message name="obtienePromedioSoapOut">
<wsdl:part name="parameters" element="tns:obtienePromedioResponse" />
</wsdl:message>
- <wsdl:portType name="MiServicioSoap">
- <wsdl:operation name="obtienePromedio">
<wsdl:input message="tns:obtienePromedioSoapIn" />
<wsdl:output message="tns:obtienePromedioSoapOut" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="MiServicioSoap" type="tns:MiServicioSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="obtienePromedio">
<soap:operation soapAction="http://tempuri.org/obtienePromedio" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
WEB SERVICES
 …
- <wsdl:binding name="MiServicioSoap12" type="tns:MiServicioSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="obtienePromedio">
<soap12:operation soapAction="http://tempuri.org/obtienePromedio" style="document" />
- <wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="MiServicio">
- <wsdl:port name="MiServicioSoap" binding="tns:MiServicioSoap">
<soap:address location="http://localhost:1029/WebSite15/MiServicio.asmx" />
</wsdl:port>
- <wsdl:port name="MiServicioSoap12" binding="tns:MiServicioSoap12">
<soap12:address location="http://localhost:1029/WebSite15/MiServicio.asmx" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
WEB SERVICES
 Los servicios web proveen el potencial
para simplificar el desarrollo WEB
 Los servicios web siguen el patrón de
programación OO
 Todo servicio web ES UNA CLASE que
ofrece un servicio
 Un cliente puede crear una instancia de
un servicio web y ser utilizada como
cualquier clase local
WEB SERVICES .NET
 .NET, por ejemplo, provee de las
herramientas necesarias para hacer todo el
proceso de interoperabilidad casi
transparente
 La clase WebService provee la
funcionalidad necesaria
 El servicio web no tiene interfaz gráfica, de
todos modos Visual Studio provee la
posibilidad de probar la funcionalidad
WEB SERVICES .NET
 Elementos de un servicio WEB
 Archivo de texto .asmx
 Clase de servicio web que herede de
System.Web.Services.WebServive
 Un método de servicio web marcado con
System.Web.Services.WebMethodAttribu
tte. Este método indica las funciones y
subrutinas que se DEJARÁN DIPONIBLES
EN INTERNET
WEB SERVICES .NET
 Un ejemplo

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class MiServicio
Inherits System.Web.Services.WebService

<WebMethod()> _
Public Function obtienePromedio(ByVal n1 As Integer, ByVal n2 As Integer,
ByVal n3 As Integer) As Double
Return (n1 + n2 + n3) / 3
End Function

End Class
WEB Services
 Un pequeño repaso de objetos
OBJETOS
 Orientación a Objetos
 Dos conceptos importantes
 Clase
 Objeto
 Clase  Definición de objetos
 Objetos  Instancias de clases
OBJETOS
 Conceptualización
 Un objeto es cualquier cosa abstracta o real
 Caracterizada por determinados atributos
 Características pueden ser manipuladas a través
de un sinnúmero de mensajes o métodos, éstos
determinan el comportamiento del objeto.
 Desde un punto de vista práctico, software, un
objeto es una colección de procedimientos y
datos.
OBJETOS
 Objeto de negocio
WEB Services
 DEMO CREACIÓN DE UN WEB
SERVICE
XPath

XML Tecnologías Asociadas


XPath
 Es un lenguaje no XML

 Es un lenguaje de consulta

 Cumple un rol fundamental en


tecnologías asociadas como XPointer,
Xlink y XSL
XPath
 Es considerada una de las
especificaciones fundamentales de
XML

 Es una especificación para


aplicaciones relacionadas con XML
XPath
 Objetivo:
 La meta de XPath es definir un lenguaje
que permita direccionar partes de
documentos XML
Componentes del lenguaje
 Direccionar a partes de XML

 Dar soporte a funciones y expresiones


de lenguaje
Contexto y Modelo de Datos

raíz

elemento
elemento
elemento

atributo text()
Localidades
 Las localidades en XPath son
similares a como se especifican las
rutas en directorios, con el símbolo
“/”

 También se puede apreciar sintaxis


similar a una subclase en C++ con el
símbolo ::
XPATH

•Un documento XML es procesado por un analizador (o parser) construyendo un


árbol de nodos.

•Este árbol comienza con un elemento raíz, que se diversifica a lo largo de los
elementos que cuelgan de él y acaba en nodos hoja, que contienen solo texto,
comentarios, intrucciones de proceso o incluso que están vacíos y solo tienen
atributos

•La forma en que XPath selecciona partes del documento XML se basa
precisamente en la representación arbórea que se genera del documento.

•De hecho, los "operadores" de que consta este lenguaje recuerda la terminología
que se utiliza a la hora de hablar de árboles en informática: raíz, hijo, ancestro,
descendiente, etc...
<libro>
<titulo>Dos por tres calles</titulo>
<autor>Josefa Santos</autor>
<capitulo num="1">
La primera calle
<parrafo>
Era una sombría noche del mes de agosto...
</parrafo>
<parrafo destacar="si">
Ella, inocente cual
<enlace href="http://www.enlace.es">mariposa</enlace>
que surca el cielo en busca de libaciones...
</parrafo>
</capitulo>
<capitulo num="2" public="si">
La segunda calle
<parrafo>Era una obscura noche del mes de septiembre...</parrafo>
<parrafo>
Ella, inocente cual <enlace href="http://www.abejilla.es">abejilla</enlace>
que surca el viento en busca del néctar de las flores...
</parrafo>
</capitulo>
<apendice num="a" public="si">
La tercera calle
<parrafo>
Era una densa noche del mes de diciembre...
</parrafo>
<parrafo>
Ella, cándida cual <enlace href="http://www.pajarillo.es">abejilla</enlace>
que surca el espacio en busca de bichejos para comer...
</parrafo>
</apendice>
</libro>
/
|
+---libro
|
+---titulo
| |
| +---(texto)Dos por tres calles
|
+---autor
| |
| +---(texto)Josefa Santos
|
+---capitulo [num=1]
| |
| +---(texto)La primera calle
| |
| +---parrafo
| | |
| | +---(texto)Era una sombría noche ...
| +---parrafo
| |
| +---(texto)Ella, cual inocente mariposa...
|
+---capitulo [num=2]
|
+---(texto)La segunda calle
|
+---parrafo
| |
| +---(texto)Era una obscura noche ...
+---parrafo
|
+---(texto)Ella, cual inocente abeja...
XPATH

•TIPO DE NODOS

•Nodo Raíz /. Hace referencia al nodo raíz del árbol, no es el elemento raíz

•Nodo Elemento: Cualquier elemento de un documento XML se puede


convertir en un elemento dentro del árbol

•Nodo texto: Caracteres que no están marcados por alguna etiqueta

•Nodo atributo: Consta de un nombre y un valor

•Nodo comentario e instrucciones de proceso


XPATH

• Conceptos Básicos
• Expresiones
• Una instrucción xpath se denomina expresión
• Por ejemplo /libro/capitulo/párrafo …
• Todos los elementos párrafo que cuelgan de un elemento
capítulo y que a su vez cuelga de un elemento libro

• Nodo contexto
• Una expresión tiene un punto de partida llamado nodo contexto

• Es como el directorio actual

• Predicados
• Permiten restringir la selección
• Por ejemplo: /libro/capitulo[@num="1"]/parrafo
<curso>
<alumno><nombre>alumno1</nombre>
<asignatura id = "mat">
<nota>5
</nota>
</asignatura>
<asignatura id = "cas">
<nota>3
</nota>
</asignatura>
<asignatura id = "bio">
<nota>6
</nota>
</asignatura>
</alumno>
<alumno><nombre>alumno2</nombre>
<asignatura id = "mat">
<nota>4
</nota>
</asignatura>
</alumno>
<alumno><nombre>alumno3</nombre>
<asignatura id = "mat">
<nota>5
</nota>
</asignatura>
<asignatura id = "cas">
<nota>3
</nota>
</asignatura>
<asignatura id = "bio">
<nota>7
</nota>
</asignatura>
</alumno>
</curso>
XPATH

• Qué hacen las siguientes expresiones

/curso//asignatura[nota<4]/../asignatura/@id

/curso//asignatura[nota<4]/../nombre/text()

/curso//asignatura[nota=7]/../nombre/text()
XPOINTER
XPOINTER
 Proporciona acceso a los valores de
atributos; o,
 Al contenido de elementos en
cualquier parte del documento XML
 Se pueden realizar vínculos a
secciones de texto
 Seleccionar atributos o elementos en
particular
XPOINTER
 Al contrario de XPATH, XPOINTER
permite seleccionar información que
está en más de un conjunto de nodos
 Proporciona extensiones a XPATH
Conceptos básicos
 Sub-Recurso : Se refiere a una porción de
un documento XML, esta porción puede ser
un elemento al cual se apunta
 Punto : Corresponde a una posición en el
Documento XML
 Rango:Identificación de una selección de
información contigua de un documento
XML, entre dos puntos
 Conjunto de Ubicación : Lista ordenada de
nodos,puntos y/o rangos producidos por
una expresión Xpointer
Formas de XPointer
 Expresiones Completas
 xpointer(id(“aParticularId”))
 xpointer(id(“bru”) xpointer(id(“haha”))
 Nombres desnudos
 aleph
 xpointer(id(“aleph”))
 Secuencias de niños (child)
 /1/2
 historicalDates/6/4
Herramientas
 Parser for XPointer Language(0.3) by
Patrice Bonhomme
 XLink/XPointer test by W. Eliot
Kimber
 XPath/XPointer tester by Fabio
Arciniegas
 Psgml-xpointer.el
XSLT

Extensible Stylesheet
Introducción
 Lenguaje de Transformación de contenido XML
 Permite transformar archivos fuentes a distintos
formatos
 XML, HTML, DHTML, XHTML, WML, PDF, etc.
Ejemplo 2
<person>
<name xml:lang="en">
<firstname>Anna</firstname>
<midinitial>M</midinitial>
<lastname>Mozart</lastname>
</name>
<borndate day="25" month="dec" year="1720"/>
<deaddate day="3" month="jul" year="1778"/>
<biography>
<p>Mother of Johann Chrysostom Wolfgang Gottlieb.</p>
</biography>
</person>
</people>
Lo Básico

<xsl:template match=“item”>
<xsl:text>Saw an item!</xsl:text>
</xsl:template>
Transformación

X XSLT Aa
Y Procesador Y
Z ~XT~ bb

Fuente Resultado
No necesariamente XML

XML

X aa
Zbb
XSLT Stylesheet
Wcc
XML conforme a XSLT
XSL
 Ejemplo
<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="Alumno1.xsl"?>

<universidad>
<alumno>
<nombre>alumno1
</nombre>
</alumno>
<alumno>
<nombre>alumno2
</nombre>
</alumno>
</universidad>
XSL
 Ejemplo

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Universidad</H2>
<xsl:for-each select="universidad/alumno">
<SPAN STYLE="font-style:italic">Nombre: </SPAN>
<xsl:value-of select="nombre"/><BR />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XSL
 Ejemplo
XSL
 Ejemplo
<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="alumno2.xsl"?>

<universidad>
<carrera>
<nombre_carrera>Infor</nombre_carrera>
<alumno>
<nombre>alumno1
</nombre>
</alumno>
<alumno>
<nombre>alumno2
</nombre>
</alumno>
</carrera>
<carrera>
<nombre_carrera>Medic</nombre_carrera>
<alumno>
<nombre>alumno2
</nombre>
</alumno>
<alumno>
<nombre>alumno3
</nombre>
</alumno>
</carrera>
</universidad>
XSL
 Ejemplo
<?xml version="1.0"?>

<!-- File Name: XslDemo02.xsl -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Universidad</H2>
<xsl:for-each select="universidad/carrera">
<SPAN STYLE="font-style:italic">Nombre: </SPAN>
<xsl:value-of select="nombre_carrera"/><BR />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XSL
 Ejemplo
XSLT Avanzado y XSL:FO
XSLT Avanzado y XSL:FO

Extensible Stylesheet Language


Formatting Objects
Presentaciones Optimizadas
 A través de XSL se pueden obtener
documentos mucho más llamativos y
adecuados para formatos de
impresión de alta calidad, como por
ejemplo PDF
Historia
 W3c working group estuvo trabajando
en dos especificaciones
 La primera XTL para de finir un
lenguaje común de transformación
 La segunda un DTD para dar formato
a documentos XML, denominado XFO
XTL
 Es utilizado principalmente para
transformar documentos XML en
documentos HTML, en el lado del
Servidor
XFO?
 Todas las propiedades de CSS1/CSS2
során utilizables
 W3C Common Formatting model
 Pensado para formatos de impresión
 Nueva funcionalidad = CSS3?
Transformando a PDF
 Con XFO es posible exportar a
formatos como PDF
 Se debe apoyar en XSL
XML to XSL
XML:
<Heading1>The headline</Heading1>

XSL:
<xsl:template match="Heading1"> <H1> <xsl:apply-
templates/> </H1> </xsl:template>

La Salida sería:
<H1>The headline</H1>
XSL + XFO
<xsl:template match="Heading1"> <fo:block font-
size="1.3em" margin-top="1.5em" margin-
bottom="0.4em"> <xsl:apply-templates/> </fo:block>
</xsl:template>
 Salida sería:

<fo:block font-size="1.3em" margin-top="1.5em" margin-


bottom="0.4em"> The headline </fo:block>
FOP?
 FOP corresponde a la herramienta
que es capaz de traducir el languaje
XSL:FO y transformarlo al formato de
presentaciñon adecuado.
 XSL:FO y FOP trabajan juntos para
formar documentos en formato PDF
Herramientas
 FOP 0.12.1
 Versión1.0.3 de Xerces XML Parser
 Versión 1.0.0 de Xalan stylesheet
Processor
 Para Servlets se puede utilizar
Cocoon Versión 1.7.2
Inclusión en Documentos XSL

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
 Corresponde a la definición de un nuevo namespace
dentro de un documento catalogado como XSL
Para Servlet Cocoon
<xsl:processing-instruction
name=“cocoon-
format”>type=“text/xslfo”</xsl:proce
ssing-instruction>
Check List de XSL:FO
 Definir el header de Style sheet
 Definir el layout ( Se refiere a
margenes, pies de página, etc
...formatos de página)
 Procesar los detalles del documento
Definición de Header
<xsl:tenplate match=“/”>
<xsl:apply-templates
select=“sonnet”/>
</xsl:template>
Definición del Layout -1
<fo:layout-master-set>
<fo:simple-page-master
page-master-name=”main”
margin-top=”75pt”
margin-bottom=“75pt”
margin-left=“75pt”
margin-right=“75pt”>
<fo:regin-body margin-bottom=“75pt”/>
</fo:simple-page-master>
<fo:layout-master-set>
Definición de Layout -2
<fo:page-sequence>
<fo:sequence-specification>
<fo:sequence-specifier-alternating
page-master-first=“main”
page-master-odd=“main”
page-master-even=“main”/>
</fo:sequence-specification>
</fo:page-sequence>
fo:flow
 Indica que todos los elementos
contenidos son formateados como
unidad

<fo:flow>
<xsl:apply-templates select=“title”/>
<xsl:apply-templates select=“author”/>
fo:block
 El bloque define las caracteristicas de
formateo de los elementos que contiene
<xsl:templates match=“title”>
<fo:block
font-size=“24pt” line-height=“27pt”
text-aling-last=“start”
space-before.optimum=“24pt”>
<xsl:apply-templates/>
</fo:block>
</xsl:templates>
Creación de Tablas -1
<fo:table space-before.optimum=“6pt”>
<fo:table-column column-width=“30pt”/>
<fo:table-column column-width=“450pt”/>
<fo:table-body>
<xsl:apply-templates
select=“lines/line”/>
Creación de Tablas -2
<xsl:template match=“line[1]|line[3]”>
<fo:table-row space-before.optimum=“3pt”>
<fo:table-cell>
<fo:block font-size=“14pt” color=“gray”>A</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block color=“green”><xsl:value-of select=“.”/></fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
Transformando el documento

 java org.apache.xalan.xslt.Process –in


sonnet.xml –xsl sonnet-rhyme-scheme.xsl
–out sonnet.fo

 Sonnet.of contendra la definición de objetos


para formar el documento PDF
FOP Aplicado (Finalizando...)
 Java
org.apache.fop.apps.CommandLine
sonnet.fo sonnet.pdf
BASE DE DATOS y XML
BASE DE DATOS y XML
 Los motores de datos utilizan XML
como un tipo de datos
 Las consultas a base de datos pueden
descargar datos en formato XML en
forma directa
 Del mismo modo pueden realizar
carga de documentos XML en forma
directa
BASE DE DATOS y XML
 Analizar
 Select * from contratista
1 transportes uno
2 transportes efe
3 transportes trio
4 transportes cuatrito
5 transportes quina
6 transportes del seis
7 transportes seven
8 transportes ochito
9 transportes del nueve
10 transportes ten
11 transportes dos unos
12 transportes después del 11
13 transportes después del 12
14 transportes antes del 15
15 transportista final
BASE DATOS y XML
 Analizar
 select * from contratista for xml raw
<row codcont="1" nombrecont="transportes uno " />
<row codcont="2" nombrecont="transportes efe " />
<row codcont="3" nombrecont="transportes trio " />
<row codcont="4" nombrecont="transportes cuatrito " />
<row codcont="5" nombrecont="transportes quina " />
<row codcont="6" nombrecont="transportes del seis " />
<row codcont="7" nombrecont="transportes seven " />
<row codcont="8" nombrecont="transportes ochito " />
<row codcont="9" nombrecont="transportes del nueve " />
<row codcont="10" nombrecont="transportes ten " />
<row codcont="11" nombrecont="transportes dos unos " />
<row codcont="12" nombrecont="transportes después del 11 " />
<row codcont="13" nombrecont="transportes después del 12 " />
<row codcont="14" nombrecont="transportes antes del 15 " />
<row codcont="15" nombrecont="transportista final " />
BASE DE DATOS y XML
 Analizar
 select * from contratista for xml auto

<contratista codcont="1" nombrecont="transportes uno " />


<contratista codcont="2" nombrecont="transportes efe " />
<contratista codcont="3" nombrecont="transportes trio " />
<contratista codcont="4" nombrecont="transportes cuatrito " />
<contratista codcont="5" nombrecont="transportes quina " />
<contratista codcont="6" nombrecont="transportes del seis " />
<contratista codcont="7" nombrecont="transportes seven " />
<contratista codcont="8" nombrecont="transportes ochito " />
<contratista codcont="9" nombrecont="transportes del nueve " />
<contratista codcont="10" nombrecont="transportes ten " />
<contratista codcont="11" nombrecont="transportes dos unos " />
<contratista codcont="12" nombrecont="transportes después del 11 " />
<contratista codcont="13" nombrecont="transportes después del 12 " />
<contratista codcont="14" nombrecont="transportes antes del 15 " />
<contratista codcont="15" nombrecont="transportista final " />
BASE DE DATOS y XML
 Analizar
 select * from contratista for xml auto, type

<contratista codcont="1" nombrecont="transportes uno " />


<contratista codcont="2" nombrecont="transportes efe " />
<contratista codcont="3" nombrecont="transportes trio " />
<contratista codcont="4" nombrecont="transportes cuatrito " />
<contratista codcont="5" nombrecont="transportes quina " />
<contratista codcont="6" nombrecont="transportes del seis " />
<contratista codcont="7" nombrecont="transportes seven " />
<contratista codcont="8" nombrecont="transportes ochito " />
<contratista codcont="9" nombrecont="transportes del nueve " />
<contratista codcont="10" nombrecont="transportes ten " />
<contratista codcont="11" nombrecont="transportes dos unos " />
<contratista codcont="12" nombrecont="transportes después del 11 " />
<contratista codcont="13" nombrecont="transportes después del 12 " />
<contratista codcont="14" nombrecont="transportes antes del 15 " />
<contratista codcont="15" nombrecont="transportista final " />
BASE DE DATOS y XML
 Analizar
 select * from contratista for xml auto, type, root ('raiz')
<raiz>
<contratista codcont="1" nombrecont="transportes uno " />
<contratista codcont="2" nombrecont="transportes efe " />
<contratista codcont="3" nombrecont="transportes trio " />
<contratista codcont="4" nombrecont="transportes cuatrito " />
<contratista codcont="5" nombrecont="transportes quina " />
<contratista codcont="6" nombrecont="transportes del seis " />
<contratista codcont="7" nombrecont="transportes seven " />
<contratista codcont="8" nombrecont="transportes ochito " />
<contratista codcont="9" nombrecont="transportes del nueve " />
<contratista codcont="10" nombrecont="transportes ten " />
<contratista codcont="11" nombrecont="transportes dos unos " />
<contratista codcont="12" nombrecont="transportes después del 11 " />
<contratista codcont="13" nombrecont="transportes después del 12 " />
<contratista codcont="14" nombrecont="transportes antes del 15 " />
<contratista codcont="15" nombrecont="transportista final " />
</raiz>
BASE DE DATOS y XML
 Analizar

DECLARE @x XML
SET @x = (
select * from contratista
for xml auto, type, root ('raiz'))
select @x.query('/raiz/contratista[@codcont="2"]')
BASE DE DATOS y XML
 Resultado

<contratista codcont="2" nombrecont="transportes efe " />

Você também pode gostar