sintesis

xml2

Códigos disponibles en git

¿Por qué?

GML/SGML

contextoSGML

XML

contextoXML

¿Qué?

- Lenguaje - Castellano - Semáforo - Java - XML
  • reglas léxicográfica para los elementos

  • palabras, signos de puntuación, …​

  • rojo, verde y ambar

  • palabras reservadas, operadores, literales, símbolos, …​

  • no están definidas

  • reglas sintácticas para el orden de los elementos

  • <sustantivo> <verbo> <predicado>

  • de verde a ambar, de ambar a rojo y de rojo a verde

  • if (<expresion>) <sentencia> [ else <sentencia>]

  • no están definidas

  • reglas semánticas para el significado del orden de los elementos

  • transmite información

  • gestiona el tráfico

  • ejecuta las sentencias

  • no están definidas

  • Metalenguaje

  • Ejemplos

  • Contraejemplos

  • es un lenguaje con capacidad expresiva para definir léxica, sintáctica y semánticamente un lenguaje, otro o a sí mismo!!!

  • Castellano

  • EBNF (extended Backus-Naur Form), XML Schema, DTD, …​

  • Semáforo

  • XML

elementos
  • XML no es un lenguaje y menos aún un metalenguaje, es un marco tecnológíco (framework) que facilita la definición de nuevos lenguajes y manipulación de sus documentos para cualquier sistema de información

  • Establece un marco de reglas mínimas que pueden ser extendidas con otras reglas sintácticas (gramática) para conformar un nuevo lenguaje, llamado vocabulario

    • Documento bien formado, si cumple las reglas mínimas (herramienta)

    • Documento válido, si cumple las reglas extendidas de cierto vocabulario

Que fuera

idéntico al HTML a la hora de servir, recibir y procesar la información, para aprovechar toda la tecnología implantada para este último.

formal y conciso desde el punto de vista de los datos y la manera de guardarlos.

extensible, para que lo puedan utilizar en todos los campos del conocimiento.

fácil de leer y editar.

fácil de implantar, programar y aplicar a los distintos sistemas

¿Para qué?

- Persistencia - Interoperabilidad
  • "pequeñas Bases de Datos" para una configuración o una web estática: tu curriculum, tus recetas, …​

  • intercambio de datos entre sistemas heterogéneos: servicios Web, …​

    • estándares globales: xHTML, MathML, WSDL, JavaML, NewsML, …​,

    • estánderes verticales: financieras para intercambio de información de morosos, informes médicos para traslados de expedientes entre estados, …​

Configuración de Visual Code: pom.xml de maven

Gráficos vecotriales escalables: SVG

pomxml

svgxml

Publicación científica: MathML

Lenguajes de programación: JavaML, cppML, …​ para métricas, documentación o transformaciones automáticas

mathML

javaml

Colaboradores

Validadores
  • Estableciendo un contrato entre el cliente y servidor de información mediante la precisión de una gramática de la estructura de información deseada

  • Ahorrando 20% del código de una apliación dedicado a la detección de errores en los datos de entrada

validadores
Formateadores
  • Generando la visualización en cualquier formato mediante otro documento que especifica el estilo para cada tipo de elemento de la gramática

  • Evitando la complejidad del acoplamiento entre la vista y la modelo y rigidez de un único formato de presentación

formateadores
Procesadores
  • Permitiendo cualquier proceso ad hoc recorriendo la estructura de la gramática mediante bibliotecas específicas basadas en el patrón observador/observado e intérprete

  • Evitando la necesidad de conocimientos de teorías de lenguajes, gramáticas, lexicografía, compiladores/intérpretes …​ con técnicas LL(1), LR, …​ herramientas lex, yacc, …​

procesadores

Alternativas

alternativas
XML JSON YAML
<?xml version="1.0" encoding="UTF-8"?>
<adress>
  <number>77</number>
  <street>Massachusetts Avenue</street>
  <village>Cambridge</village>
  <county>Massachusetts</county>
  <country>United States of America</country>
  <postcode>02139</postcode>
</adress>
{
   "number": "77",
   "street": "Massachusetts Avenue",
   "village": "Cambridge",
   "county": "Massachusetts",
   "country": "United States of America",
   "postcode": "02139"
}
number: '77'
street: Massachusetts Avenue
village: Cambridge
county: Massachusetts
country: United States of America
postcode: '02139'

¿Cómo?

Documento bien formado

  • Documento XML bien formado

Documento

  • Instrucción de Procesamiento

    • Con información para el validador, estilizador, transformador, …​ prepocesador que lo procese

InstruccionProcesamiento

  • En particular, para el validador, la versión actual es 1.0 y la codificación recomendada para el español es UTF-8

  • Comentario

    • No permite contener la secuencia '<!--'

Comentario

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml bien formado sin información alguna -->
  • Elemento textual, sin elementos anidados, solo con caracteres para la información. Es la unidad

  • Elemento estructurado, solo con elementos anidados, sin caracteres para la información. Es el compuesto

  • Elemento mixto, con elementos anidados y caracteres para la información

    • En sentido estricto todos los elementos estructurados son mixtos cuando se separan por tabuladores, espacios o sáltos de línea para mostrar con márgenes la jerarquía subyacente en el flujo de caracteres.

    • Pero entendemos por estructurado si no hay caracteres de información directamente dentro del elemento, ni fuera de los elementos anidados, que es el mismo espacio

Elemento

  • Identificador

    • Para la metainformación

    • Diferencia mayúsculas de minúsculas

    • Recomendado en CamelCase

Metainformacion

  • Caracter

  • Letra

  • Digito

  • CaracterEspecial

Caracter

Letra

Digito

CaracterEspecial

  • Los caracteres reservados "<", ">", "'", """ y "&"", para la definición de elementos y atributos propia del XML, se escriben con entidades predefinidas: "&lt;", "&gt;", "&amp;", "&apos;" y "&quot;", respectivamente

<?xml version="1.0" encoding="UTF-8"?>
<elementoVacio/>
<?xml version="1.0" encoding="UTF-8"?>
<elementoVacio></elementoVacio>
<?xml version="1.0" encoding="UTF-8"?>
<elementoNoVacio>
    <elementoVacio></elementoVacio>
    <elementoVacio/>
</elementoNoVacio>
<?xml version="1.0" encoding="UTF-8"?>
<elemento>informacion</elemento>
<?xml version="1.0" encoding="UTF-8"?>
<elementoEstructurado>
    <subElemento1>informacion</subElemento1>
    <subElemento2>informacion</subElemento2>
    <!-- otros -->
    <subElemento>informacion</subElemento>
    <subElemento>informacion</subElemento>
    <subElemento>informacion</subElemento>
    <!-- otros -->
    <subElementoN>informacion</subElementoN>
</elementoEstructurado>
<?xml version="1.0" encoding="UTF-8"?>
<elementoMixto>informacion <subElemento> informacion </subElemento> informacion <subElemento>informacion </subElemento> informacion </elementoMixto>
  • Atributo

    • Únicamente en la marca/etiqueta de apertura

Atributo

<?xml version="1.0" encoding="UTF-8"?>
<elementoEstructurado>
  <elementoTextual atributo="informacion">informacion</elementoTextual>
  <elementoEstructurado atributo="informacion">
      <subElemento>informacion</subElemento>
      <subElemento atributo="informacion">informacion</subElemento>
  </elementoEstructurado>
  <elementoVacio atributo1="informacion" atributo2="informacion"/>
  <elementoVacio atributo1="informacion" atributo2="informacion"></elementoVacio>
</elementoEstructurado>
<?xml version="1.0" encoding="UTF-8"?>
<elementoMixto atributo="informacion"> informacion <subElemento atributo="informacion"> informacion </subElemento> informacion <subElemento atributo="informacion"> informacion</subElemento> informacion </elementoMixto>
  • No existe un criterio claro para decidir si la información reside como contenido de un elemento entre sus marcas o como valor de un atributo. Se recomienda como atributos:

    • Información de valores cortos, p.e. cadenas de pocas palabras

    • Información de valores enumerados, p.e. Mercurio, Venus, …​

    • Meta-información de la implantación, p.e. códigos no visibles para el usuario, …​

<?xml version="1.0" encoding="UTF-8"?>
<elemento>informacion</elemento>
<?xml version="1.0" encoding="UTF-8"?>
<elemento atributo="informacion"> informacion</elemento>
<?xml version="1.0" encoding="UTF-8"?>
<elemento atributo="informacion"/>
  • Los elementos vacíos sirven como tipo lógico, boolean, con su presencia o su ausencia dentro de otro elemento o para reunir cohesivamente la información de varios atributos

  • Los elementos mixtos sirven para textos en línea con distintos formatos de tipografía, tamaño, color, …​.

<?xml version="1.0" encoding="UTF-8"?>
<package>
    <dimension width="34" height="55" depth="23"/>
    <fragile/>
</package>
<?xml version="1.0" encoding="UTF-8"?>
<elementoMixto atributo="informacion"> informacion <subElemento atributo="informacion"> informacion </subElemento> informacion <subElemento atributo="informacion"> informacion</subElemento> informacion </elementoMixto>

Restricciones

En los identificadores de los elementos
  • No existen

<?xml version="1.0" encoding="UTF-8"?>
<elementoEstructurado>
    <subElemento>informacion</subElemento>
    ...
    <elementoEstructurado>
    ...
    </elementoEstructurado>
    ...
    <subElemento>informacion</subElemento>
    <otroElemento>informacion</otroElemento>
</elementoEstructurado>
En los identificadores de los atributos
  • Deben ser únicos dentro de cada elemento

<?xml version="1.0" encoding="UTF-8"?>
<elemento atributo1="valor" atributo2="valor">informacion</elemento>
En los valores de atributos id e idref
  • Sus valores deben ambos comenzar por una letra

  • Sirven para:

    • Nombrar, con el valor del atributo id debe ser único en el conjunto de valores de todos los atributos id de cualquier elemento del documento

    • Referenciar, con el valor del atributo idref debe existir en el conjunto de valores de todos los atributos id de cualquier elemento del documento

<?xml version="1.0" encoding="UTF-8"?>
<raiz>
    ...
    <origen>
        ...
        <destino idref="k24"/>
        ...
    </origen>
    ...
    <elemento id="k24">
        ...
    </elemento>
    ...
</raiz>
<?xml version="1.0" encoding="UTF-8"?>
<definitions>
  <definition id="Proceso Unificado de Desarrollo"> es un <refDefinition idref="proceso de desarrollo software"/>
     con tres caracterísitcas: <refDefinition idref="basado en componentes"/>,
     <refDefinition idref="dirigido por Casos de Uso"/> y
     <refDefinition idref="centrado en la Arquitectura"/>.</definition>
  <definition id="proceso de desarrollo software">es la aplicación
    de las actividades y procesos de mantenimiento del software que generan
    una nueva [blue]versión operativa de un software con una funcionalidad de usuario
    o propiedades cambiadas a partir de una versión anterior junto con los procesos
    y actividades de garantía de calidad y con la gestión de esos procesos
    </definition>
</definitions>

Antipatrones

<MIT> (1)
    77 Massachusetts Avenue. Cambridge (2)
    Massachusetts 02139. United States of America (3)
</MIT>
1 Error: Confunde metainformación e información, impidiendo consultas de información futuras. Los identificadores de los elementos deben coincidir con los campos de una estructura, registro, atributos de clase, entidad, …​ No sus valores particulares, imposibles de adivinar por parte del procesador, validador, formateador, …​
2 Error: Formatea la información con saltos de linea, subrayados, …​ perjudicando el tratamiento de información para un formato no previsto en un nuevo dispositivo
3 Posible error: Inadecuada estructuración, estructurando en exceso o defecto la información suministrada, inadecuada para el procesamiento necesario
  • Correcto o incorrecto si el sistema de información necesita tratar la calle y/o la ciudad por separado y/o …​

    • Obligando al programador a analizar la información

<?xml version="1.0" encoding="UTF-8"?>
<adress>
    <street>77 Massachusetts Avenue. Cambridge</street>
    <country>Massachusetts 02139. United States of America</country>
</adress>
<?xml version="1.0" encoding="UTF-8"?>
<adress>
    <street>77 Massachusetts Avenue</street>
    <village>Cambridge</village>
    <county>Massachusetts</county>
    <country>United States of America</country>
    <postcode>02139</postcode>
</adress>
<?xml version="1.0" encoding="UTF-8"?>
<adress>
    <number>77</number>
    <street>Massachusetts Avenue</street>
    <village>Cambridge</village>
    <county>Massachusetts</county>
    <country>United States of America</country>
    <postcode>02139</postcode>
</adress>

Patrones

Colección heterogénea

Los nombres de los elementos coinciden con los nombres de los campos, propiedades o atributos de las estructuras, registros, objetos, entidades, …​ de los lenguajes de programación

<record>
    <field_A>data_A</field_A>
    <field_B>data_B</field_B>
    ...
    <field_Z>data_Z</field_Z>
</record>
<author>
    <name>Edsger Wybe</name>
    <surname>Dijkstra</surname>
    <birthday>
        <day>11</day>
        <month>5</month>
        <year>1930</year>
    </birthday>
    <turingAward year="1972"/>
</author>

Colección homogénea

Los items coinciden con los elementos de los arrays, vectores, listas, …​ de los lenguajes de programación

<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item>item_A</item>
    <item>item_B</item>
    ...
    <item>item_C</item>
</items>
<keys>
        <key>877</key>
        <key>743</key>
        <key>33</key>
        <key>7980</key>
        <key>343</key>
        <key>234</key>
        <key>55</key>
        <key>689</key>
</keys>
<?xml version="1.0" encoding="UTF-8"?>
<studies>
    <study>
        <name>Ingeniería del Software</name>
        <course>Programación</course>
        <course>Diseño</course>
        <course>Pruebas</course>
        <course>Análisis</course>
        <course>Requisitos</course>
        <course>Gestión</course>
        ...
    </study>
    <study>
        <name>Ingeniería Web</name>
        <course>Visión General</course>
        <course>Front-End Web</course>
        <course>Front-End Móvil</course>
        <course>Back-End de Código Abierto</course>
        <course>Back-End de Código Libre</course>
        <course>Back-End de Código Privativo</course>
        ...
    </study>
    ...
</studies>
<addresses>
        <address>
                <name>Sr. Francisco Ansó García</name>
                <street>Calle Lucas Rey Kalea, 15, 5ºB</street>
                <postalCode>01468 Amurrio</postalCode>
                <province>Álava</province>
        </address>
        <address>
                <name>Dña. Antonia Fernandez García</name>
                <street>Av. de las Delicias, 14, 1º Dcha.</street>
                <postalCode>15810  Arzúa</postalCode>
                <province>La Coruña</province>
        </address>
        <address>
                <name>Sr. Raúl Peña Peña</name>
                <street>Calle Murcia, 22, Bajo C</street>
                <postalCode>28020 Madrid</postalCode>
                <province>Madrid</province>
        </address>
</addresses>
Aplicación

Árboles

<tree>
    <node>Elemento_1</node>
    <tree>
        <node>Elemento_11</node>
        <tree>
            <node>Elemento_111</node>
        </tree>
        <tree>
            <node>Elemento_112</node>
        </tree>
        <tree>
            <node>Elemento_113</node>
            <tree>
                <node>Elemento_1131</node>
            </tree>
            ...
        </tree>
        ...
    </tree>
    <tree>
        <node>Elemento_12</node>
    </tree>
    ...
</tree>
<menu>
    <title>Chrome</title>
    <option>Nueva pestaña</option>
    <option>Nueva ventana</option>
    <option>Nueva ventana de incógnito</option>
    ...
    <menu>
        <title>Ayuda</title>
        <option>Información de Google Chrome</option>
        <option>Centro de Ayuda</option>
        <option>Notificar un error</option>
    </menu>
    <option>Salir</option>
</menu>

Grafos

<?xml version="1.0" encoding="UTF-8"?>
<graph>
    <node id="kA">node_A</node>
    <node id="kB">node_B</node>
    ...
    <node id="kZ">node_Z</node>
    <edge>
        <from idref="kB"/>
        <to idref="kA"/>
    </edge>
    <edge>
        <from idref="kZ"/>
        <to idref="kA"/>
    </edge>
    ...
    <edge>
        <from idref="kZ"/>
        <to idref="kB"/>
    </edge>
</graph>
<?xml version="1.0" encoding="UTF-8"?>
<graph>
    <node id="kA">
        <data>node_A</data>
    </node>
    <node id="kB">
        <data>node_B</data>
        <edge idref="kA"/>
    </node>
    ...
    <node id="kZ">
        <data>node_Z</data>
        <edge idref="kA"/>
        <edge idref="kB"/>
    </node>
</graph>
<?xml version="1.0" encoding="UTF-8"?>
<bibliography>
    <book id="k1">
        <author>Frederick P. Brooks</author>
        <title>The Mythical Man Month. Essays on Software Engineering</title>
        <year>1995</year>
        <publisher>Prentice Hall</publisher>
    </book>
    <book id="k2">
        <author>Grady Booch</author>
        <title>Object Oriented Analysis and Design with Applications</title>
        <year>2011</year>
        <publisher>Addison-Wesley</publisher>
    </book>
    ...
    <book id="k78">
        <author>Robert C. Martin</author>
        <title>Clean Code. A Handbook of Agile Software Craftsmanship</title>
        <year>2008</year>
        <publisher>Prentice Hall</publisher>
    </book>
    <reference>
        <from idref="k2"/>
        <to idref="k1"/>
    </reference>
    <reference>
        <from idref="k78"/>
        <to idref="k1"/>
    </reference>
    ...
    <reference>
        <from idref="k78"/>
        <to idref="k2"/>
    </reference>
</bibliography>
<?xml version="1.0" encoding="UTF-8"?>
<bibliography>
    <book id="k1">
        <author>Frederick P. Brooks</author>
        <title>The Mythical Man Month. Essays on Software Engineering</title>
        <year>1995</year>
        <publisher>Prentice Hall</publisher>
    </book>
    <book id="k2">
        <author>Grady Booch</author>
        <title>Object Oriented Analysis and Design with Applications</title>
        <year>2011</year>
        <publisher>Addison-Wesley</publisher>
        <reference idref="k1"/>
    </book>
    ...
    <book id="k78">
        <author>Robert C. Martin</author>
        <title>Clean Code. A Handbook of Agile Software Craftsmanship</title>
        <year>2008</year>
        <publisher>Prentice Hall</publisher>
        <reference idref="k1"/>
        <reference idref="k2"/>
    </book>
</bibliography>
Aplicación

Síntesis

sintesis

Bibliografía

Obra, Autor y Edición Portada Obra, Autor y Edición Portada

logoZVON

logoW3S

  • XML al descubierto

    • Michael Morrison

    • Prentice Hall, 2000

XMLAlDescubierto

Ponente

  • Luis Fernández Muñoz

setillo

  • Doctor en Inteligencia Artificial por la UPM

  • Ingeniero en Informática por la UMA

  • Diplomado en Informática por la UPM

  • Profesor Titular de ETSISI de la UPM