XML AVANZADO

Document Sample
XML AVANZADO Powered By Docstoc
					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   " />