Este documento resume varias alternativas a XML para la representación de datos, incluyendo JSON, YAML, SXML, CSV y RDF. Describe brevemente cada formato y compara sus características, ventajas y desventajas respecto a XML.
1. Alternativas a XML
JSON, YAML, SXML, CSV, RDF
Jose Emilio Labra Gayo
Depto. Informática
Universidad de Oviedo
2. Tipos de representación
Los tipos de representación se identifican con MIME
MIME (Multipurpose Internet Mail Extensions)
Identificar el tipo de contenido (Cabecera Content-type)
Formato tipo/subtipo
Ejemplos:
Lista oficial: http://www.iana.org/assignments/media-types
text/html: Página Web en formato HTML
text/xml, application/xml : Documento XML
application/json: Documento JSON
application/pdf: Fichero PDF
image/jpeg: Imagen JPEG
application/rdf+xml: Documento RDF
text/csv: Documento CSV
text/turtle: Documento Turtle
. . .
4. JSON
JSON = Javascript Object Notation
Subconjunto de Javascript para representar datos
Independiente de lenguaje y fácil de analizar
Estandarizado: RFD 4627
Librerías para múltiples lenguajes:
C, C++, C#, Delphi, Haskell, Java, Lisp, Perl, PHP, Python,
Ruby, Scheme, etc.
http://json.org/
Douglas Crockford
6. JSON: Valores básicos
Cadenas de caracteres
Caracteres Unicode
Dentro de comillas dobles.
"Juan" "Año"
Números
Enteros, reales
Booleanos
true
false
Null
7. JSON: Valores compuestos
Objetos
Asociaciones de tipo clave : valor
Entre llaves { }
Ejemplo:
{ "nombre" : "Juan" , "edad" : 23 }
Arrays
Secuencias de valores
Pueden ser de diferentes tipos
Entre corchetes [ ]
[2, "tres", true]
Objetos y arrays pueden anidarse
9. JSON. JSON en Javascript
<script type="text/javascript"
src="http://www.json.org/json.js">
</script>
<script type="text/javascript">
x = [3, "tres"]
alert("Convertido en JSON: " + x.toJSONString())
alert("Analizando JSON...")
str = "[4, "cuatro"]"
r = str.parseJSON()
for (i=0; i < r.length; i++) {
alert("Elemento " + i + " = " + r[i])
}
</script>
10. JSON. Uso en Ajax
var objeto;
var htr = new XMLHTTPRequest();
htr.open("GET",url,true);
htr.send(null);
htr.onreadystatechange = function () {
if (htr.readyState == 4 ) {
if (htr.status == 200) {
objeto = eval("{" + htr.responseText + "}" );
}
else {
alert("Problema con la URL");
}
}
} Problemas de seguridad al utilizar eval.
Recomendación:
Utilizar parseJSON()
12. JSON. Comparación con XML
Ventajas
Analizador de JSON puede ser más eficiente
Facilidad de procesamiento
Utilización en muchas APIs
Legibilidad similar a XML
Retos
Validación: JSON Schema no es muy popular
¿Espacios de nombres?
¿Entidades?
13. YAML
YAML (YAML Ain't a Markup Language)
Propuesto por C. Evans (2001) como lenguaje
para representar datos
Objetivos:
Facilidad de edición manual
Representación de tipos de datos habituales en
lenguajes
Independiente del lenguaje
Incluye JSON como un subconjunto
14. YAML. Ejemplo
{ "pedido":
{ "producto": [ "codigo" : "R23" ],
"nombre" : "Rotulador RX2"
"cantidad" : 20,
"comentarios" : "Comprobad que escriben"
},
{ "producto": [ "codigo" : "G56" ],
"nombre" : "Grapadora Lin"
"cantidad" : 2,
"comentarios" : "Envuelta para regalo"
}
}
Estilo en línea
Idéntico a JSON
Estilo basado
en indentación
Evita comillas, llaves y
corchetes
---
pedido:
producto:
- codigo : R23
nombre : Rotulador RX2
cantidad : 20
comentarios : Comprobad que escriben
producto:
- codigo : G56
nombre : Grapadora Lin
cantidad : 2
comentarios : Envuelta para regalo
15. YAML. Tipos de datos y Referencias
Pueden definirse tipos de datos mediante !!
Referencias
&nombre: define un valor
*nombre: referencia a un valor
<<: Mezcla parejas de clave/valor
---
ingredientes:
Cabrales: &id001
nombre : Queso Cabrales
tipo: Queso
cantidad: !!integer 1
Edam:
<<: *id001
nombre : Queso Edam
---
ingredientes:
Cabrales: &id001
nombre : Queso Cabrales
tipo: Queso
cantidad: !!integer 1
Edam:
nombre : Queso Edam
tipo: Queso
cantidad: !!integer 1
16. YAML. Comparación con XML
Ventajas
Legibilidad para edición manual
Problemas
Espacios de nombres
Validación (Kwalify)
Cortar/pegar manteniendo indentación
17. SXML
SXML: Scheme & XML
Representar XML mediante S-Expresiones
S-Expresiones: desarrolladas para LISP (y Scheme)
LISP: Lenguaje funcional creado en 1958
(pedido (producto (@ (codigo "R23"))
(nombre "Rotulador")
(cantidad 20)
(comentarios "Comprobad que escriben")
)
(producto (@ (codigo "G56"))
(nombre "Grapadora Lin")
(cantidad 2)
(comentarios "Envuelta para regalo")
)
)
18. CSV
CSV = Comma Separated Values
Formato muy popular hojas de calculo y bases
de datos
Utilizado desde 1967
Se popularizó sin especificación estándar
CSV on the Web (CSVW): para añadir metadatos
Ejemplo:
codigo, nombre, cantidad, comentarios
R23, Rotulador, 20, Comprobad que escriben
G56, Grapadora, 2, Envuelta para regalo
19. CSV on the Web
Permite definir la estructura de ficheros CSV
Incluye tipos de datos basados en XML Schema
Herramienta: CSVLint
{ "fields": [ {
"name": "Codigo",
"constraints": { "required": true, "unique": true }
},
{ "name": "Nombre",
"description": "Nombre del producto",
"constraints": { "required": true }
},
{ "name": "Cantidad",
"title": "Cantidad",
"constraints": { "required": true,
"type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
}},
{ "name": "Comentarios",
"title": "Comentarios",
"constraints":{ "required": true }
}] }
codigo, nombre, cantidad, comentarios
R23, Rotulador, 20, Comprobad que escriben
G56, Grapadora, 2, Envuelta para regalo
20. RDF
Resource Description Framework
Basado en grafo
Declaraciones del tipo
Sujeto - predicado - objeto
Los predicados se identifican con URIs
Sujetos: URIs o nodos anónimos
Objetos: URIs, nodos anónimos ó literales
24. Comparación
Tecnología Validación Modelo de datos
XML DTDs
XML Schema
RelaxNG
Schematron
Árbol
Contenido mixto
Texto/etiquetas
Elementos ordenados
Atributos no ordenados
JSON JSON
Schema
Árbol
Objetos: clave/valor no ordenados
Arrays: contenido ordenado
CSV CSVW Tabla
Elementos ordenados
RDF ShEx
SHACL
Grafo
Arcos no ordenados
Uso de URIs para integración
Datos enlazados
Varias sintaxis: Turtle, JSON-LD,...