XML Avanzado
XML Avanzado
XML Avanzado
Texto Puro
BIEN FORMADO
VÁLIDO
XML BIEN FORMADO
Un único elemento raiz
<!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
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.
<!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.
<!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
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
<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.
Definición de Documentos
Schema
Al igual que las DTDs, describen el
contenido y la estructura, pero de
una forma más precisa.
<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
<sw-key>2222-IAG-32123</sw-key>
Schema
XML Schema tipos delimitados
Validación de mail
\S+@\S+\.\S+
Algún sitio web
w{3}\.\S\.cl
Schema
Especificación de restricciones
<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: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
<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
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
El estándar es XML
Programación monolítica
WEB Services
Programación Monolítica
Se basa en estándares,
principalmente WSDL y SOAP
WEB SERVICES
WSDL
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
Es un lenguaje de consulta
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
“/”
•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
• 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
• 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
/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
Zbb
XSLT Stylesheet
Wcc
XML conforme a XSLT
XSL
Ejemplo
<?xml version="1.0"?>
<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"?>
<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"?>
<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
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:
<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
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