alternativas a xml json, yaml, sxml, csv,...

24
Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio Labra Gayo Depto. Informática Universidad de Oviedo

Upload: others

Post on 15-Sep-2019

32 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

Alternativas a XMLJSON, YAML, SXML, CSV, RDF

Jose Emilio Labra Gayo

Depto. Informática

Universidad de Oviedo

Page 2: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

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 HTMLtext/xml, application/xml : Documento XMLapplication/json: Documento JSONapplication/pdf: Fichero PDFimage/jpeg: Imagen JPEGapplication/rdf+xml: Documento RDFtext/csv: Documento CSVtext/turtle: Documento Turtle. . .

Page 3: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

Alternativas a XML

Varias alternativas a la sintaxis XML

JSON

YAML

SXML

CSV

RDF

Page 4: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON

JSON = Javascript Object NotationSubconjunto de Javascript para representar datos

Independiente de lenguaje y fácil de analizarEstandarizado: 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

Page 5: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON. Ejemplo

Editores JSON: http://www.jsoneditoronline.org/http://braincast.nl/samples/jsoneditor/

{ "pedido": { "fecha": "2017-05-29","productos": [ { "codigo" : "R23" ,

"nombre" : "Rotulador","cantidad" : 20

},{ "codigo" : "G56" ,

"nombre" : "Grapadora","cantidad" : 2

}]

}}

Page 6: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON: Valores básicos

Cadenas de caracteresCaracteres UnicodeDentro de comillas dobles.

"Juan" "Año"

NúmerosEnteros, reales

Booleanos true false

Null

Page 7: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON: Valores compuestos

Objetos Asociaciones de tipo clave : valorEntre llaves { }Ejemplo:

{ "nombre" : "Juan" , "edad" : 23 }

ArraysSecuencias de valoresPueden ser de diferentes tiposEntre corchetes [ ]

[2, "tres", true]

Objetos y arrays pueden anidarse

Page 8: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

{ "pedido": { "fecha": "2017-05-29","productos": [ { "codigo" : "R23" ,

"nombre" : "Rotulador","cantidad" : 20

},{ "codigo" : "G56" ,

"nombre" : "Grapadora","cantidad" : 2

}]

}}

JSON. Estructura jerárquica

Documentos JSON tienen estructura de árbol

"pedido"

"productos""fecha"

"2017-05-29"0 1

"código""nombre"

"cantidad"

"G56" "Grapadora" 2

"código""nombre"

"cantidad"

"R23" "Rotulador" 20

Page 9: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

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>

Page 10: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

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()

Page 11: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON SchemaPermite validar documentos JSON

Especificación en IETF: http://json-schema.org/

{"type": "object","properties": {"pedido": { "type": "object", "properties": { "fecha": { "type": "string", "format": "date-time" },"productos": { "type": "array", "minItems": 1, "items": { "type": "object","properties": {

"código": {"type": "string", "pattern": "[A-Z]\\d{2}" },"nombre": {"type": "string"},"cantidad": { "type": "integer", "minimum": 1 }

},"required": ["código", "cantidad" ]

}}},"required": ["fecha", "productos"]

}}}

{ "pedido": { "fecha": "2017-05-29","productos": [ { "codigo" : "R23" ,

"nombre" : "Rotulador","cantidad" : 20

},{ "codigo" : "G56" ,

"nombre" : "Grapadora","cantidad" : 2

}]}}

Page 12: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON. Comparación con XML

VentajasAnalizador de JSON puede ser más eficienteFacilidad de procesamiento

Utilización en muchas APIs

Legibilidad similar a XML

RetosValidación: JSON Schema no es muy popular¿Espacios de nombres?¿Entidades?

Page 13: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

YAML

YAML (YAML Ain't a Markup Language)Propuesto por C. Evans (2001) como lenguaje para representar datosObjetivos:

Facilidad de edición manualRepresentación de tipos de datos habituales en lenguajesIndependiente del lenguajeIncluye JSON como un subconjunto

Page 14: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

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 RX2cantidad : 20comentarios : Comprobad que escriben

producto:- codigo : G56 nombre : Grapadora Lincantidad : 2comentarios : Envuelta para regalo

Page 15: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

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: &id001nombre : Queso Cabralestipo: Quesocantidad: !!integer 1

Edam: <<: *id001nombre : Queso Edam

---ingredientes:

Cabrales: &id001nombre : Queso Cabralestipo: Quesocantidad: !!integer 1

Edam: nombre : Queso Edamtipo: Quesocantidad: !!integer 1

Page 16: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

YAML. Comparación con XML

VentajasLegibilidad para edición manual

ProblemasEspacios de nombresValidación (Kwalify)Cortar/pegar manteniendo indentación

Page 17: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

SXML

SXML: Scheme & XMLRepresentar XML mediante S-ExpresionesS-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")

))

Page 18: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

CSV

CSV = Comma Separated ValuesFormato muy popular hojas de calculo y bases de datos

Utilizado desde 1967Se popularizó sin especificación estándarCSV on the Web (CSVW): para añadir metadatos

Ejemplo:

codigo, nombre, cantidad, comentariosR23, Rotulador, 20, Comprobad que escribenG56, Grapadora, 2, Envuelta para regalo

Page 19: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

CSV on the WebPermite 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, comentariosR23, Rotulador, 20, Comprobad que escribenG56, Grapadora, 2, Envuelta para regalo

Page 20: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

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

Page 21: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

Ejemplo en RDFprefix schema: <http://schema.org/>prefix : <http://ejemplo.org/>prefix dbr: <http://dbpedia.org/resource/>

:p1 a schema:Order ;schema:orderDate "2017-05-29T23:00:00Z" ;schema:orderedItem :item1, :item2 .

:item1 a schema:Product ;schema:identifier "R23" ;schema:name "Rotulador" ;schema:orderQuantity 20 ;schema:sameAs dbr:Marker_pen .

:item2 a schema:Product ;schema:identifier "G56" ;schema:name "Grapadora" ;schema:orderQuantity 2 ;schema:sameAs dbr:Stapler .

Page 22: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

Validación de RDF

Alternativas: Shape Expressions, SHACL

:p1 a schema:Order ;schema:orderDate "2017-05-29T23:00:00Z";schema:orderedItem :item1, :item2 .

:item1 a schema:OrderItem ;schema:identifier "R23" ;schema:name "Rotulador" ;schema:orderQuantity 20 ;schema:sameAs dbr:Marker_pen .

:item2 a schema:OrderItem ;schema:identifier "G56" ;schema:name "Grapadora" ;schema:orderQuantity 2 ;schema:sameAs dbr:Stapler .

<Order> {a [schema:Order] ;schema:orderDate xsd:dateTime ;schema:orderedItem @<Item>+}

<Item> { schema:identifier xsd:string ;schema:name xsd:string ;schema:orderQuantity xsd:integer;schema:sameAs IRI}

Page 23: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

JSON-LDRepresentación de RDF en JSON

https://json-ld.org/{ "@context": "http://ejemplo.org/contexto.jsonld", "@graph": [

{ "@id": ":p1","productos": [ {"@id": ":item1" }, {"@id": ":item2" } ]},

{"@id": ":item1", "codigo": "R23","nombre": "Rotulador","cantidad": 20,"ref": "dbr:Marker_pen"},{"@id": ":item2", "codigo": "G56","nombre": "Grapadora","cantidad": 2,"ref": "dbr:Stapler"}

]}

{"@context": "http://ejemplo.org/contexto.jsonld" {"": "http://ejemplo.org/", "schema": "http://schema.org/", "dbr": "http://dbpedia.org/resource/", "xsd": "http://www.w3.org/2001/XMLSchema#", "productos": {"@id": "schema:orderItem" },"nombre": { "@id": "schema:name" },"codigo": {"@id": "schema:identifier" },"cantidad": {"@id": "schema:orderQuantity" },"ref": {"@id": "schema:sameAs" },}

}

Page 24: Alternativas a XML JSON, YAML, SXML, CSV, RDFdi002.edv.uniovi.es/~labra/cursos/presentaciones/16_OtrosFormatos_JSON.pdf · Alternativas a XML JSON, YAML, SXML, CSV, RDF Jose Emilio

ComparaciónTecnología

Validación TransformaciónConsulta

Modelo de datos

XML DTDsXML SchemaRelaxNGSchematron

XPathXQuery

ÁrbolContenido mixto

Texto/etiquetasElementos ordenadosAtributos no ordenados

JSON JSON Schema

JSonPath ÁrbolObjetos: clave/valor no ordenadosArrays: contenido ordenado

CSV CSVW SQL TablaElementos ordenados

RDF ShExSHACL

SPARQL GrafoArcos no ordenadosUso de URIs para integraciónDatos enlazadosVarias sintaxis: Turtle, JSON-LD,...