alternativas a xml json, yaml, sxml, csv,...
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/1.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/8.jpg)
{ "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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022040207/5e0d17ebca5f251e85643d2c/html5/thumbnails/24.jpg)
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,...