Buscar
Social
Ofertas laborales ES
« Spock alcanza la versión 1.0 | Main | Oracle está buscando feedback sobre la documentación de Java EE »
jueves
mar122015

Duda sobre XML Schemas

Buenos días,

Realizando cambios sobre unos XML Schemas que me pasaron, surgió el siguiente caso:

-Tenemos un fichero "elementoscomunes.xsd" que definen el tipo de dato "edad".

-Posteriormente, tenemos un fichero "alumnos.xsd" que contiene un alumno, a su vez, un alumno tiene un "profesor" y una "edad".

-A su vez, definimos el fichero "profesor.xsd" que contiene un profesor, a su vez, un profesor tiene n "alumnos" y una "edad".

Parece claro que profesor.xsd debe importar alumnos.xsd y elementoscomunes.xsd, y alumnos.xsd, a su vez, profesor.xsd y elementoscomunes.xsd....

Pero, ¿no véis cierta redundancia, (alumnos.xsd importa elementoscomunes.xsd dos veces, una de manera directa, y una segunda, a través de profesor.xsd), además de una posible redundancia cíclica (alumnos.xsd importa profesor.xsd y viceversa)?

¿Cómo resolverías este caso?

Muchas gracias por vuestra participación.

Un saludo,

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments (3)

Vemos una solución, que es la siguiente:

ElementosComunes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="edadType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xsd:simpleType>
</xsd:schema>

Alumnos.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="elementosComunes.xsd"/>
<xsd:include schemaLocation="profesor.xsd"/>
<xsd:complexType name="alumnoType">
<xsd:sequence>
<xsd:element name="profesor" type="profesorType" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="edad" type="edadType"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

Profesor.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="alumnos.xsd"/>
<xsd:complexType name="profesorType">
<xsd:sequence>
<xsd:element name="alumno" type="alumnoType" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="edad" type="edadType"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

La línea: <xsd:include schemaLocation="elementosComunes.xsd"/> puede ser incluida en cualquiera de los dos ficheros (profesor.xsd o alumno.xsd), vemos que sólo es necesario que esté definida una vez). La redundancia cíclica parece inevitable, entiendo que el compilador de XSD tiene en cuenta estos casos.

¿Más feedback por favor?

marzo 12, 2015 | Registered Commenterjcarmonaloeches

No quiero entrar en polémica, pero esa esquematización no responde al mundo real, y de ahí los problemas de dependencias cíclicas.

Si modelamos usuario y profesor sin incluir dependencias entre ellos, y luego modelamos clase, donde los incluímos a ambos resolvemos el problema (eliminando la dependencia cíclica) y reflejamos algo mejor la relación del mundo real: los alumnos asisten a una asignatura que se imparte en una clase (yo he buscado simplificar, eliminando la asignatura del modelo para mostrar lo que quería mostrar).
Además, que dos esquemas importen otro esquema no es un problema, también lo están haciendo con el del root: http://www.w3.org/2001/XMLSchema.

marzo 13, 2015 | Registered CommenterRamón Rial

Muchas gracias por el aporte Ramón, estoy de acuerdo en lo que dices.
El esquema, inicialmente, no es completamente correcto, sin embargo, en entornos productivos se observa que muchas veces las cosas no están hecho del todo correctas (normalizadas) y, por no permitirse cambios "grandes", es necesario en ocasiones conocer el modo de funcionamiento "interno" de las tecnologías para poder sobrevivir.
En cualquier caso, comparto 100% lo que dices.

¡Un saludo!

marzo 13, 2015 | Registered Commenterjcarmonaloeches

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>