16 alternativas xml

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

Upload: jose-emilio-labra-gayo

Post on 28-Jan-2018

166 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: 16 Alternativas XML

Alternativas a XMLJSON, YAML, SXML, CSV, RDF

Jose Emilio Labra Gayo

Depto. Informática

Universidad de Oviedo

Page 2: 16 Alternativas XML

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: 16 Alternativas XML

Alternativas a XML

Varias alternativas a la sintaxis XML

JSON

YAML

SXML

CSV

RDF

Page 4: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

JSON: Valores básicos

Cadenas de caracteresCaracteres UnicodeDentro de comillas dobles.

"Juan" "Año"

NúmerosEnteros, reales

Booleanos true false

Null

Page 7: 16 Alternativas XML

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: 16 Alternativas XML

{ "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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

YAML. Comparación con XML

VentajasLegibilidad para edición manual

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

Page 17: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

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: 16 Alternativas XML

ComparaciónTecnología Validación Modelo de datos

XML DTDsXML SchemaRelaxNGSchematron

ÁrbolContenido mixto

Texto/etiquetasElementos ordenadosAtributos no ordenados

JSON JSON Schema

ÁrbolObjetos: clave/valor no ordenadosArrays: contenido ordenado

CSV CSVW TablaElementos ordenados

RDF ShExSHACL

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