XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:documentation xml:lang="es-es">
<info>Este material se ha elaborado con Eclipse</info>
</xs:documentation>
</xs:annotation>
<!-- El esquema tendrá un elemento acta que coincide con el del ejemplar -->
<xs:element name="acta" type="actaT" />
<!-- Tipo de datos para el elemento acta -->
<xs:complexType name="actaT">
<xs:sequence>
<xs:element name="fecha" type="xs:date" />
<xs:element name="modalidad" type="modalidadT" />
<xs:element name="curso" type="cursoT" />
<xs:element name="tutor" type="datosPersonalesT" minOccurs="1" maxOccurs="2" />
<xs:element name="modulo" type="moduloT" minOccurs="1" maxOccurs="4" />
<xs:element name="normativa" type="normativaT" />
</xs:sequence>
<!-- Los atributos siguen a los elementos y no los preceden -->
<xs:attribute name="id" type="xs:string" fixed="0144"
use="required" />
<xs:attribute name="ciclo" type="cicloT" use="required" />
<xs:attribute name="eval" type="evalT" use="required" />
<xs:attribute name="tipo" type="tipoActaT" use="optional" />
</xs:complexType>
<!-- Definición de datos simples -->
<xs:simpleType name="modalidadT">
<xs:restriction base="xs:string">
<xs:enumeration value="presencial" />
<xs:enumeration value="distancia" />
<xs:enumeration value="ordinario" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="cursoT">
<xs:restriction base="xs:string">
<xs:length value="9" />
<xs:pattern value="20[0-9][0-9]-20[0-9][0-9]" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="dniT">
<xs:restriction base="xs:string">
<xs:length value="10" />
<!-- También podéis utilizar: <xs:pattern value="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[A-Z]" /> -->
<xs:pattern value="\d{8}-[A-Z]" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="cualificacionT">
<!-- También valdría <xs:restriction base="xs:positiveInteger"> -->
<xs:restriction base="xs:integer">
<xs:minExclusive value="1" />
<xs:maxInclusive value="10" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="cicloT">
<xs:restriction base="xs:string">
<xs:enumeration value="ASIR" />
<xs:enumeration value="DAM" />
<xs:enumeration value="DAW" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="evalT">
<xs:restriction base="xs:string">
<xs:enumeration value="1" />
<xs:enumeration value="2" />
<xs:enumeration value="3" />
<xs:enumeration value="FINAL" />
<xs:enumeration value="PE" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tipoActaT">
<xs:restriction base="xs:string">
<xs:enumeration value="presencial" />
<xs:enumeration value="telematica" />
</xs:restriction>
</xs:simpleType>
<!-- Tipos complejos (que contienen elementos anidados, elementos vacíos o con atributos) -->
<!-- Definición reutilizable del tipo de datos personales que contempla
ya los dos posibles órdenes -->
<xs:complexType name="datosPersonalesT">
<xs:choice>
<xs:sequence>
<xs:element name="nombre" type="xs:string" />
<xs:element name="apellido1" type="xs:string" />
<xs:element name="apellido2" type="xs:string" />
<xs:element name="dni" type="dniT" />
</xs:sequence>
<xs:sequence>
<xs:element name="apellido1" type="xs:string" />
<xs:element name="apellido2" type="xs:string" />
<xs:element name="nombre" type="xs:string" />
<xs:element name="dni" type="dniT" />
</xs:sequence>
</xs:choice>
</xs:complexType>
<!-- Respuesta a pregunta 4: Si en datos personales se permitieran los
4 elementos en cualquier orden se usaría all:
<xs:complexType name="datosPersonalesT">
<xs:all>
<xs:element name="nombre" type="xs:string" />
<xs:element name="apellido1" type="xs:string" />
<xs:element name="apellido2" type="xs:string" />
<xs:element name="dni" type="dniT" />
</xs:all>
</xs:complexType>
-->
<xs:complexType name="moduloT">
<xs:sequence>
<xs:element name="profesor" type="profesorT" />
<!-- normalmente hay un máximo en la matrícula, supongamos 50 (esto último no se incluía en el enunciado) -->
<xs:element name="alumno" type="alumnoT" minOccurs="0"
maxOccurs="50" />
</xs:sequence>
<xs:attribute name="codigo" type="xs:ID" use="required" />
</xs:complexType>
<!-- alumnoT extiende de datosPersonalesT añadiéndole un nuevo elemento -->
<xs:complexType name="alumnoT">
<xs:complexContent>
<xs:extension base="datosPersonalesT">
<xs:sequence>
<xs:element name="cualificacion" type="cualificacionT" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- profesorT extiende de datosPersonalesT añadiéndole un nuevo atributo -->
<xs:complexType name="profesorT">
<xs:complexContent>
<xs:extension base="datosPersonalesT">
<xs:attribute name="mod" type="xs:IDREF"
use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="normativaT">
<xs:attribute name="ref" type="xs:NMTOKEN"
use="required" />
</xs:complexType>
</xs:schema>
Comentarios
Publicar un comentario