XML Flashcards
En que lenguaje se basa XML
SGML
¿Qué es XML? ¿Conoces alguna etiqueta de XML?
Conjnto de reglas para construir lenguajes de etiquetas (html, svg, firma).
No se tienen etiquetas porque no es un lenguaje, son las reglas para crearlo.
Caracteristicas de XML Bien Formado
- Todas las etiquetas tienen que llevar cierre
- Case-Sensitive
- Sólo existe un único elemento raíz.
- Todos los elementos se encuentran anidados y correctamente cerrados.
- Los valores de atributos deben ir entre comillas simples o dobles.
- Los elementos vacíos deben terminar con ‘/’ (autocierre) o añadiendo una etiqueta de fin.
- Los nombres de las etiquetas pueden ser alfanuméricos, pero siempre comenzando con una letra (o con ‘:’ y ‘_’ aunque es raro)
Caracteristicas de XML Válido
- Cumple las reglas de la gramática especificadas en el DTD / XSD
Declaración en un fichero XML
<!–- La declaración es opcional –>
<?xml versión=“1.0” encoding=“utf-8” standalone=“no”?>
<!–- Especificamos la gramatica .dtd –>
<!DOCTYPE empleados SYSTEM “empleados.dtd”>
<empleados>
.....
</empleados>
Escapar caracteres especiales en XML
Se pueden hacer con entities, hay que marcarlos con ‘&’ y el parser pondrá su caracter
- & amp;
- & lt;
- & gt
Cuando queramos realizar un texto con caracteres especiales de un cierto tamaño tenemos la opción de decirle al parser que ignore el bloque de código
<observaciones> <![CDATA[ texto que el parser no analiza (<> á | ) ]]> </observaciones>
¿Cómo declarar y usar name spaces en XML?
<root xmlns:h=“http://uri-a” xmlns:f=“http://uri-b”> <h:tag1> … </h:tag1> <f:tag1> … </f:tag1> </root>
Esquema y reglas de un DTD
Antiguos y poco flexibles
- standalone=“yes” / “no”. Indica si el dtd está autocontenido en el fichero. “yes”-> todo en el mismo fichero. “no”-> en dos ficheros.
- *–> 0:N
- +–> 1:N
- # PCDATA –> Texto para !ELEMENT dentro de las etiqueta
- CDATA –> Texto para ATTLIST con comillas
- <!ELEMENT nombreElemento ANY> admite cualquier combinación de texto (#PCDATA) y ELEMENT
- <!ELEMENT nombreElemento EMPTY> sin comentarios :-)
- Otros tipos de atributos son ID e IDREF (similar al concepto de clave primaria y ajena) <!ATTLIST director coddir ID #REQUIRED> ||<!ATTLIST pelicula direccion IDREF #REQUIRED>
- NO podemos definir dominios de datos para contenidos de Elements y atributos. No maneja tipo de datos.
<?xml version="1.0" encoding="UTF-8” standalone=“yes”?> <!DOCTYPE deportistas [ <!ELEMENT deportistas (futbol | f1 | tenis)*> <!ELEMENT futbol (#PCDATA)> <!ELEMENT f1 (#PCDATA)> <!ATTLIST f1 pais CDATA "España"> <!ATTLIST f1 fecha_de_nacimiento CDATA #IMPLIED> <!ATTLIST f1 equipo CDATA #REQUIRED> <!ELEMENT tenis (#PCDATA)> ]> <deportistas> <f1 pais="Alemania" fecha_de_nacimiento="03/07/1987” equipo="Ferrari">Sebastian Vettel</f1> <f1 equipo="McLaren">Fernando Alonso</f1> <tenis>Rafael Nadal</tenis> </deportistas>
Esquema y reglas de un XSD
Nuevos y flexibles
- Se define un name space para asociar el fichero con los datos a la gramatica. Ej.: < aeropuerto xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=”aeropuerto.xsd”>
- < xs:complexType mixed=”true” > Texto y etiquetas dentro del Element
- < xs:all> / < xs:sequence> / < xs:choice> –> Presencia o no y no importa el orden / Presentes y el orden es el de la xsd / Se definen el nº de ocurrencias de cualquiera de los hijos.
- min/maxOccurs=”unbounded” –> para determininar el número de Elements
- type=”xs:string” –> Se pueden definir tipos de datos (xs:time, xs:string, xs:integer, xd:ID….)
- < xs:pattern value=”[CER]”/> –> Validacion por patrones
- Restricciones -> length, min / maxLength, totalDigits …. Ver documento xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="aeropuerto"> <xs:complexType> <!–- Pueden aparecer en cualquier orden, contrario que usar sequence --> <xs:all> <xs:element name="nombre" type="xs:string"/> <xs:element name="vuelos"> <xs:complexType> <xs:sequence> <xs:element name="vuelo" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="diario" minOccurs="0"/> <xs:element name="origen" type="xs:string"/> <xs:element name="destino" type="xs:string"/> <xs:element name="hora-salida" type="xs:time"/> <xs:element name="hora-llegada" type="xs:time"/> </xs:sequence> <xs:attribute name="código" type="xs:ID" use="required"/> <xs:attribute name="estado" default="E"> <!-- Creamos tipo de dato a partir de un tipo base y añadiendo restricciones--> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[CER]"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="fecha" type="xs:date"/> </xs:all> </xs:complexType> </xs:element> </xs:schema>
<?xml version="1.0" encoding="UTF-8"?> <aeropuerto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="aeropuerto.xsd"> <nombre>JFK</nombre> <vuelos> <vuelo código="V22" estado="R"> <diario /> <origen>New York</origen> <destino>Chicago</destino> <hora-salida>09:30:00</hora-salida> <hora-llegada>11:30:00</hora-llegada> </vuelo> <vuelo código="V23" estado="C"> <origen>New York</origen> <destino>Miami</destino> <hora-salida>10:15:00</hora-salida> <hora-llegada>11:15:00</hora-llegada> </vuelo> </vuelos> <fecha>2013-12-20</fecha> </aeropuerto>
Herencia (extensiones) en una xsd. De elementos ya creados en esa xsd o propios del lenguaje
<xs:complexType name="infoPersonaAmpliada"> <xs:complexContent> <xs:extension base="infoPersona"> <xs:sequence> <xs:element name="ciudad" type="xs:string"/> <xs:element name="pais" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="infoPersona"> <xs:sequence> <xs:element name="nombre" type="xs:string"/> <xs:element name="edad" type="edadPersona"/> </xs:sequence> <xs:attribute name="numero" type="xs:integer"/> </xs:complexType> <xs:simpleType name="edadPersona"> <xs:restriction base="xs:integer"> <xs:minExclusive value="-1"/> <xs:maxExclusive value="131"/> </xs:restriction> </xs:simpleType>
Restricciones (facetas) en Elements de un xsd
Tipos de datos en xsd
- xs:string
- xs:integer
- type=”xs:string” default=”B”
- type=”xs:string” fixed=”agosto”
Sequence, All, Choice y cardinalidades
- < xs:all> –> Presencia o no y no importa el orden
- < xs:sequence> –> Presentes y el orden es el de la xsd
- < xs:choice> / Se definen el nº de ocurrencias de cualquiera de los hijos
- maxOccurs=”5”
- minOccurs=”2”
- maxOccurs=”unbounded”
¿Qué es XSL?
eXtensible Stylesheet Language
Cuando pasamos un parser con las directrices de la hoja XSL, el documento se trasnforma en otro documento, ya sea de etiquetas o con otra forma.
- XSL-FO –> eXtensible Stylesheet Language Formatting Objects. Para generar documentos (pdf…)
- XSLT –> Extensible Stylesheet Language Transformations. Genera otro documento de etiquetas (HTML, SVG….)
Lista de API’s XML en Java
- JAX-P -> Conjunto de todas las apis de xml. Dentro DOM/SAX/XSLT/StAX
- DOM
- SAX
- JAX-B
- StAX
API DOM en Java
XML — Parser DOM (Xerces) —- Árbol objetos en memoria
org.w3c.dom
- El Parser genera del documento XML un árbol de objetos en
memoria que podremos modificar añadiendo nuevos nodos,
eliminando o modificando. - También tendremos libertad absoluta para recorrer dicho
árbol - Desventaja de que puede llegar a ocupar mucha memoría si el XML es grande.
- Todos los nodos son de tipo/interface Node pero también
tenemos unas especializaciones de Node como son: Element, Attr, Text y Document(objeto instrumental para las funcionalidades)
API SAX en Java
braSAX -> Manda eventos al recorrer el árbol del xml y no nos da opción de movernos por el.
XML —Parser SAX (Xerces) —– flujo hacia clase java(listener)
org.xml.sax
- El Parser comienza a leer el documento y le envía a una clase que se ha definido previamente los distintos eventos que detecta (inicio del documento, inicio de etiqueta, …)
- Funciona forward-only, no tenemos posibilidad de ningún recorrido pero es el más rápido de todos los métodos.
- Te avisa cuando Empieza / Termina el documento
- Te avisa cuando llega a un nuevo Elemento.
API JAXB en Java
Trata xml a alto nivel
- XSD — XJC —- Clases de negocio
- XML — Parser JAXB —- Árbol objetos en memoria
- El Parser genera del documento XML un árbol de objetos en
memoria, pero al contrario que el DOM, estos objetos serán
de clases de tu modelo de dominio (Ej. Factura, Empleado, etc). - Con la utilidad xjc de la JDK somos capaces de generar esas
clases automáticamente a partir de un XSD - Marshall –> De java objects a XML
- Unmarshall –> De XML a objetos java
- Posibles árboles en memoria muy grandes
API StAX en Java
Permite junto con JAXB levantar solo as partes del XML que queremos, bajo demando.
¿Qué es XPath?
Estándar para “seleccionar” nodos de un XML llamado XPath (equivalente a los CSS Selectors)
En Java te obliga a construir el árbol DOM para usarlo.
- //nombreElement –> da igual de donde cuelgue, extrae el elemento.
- //nombreElement/@attributo –> Atributo del elemento
¿Que es un fichero Markdown? ¿Y RestructureText?
Se basan en una sintaxis menos compleja que XML y suelen utilizarse para generar documentación. Ejemplos: Markdown (.md) y RestructuredText (.rst)
¿Qué es JSON?
- Lenguaje Schema-less, nativo para javascript y muy utilizado para intercambio de datos. Basado en atributo-valor
- Estandar ECMA 404 e ISO 21778
- Tipo MIME: application/json
- Tipos de datos: Object (subdocumentos), Array, Number, String, true, false y null. NOTA: El valor true y false tampoco van entre dobles comillas
- Librerias para procesar JSON: Jackson y GSON
- API’s de programación: JSON-B y JSON-P
- Un uso muy importante sería en el ámbito de la seguridad, para autenticación web (JWT)
(el cliente lo envía al backend en cada petición usando esta cabecera –> Authorization: Bearer eyJhbGci…) - OJO!! Los arrays pueden ser de tipos distintos en su interior. {5, “rosa”, true, null, {“nombre”:”hola”, “edad”: 25}}
¿Qué es YAML?
- YAML es un acrónimo recursivo que significa YAML Ain’t Markup
Language (en castellano, ‘YAML no es un lenguaje de marcado’) - Formato de serializacion legible por humanos
- Muy usado como fichero de configuración (ej. Swagger/OpenAPI
para documentar una API’s rest o un Ansible playbook)
En el lenguaje XML, ¿cuál de las siguientes sentencias sería correcta para añadir comentarios?
a) <– Aquí va el comentario />
b) <Aquí></Aquí>
c) <!-- Aquí va el comentario -->
d) <! Aquí va el comentario —>
c) <!-- Aquí va el comentario -->
Se han detectado varios errores en la exportación a XML de los diferentes listados de notas y le solicitan su ayuda. Sin tener en cuenta si la información está bien representada, ¿cuál de los siguientes XML está bien formado?
a) < Opositor>Winston Churchill< Nota1>95</nota1><Nota2>65</nota2></opositor></Nota2>
b) < Opositor>Winston Churchill< Nota1>95</Nota1><Nota2>65</Opositor></Nota2>
c) < Opositor>Winston Churchill< Nota1/>85< Nota2/>65</Opositor>
d) < Opositor>Winston Churchill< Nota1>95</>< Nota2>65</></>
c) < Opositor>Winston Churchill< Nota1/>85< Nota2/>65</Opositor>
En su Subdireccién van a usar JSON para realizar intercambio de datos, y le preguntan, de entre los siguientes, cuál sería un fichero JSON válido.
a) {“nombre”: “Juana”, “apellido”: “Ruiz”)
b) {‘nombre’: ‘Juana’, ‘apellido’: ‘Ruiz’)
c) {nombre: “Juana”, apellido: “Ruiz”)
d) {nombre: “Juana”; apellido: “Ruiz”)
a) {“nombre”: “Juana”, “apellido”: “Ruiz”)
Con respecto a JSON, señale la correcta:
a) Es un tipo de gramática XML.
b) Es una API de Java
c) Es un conjunto de librerfas de Javacript.
d) Es un formato de intercambio de datos.
d) Es un formato de intercambio de datos.
Una diferencia entre las APIs de Java, SAX y JDOM, es:
a) SAX permite acceso directo a los elementos del XML, con JDOM el acceso es secuencial.
b) SAX requiere más memoria para procesar el documento XML que JDOM.
c) JDOM es recomendable para la edición o cambios en documentos XML, SAX para la lectura de documentos XML.
d) JDOM lanza un evento cuando encuentra un elemento en el documento XML, SAX no lanza eventos.
c) JDOM es recomendable para la edición o cambios en documentos XML, SAX para la lectura de documentos XML.
¿En que consiste un documento xml valido?
Aquel que cumple con una determinada gramatica (DTD o XSD)
NOTA: Un requisito es que esté bien formado
¿Cómo se llama al estándard equivalente a los selectores en CSS para referirte a un nodo(s) dentro de un xml?
XPATH
EJ.: //factura/linea –> devuelve todos los nodos linea de cualquier factura
¿Que tipo de producto es Apache FOP?
XSL-FO Procesor (XML + XSL-FO –> pdf/imagen)
¿Qué significa si vemos un DTD la siguiente declaración < !ELEMENT IMAGEN ANY>? ¿Existe algún equivalente con XSD?
a) Contenido mixto –> texto y/o etiquetas
b) Si, el atributo mixed de complex type –> < xs:complexType mixed=”true”>
¿Qué diferencia tiene usar un XSD < xs:complexType> < xs:all> en lugar de < xs:complexType> < xs:sequence>?
Sequence determina el orden de aparición de los hijos y All no.
¿En qué interface se encuentra el método getElementById(id) y que API se trata?
a) Interface Document
b) API DOM (Node, Attr, Text, Document)
¿Cuál es la utilidad de la herramienta de linea de comandos xjc?
Crear clases java (de tu negocio/modelo) a partir de una gramatica XSD.
NOTA: Estas clases son usadas en el proceso de lectura/escritura en JAXB
NOTA: procesos de JAXB obj-xml-obj
Marshall –> de Objetos a XML
Unmarshall –> de XML a Objetos
En JSON, ¿es correcta está declaración?
{
“precio”: 100,
“descripcion”: “producto nº 100”,
“stock”: nulo,
“categorias”:[“electronica”, “ofertas”]
}
No es correcta por la línea de “stock”: nulo, –> nulo no es una palabra válida en JSON (ECMA 404). Se podria arreglar entrecomillando “nulo” o pones la palabra reservada null
NOTA: Valores que no van entrecomillados –> numeros, true, false, null
¿En que consiste el fomato Markdown?
Lenguaje de marcas ligero para generar documentación (tipicamente). Extenison .md
Nombre dos API’s y dos librerias de Java para trabajar con JSON
a. JSON-P y JSON-B (API)
b. Jackson y GSON (Librerias)