b3t8 - XML Flashcards
XML es un lenguaje case sensitive?
Sí
Qué significa que un XML esté bien formado?
XML Bien Formado:
* 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
* XML es case sensitive en los nombres de las etiquetas, por tanto la apertura y cierre han de ser iguales al respecto
* Un nodo puede tener dentro varios elementos que pueden ser textos u otros nodos (ver imagen, que sería correcta)
Qué significa que un XML sea válido?
Cumple las reglas de la gramática especificadas en el DTD / XSD
Cómo se tiene que declarar un XML? (etiqueta de inicio del XML)
< ?xml versión=“1.0” encoding=“utf-8” standalone=“no”?>
Fijarse que empieza y termina por interrogación
La versión es obligatoria, pero el encoding no
Standalone no significa que la gramática está en otro fichero, por tanto no es independiente
Cómo se enlaza por ejemplo un DTD en un XML para validar su gramática¿?
< !DOCTYPE empleados SYSTEM “empleados.dtd”>
Qué es el & amp; de la imagen. O podría ser un & lt;
Son entities o macros, que sirven para no confundir al analizador XML
Se sustituye al analizar el XML por su caracter, para “escapar”
Cómo se hace en XML para poner un texto que no se interprete por el parser de XML?
< ![CDATA[texto que el parser no analiza]]>
Qué son los espacios de nombre en XML y cómo se definen?
Tenemos la posibilidad de incluir en las etiquetas unos prefijos que nos permitan
eliminar la posible ambigüedad que pudiera darse con dos etiquetas con el mismo
nombre
* Los DTD no dan soporte a los espacios de nombres
Fijarse que se pone en la etiqueta root
Cómo se hace un DTD para definir la gramática de un DTD?
Cómo empieza el documento y dónde se pone el elemento raíz
Cómo indicar que un elemento tiene determinados hijos ( pudiendo usar and o or, indicando el número de elementos…
Cómo indicar que un elemento tendrá texto
Cómo indicar los atributos que tendrá un elemento, tanto de forma obligatoria como opcional
- Otros tipos de contenido para un ELEMENT serían ANY (mixto) o EMPTY, o FIXED para un valor fijo
- Otros tipos de atributos son ID e IDREF (similar al concepto de clave primaria y ajena)
- REQUIRED para obligatorio y IMPLIED para opcional
Dos lenguajes de marcas ligeros
Se basan en una sintaxis menos compleja que XML y suelen utilizarse para generar documentación. Ejemplos: Markdown (.md) y RestructuredText (.rst)
Casos de uso de YAML
- Definir api rest en formato openApi
- Definir un playbook de Ansible
- Docker Compose
Qué significa que JSON sea schemaless?
Que no requiere de validación con un esquema con la gramática, como XML
Cuál es el estándar de JSON? y el mimetipe?
ECMA 404
application/json
Qué tipo de datos tiene JSON?
Object , Array, Number, String, true, false y null
Entrecomillado ->
Cómo son las comillas cuando se ponen?
Cómo van el nombre de los atributos del par atributo:valor?
En qué tipos de datos se entrecomilla su valor y cuáles no?
Cómo se separan los decimales en un number?
Comillas dobles
atributo Siempre entre dobles comillas
Se entrecomilla el valor de: Strings
No se entrecomilla el valor de: Number, Booleanos y null
Los numéricos decimales se separan con punto, no coma
Qué dos librerías se usan para procesar JSON?
Jackson y GSON
Dos APIs de programación de JSON
JSON-P y JSON-B (como json-p, pero de más alto nivel)
Refrescar cómo son los JWT, típico caso de uso de JSON
Cómo se enlaza un XSD en un XML?
< aeropuerto xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=”aeropuerto.xsd”>
Fijarse en que hay que dar de alta ese espacio de nombres
Luego en el otro xsi se pone el xsd a importar
Cómo empieza un XSD?
< ?xml version=”1.0” encoding=”UTF-8”?>
< xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
Fijarse en que al ser un XML también, se inicia como un xml, con la “?”, la versión, etc
Analizar un ejemplo de XSD
Y leer los apuntes de XSD en pdf que está en el laboratorio, pasando de la parte de qualified. Importante las restricciones
Fijarse en el uso de complexType y de simpleType -> Simple solo puede tener un dato
Fijarse en que se pone all, para indicar que no tienen un orden específico, se podría poner sequence para obligar al orden. Choice sería para indicar que sólo se puede poner uno de los hijos.
Se usa minOcurrs y maxOcurrs para indicar nº, en lugar de asterisco, + , ? como en DTD
Se puede usar tipo time para validar fechas
Como en DTD se puede especificar que un atributo es ID
El uso de restriction y pattern para hacer que un atributo cumpla una expresión regular
Restricciones o facetas XSD
Ejemplo de usar extensiones en XSD
Fijarse en la sintaxis, que es con extension
Fijarse que además de heredar atributos con la extensión, se está añadiendo otro
Qué es XSLT?
Lenguaje que vale para transformar un XML a otro XML o a otros formatos
Qué es es un Processor de XML? Ej producto
A partir de un XML y una hoja XSLT, es el que procesa las instrucciones XSLT sobre ese XML para generar el documento resultante
Ej: Apache Xalan
Apache FOP, por el contrario, usa XSLFO, que lo que hace es fusionar un XML con un XSL para generar un pdf, imagen, etc…
Qué es Apache Xerces¿
Es una libería que vale para parsear, validar y manipular XML, que soporta muchas APIS como DOM y SAX
Ver equivalencias de cómo se selecciona información con XPath
Qué es XHTML?
Es un HTML que cumple las reglas de un XML válido
XHTML estaba basado en la reglas de XML (ej <br></br> no es valido). Tipo MIME = application/xhtml+xml
HTML4 o HTML5 es XHTML? es decir, cumple las reglas de un XML bien formado?
No, por ejemplo no son case sensitive como XML, y etiquetas como < br> no son válidas porque no tienen cierre
Qué es StAX?
Hay una variante de JAXB llamada StAX que en lugar de levantar todo el árbol de objetos lo puede controlar el programador e ir leyendo por “trozos”
Previamente a hacer un unmarshall de un XML, qué debemos hacer para generar las clases?
Con xjc se puede usar un XSD (grámática) para generar las clases, si no se tienen.
Luego el unmarshall con JAXB ya generará los objetos de esas clases a partir del XML
En XPath, qué significa…
//elemento
/elemento
elemento[@atributo]
//elemento -> busca el/los elementos a cualquier profundidad
/elemento -> busca el elemento en la raiz
elemento[@atributo] -> elementos que tengan ese atributo
En XPath, cómo se conseguiría
- Obtener algo aplicando una condición
- Obtener algo que sea la unión de dos cosas
- Obtener elementos
- Obtener atributos
- Obtener el valor sin la etiqueta
- Fución para obtener Nodos descendientes del actual
- Obtener algo aplicando una condición -> Con corchetes elemento[condicion]. Si se pone un número, es el elemento en esa posición de un conjunto de elementos -> /gimnasio/monitores/monitor[3]/nombre. Si no se pone nada más que un nombre de elemento o de atributo, significa que la condición es que lo tengan -> /gimnasio/actividades/actividad[lugar]/nombre
- Obtener algo que sea la unión de dos cosas -> con | dentro de paréntesis -> /gimnasio//(actividad | monitor)/nombre
- Obtener elementos -> // o /
- Obtener atributos -> @ -> /gimnasio/actividades/actividad/@código
- Obtener el valor sin la etiqueta -> text() -> /gimnasio/actividades/actividad/ text
- Función para obtener Nodos descendientes del actual -> node()
Leer los pdf de laboratorios XPath
Cuál es la principal diferencia entre JaxB y Stax?
StaX no guarda todos los objetos en memoria
Hay varias maneras de analizar XMLs, se usan varias APIs
DOM
SAX (es de java)
JAXB (es de java)
En qué consiste cada una?
Qué es marshall y unmarshall?
SAX (Simple Api for XML)-> 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.
DOM (Document Object Model) -> 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 pero tiene la 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
JAXB (Java Architecture for XML Binding) -> 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 de negocio (Ej. Factura, Empleado,
etc). Este proceso se llama unmarshal y el contrario, a partir del árbol de objetos de negocio a XML se llama marshall
Con la utilidad xjc de la JDK somos capaces de generar esas
clases automáticamente a partir de un XSD