Validación de documentos¶
Indique si un nodo «x» puede tener un determinado contenido (y explique el por qué en caso de que no), sabiendo que su definición DTD es:
((a|b)?,c,d)
a
a c d
c d
a b c d
b c d
((a|b),c*,d?)
a d
d
a c c c
a
b b d
b c d
b d d
c c d
(((a,b,c)|c),a+,(b|d)?)
a a d
c a b
a b c b
a b a a b
c
c a
(((a|b)|(c|d)),(a,c)+,b?)
a b a c b
a a c a c
b d c a c b
d a c
c a c b
Dado el siguiente esquema JSON
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "array", "prefixItems": [ {"const": true}, {"type": "integer"} ], "items": { "type": "integer", "exclusiveMinimum": 0 } }
determine si los documentos sucesivos son válidos y, en caso de que no sea así, indique por qué:
[4, 5, 8]
[]
[true, 2, 0]
[true, 0]
[true, 1, 1]
[true]
[1]
[false, 1, 1]
Dado el siguiente esquema JSON
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "nombre": { "type": "string", "minLength": 1}, "tipo": { "enum": ["python", "javascript", "java", "c", "go"] }, "tamaño": { "type": "integer", "exclusiveMinimum": 0 } }, "required": ["nombre", "tipo"] }
indique sin usar un validador si los siguientes documentos son válidos:
{ "nombre": "script.js", "tipo": "javascript" }
{ "nombre": "consola.java", "tamaño": 1234 }
{ "nombre": "consola.java", "tamaño": 1234 }
{ "nombre": "consola.java", "tipo": "java", "ruta": "/usr/bin" }
{ "nombre": "servidor.c" }
Dado el siguiente esquema JSON
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "nombre": { "type": "string", "minLength": 1}, "interprete": {"type": "string", "minLength": 1}, "tipo": { "enum": ["python", "javascript", "java", "c", "go"] }, "tamaño": { "type": "integer", "exclusiveMinimum": 0 } }, "required": ["nombre"], "oneOf": [ { "required": ["interprete"], "not": { "required": ["tipo"] } }, { "required": ["tipo"], "not": { "required": ["interprete"] } } ], "additionalProperties": false }
indique sin usar un validador si los siguientes documentos son válidos:
{ "nombre": "servidor.c" }
{ "nombre": "servidor.c", "interprete": "/usr/bin/c", "tipo": "c" }
{ "nombre": "servidor.c", "interprete": "/usr/bin/c", "tamaño": 1234 }
{ "nombre": "servidor.c", "tipo": "c" }
{ "nombre": "servidor.c", "tipo": "c", "ruta": "/usr/local/bin" }
Y, ahora, escriba las gramáticas que permitan validar las soluciones diseñadas para los ejercicios sobre lenguajes de marcas:
uno de ellos cree versiones JSON, YAML y XML.
Diseñe un documento para almacenar las facturas generadas por una empresa. Téngase en cuenta que:
Cada factura tiene un código.
La factura también necesita la fecha de emisión.
En la factura aparecen los datos del cliente (dni, nombre, dirección, código postal, población).
De cada producto que se ha comprado debe aparecer la cantidad de productos comprados, la denominación y el precio unitario.
Se debe guardar el IVA de cada producto.
Si es necesario se indicará un descuento al importe total de la factura.
Diseñe un documento para almacenar la información sobre los préstamos de libros que se realizan en una biblioteca:
De cada libro guardamos varios datos: código ISBN, nombre, editorial, año de publicación, autor.
De cada libro podemos tener uno o varios ejemplares. Cada ejemplar se diferencia de otro por un código numérico.
Se prestan los ejemplares, y de cada préstamo hay que indicar el ejemplar del libro, el socio al que se ha prestado y la fecha de préstamo.
Del socio hay que guadar DNI, nombre y dirección.
Escriba un documento para almacenar los coches que tiene puestos a la venta un concesionario:
El concesionario se dedica a vender coches de distintos modelos de una misma marca de coches (es conveniente que en el documento quede constancia de cuál es esa marca).
De cada modelo es necesario recoger la cilindrada, los caballos de vapor, la velocidad máxima y el número de plazas.
También se quiere almacenar cuántos coches de cada modelo hay en el concesionario, identificar cada uno de ellos y saber los kilómetros que tiene (el concesionario también vende coches de segunda mano).
Un coche puede estar reservado o no.
Retome el ejemplo del ejercicio anterior, pero enriquezca el documento para que se conozca los del cliente que ha realizado una determinada reserva (nombre, dirección, tlfo).
Diseñe un documento que recoja la información referente a los Parques Nacionales de España, en especial:
Provincia y Comunidad Autónoma en la que se encuentra.
Extensión de terreno.
Presupuesto anual para su protección.
Fauna y flora a preservar:
Nombre común.
Nombre científico.
Número de ejemplares en cada parque (para fauna).
Peligro de extinción: alto, medio, bajo.
Un ayuntamiento desea recoger la información de los habitantes que hay en su municipio, de manera que de cada ciudadano se sepa:
Nombre y apellidos
Dirección
Teléfono
Lugar de nacimiento
Quién es el padre y quién la madre.
Diseñe un documento para almacenar la información de un gráfico vectorial en 2 dimensiones. Los elementos que pueden definirse en ese documento son:
Punto: Se definirá con dos coordenadas: x,y.
Circunferencia: se define por un centro (coordenadas x,y) y un radio.
Recta: se define por dos puntos: el inicial y el final.
Rectángulo: se define por dos puntos: la esquina superior derecha y la esquina superior izquierda.
Todo elemento debe estar inequívocamente identificado, y debe conocerse de alguna forma cuál es la unidad de medida (m, cm, etc.) en que están expresados todos los números que aparecen.