<?xml version="1.0" encoding="UTF-8"?>
<!--
===============================
Lenguajes de Marcas
Bloque 4, actividad 4.
Alumno: Miguel I. García López.
===============================
Notas:
+ La comunidad de vecinos, tiene obligatoriamente un nombre (atributo),
y un CIF.
+ Un vecino, tiene obligatoriamente un DNI, un NIE, o un CIF.
+ Los apellidos del vecino son opcionales (puede ser una empresa).
+ Un vecino, puede tener más de una vivienda.
+ Un vecino, puede tener plazas de garaje y/o trasteros.
+ Un vecino, puede estar al corriente con los pagos, o tener una o más
deudas pendientes (se utiliza choice).
+ Los importes se especifican como una serie de dígitos decimales, seguidos
de la coma decimal, 2 dígitos decimales, 1 espacio, y el símbolo del euro,
por ejemplo: 25,00 €.
+ Se ha de especificar obligatoriamente la fecha de alta del vecino en la base de datos.
+ Las fechas han de ser iguales o posteriores al 25/12/2000, que es la fecha de
constitución de la comunidad de vecinos.
+ El nombre del vecino, ha de tener una longitud máxima de 16 caracteres.
+ Los apellidos del vecino, han de tener una longitud máxima de 64 caracteres.
+ Las viviendas son de un tipo determinado (bajos, áticos, etc.).
+ El portal ha de especificarse como un número positivo,
por ejemplo: 125.
+ El campo "piso_letra" ha de especificarse como númeroletra,
por ejemplo: 5A.
+ El nº de cuenta bancaria se ha definido como opcional,
ya que un vecino puede preferir no tener domiciliados
los pagos (suponemos que la comunidad lo permite).
Si se indica, ha de ser un código IBAN normalizado, compuesto
por hasta 34 caracteres alfanumericos, siendo los 2 primeros
dos letras correspondientes al código del país, después
2 dígitos de control, y el resto de carácteres lo forman
dígitos y/o letras. Las letras son en mayúsculas.
También tiene un atributo opcional, que indica el nombre
del banco.
Por ejemplo, códigos IBAN aceptables son:
Reino Unido: GB29NWBK60161331926819
Suiza: CH9300762011623852957
España: ES9121000418450200051332
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- TipoNombre -->
<xsd:simpleType name="TipoNombre">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="16"/>
</xsd:restriction>
</xsd:simpleType>
<!-- TipoApellidos -->
<xsd:simpleType name="TipoApellidos">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="64"/>
</xsd:restriction>
</xsd:simpleType>
<!-- TipoDNI: 8 números + letra -->
<xsd:simpleType name="TipoDNI">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{8}[A-Z]" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoNIE: letra + 7 números + letra -->
<xsd:simpleType name="TipoNIE">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]\d{7}[A-Z]" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoCIF: letra + 7 números + (letra o número) -->
<xsd:simpleType name="TipoCIF">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]\d{7}([A-Z]|\d)" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoPortal: número entero positivo mayor que cero -->
<xsd:simpleType name="TipoPortal">
<xsd:restriction base="xsd:positiveInteger" />
</xsd:simpleType>
<!-- TipoPisoLetra: númeroletra -->
<xsd:simpleType name="TipoPisoLetra">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d[A-Z]" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoClaseVivienda -->
<xsd:simpleType name="TipoClaseVivienda">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="bajo" />
<xsd:enumeration value="piso" />
<xsd:enumeration value="atico" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoFecha: Mayor o igual que 25/12/2000 -->
<xsd:simpleType name="TipoFecha">
<xsd:restriction base="xsd:date">
<xsd:minInclusive value="2000-12-25" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoImporte: importe con 2 decimales y símbolo del euro -->
<xsd:simpleType name="TipoImporte">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{1,},\d{2} €" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoIban (nº de cuenta bancaria según norma IBAN) -->
<xsd:simpleType name="TipoIban">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]{2}\d{2}([A-Z]||\d){1,30}" />
</xsd:restriction>
</xsd:simpleType>
<!-- TipoCargo -->
<xsd:simpleType name="TipoCargo">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Presidente" />
<xsd:enumeration value="Vicepresidente" />
<xsd:enumeration value="Secretario" />
<xsd:enumeration value="Vocal" />
<xsd:enumeration value="Ninguno" />
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="comunidad">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="vecino" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nombre_completo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nombre" type="TipoNombre" />
<xsd:element name="apellidos" type="TipoApellidos" minOccurs="0" maxOccurs="1" />
<xsd:choice>
<xsd:element name="DNI" type="TipoDNI" />
<xsd:element name="NIE" type="TipoNIE" />
<xsd:element name="CIF" type="TipoCIF" />
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="vivienda" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="portal" type="TipoPortal" />
<xsd:element name="piso_letra" type="TipoPisoLetra" />
</xsd:sequence>
<xsd:attribute name="tipo_vivienda" default="piso" type="TipoClaseVivienda" />
</xsd:complexType>
</xsd:element>
<xsd:element name="plaza_garaje" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="trastero" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="situacion_pagos">
<xsd:complexType>
<xsd:choice>
<xsd:element name="al_corriente">
<xsd:complexType />
</xsd:element>
<xsd:element name="morosidad">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="deuda" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="concepto" type="xsd:string" />
<xsd:element name="importe" type="TipoImporte" />
</xsd:sequence>
<xsd:attribute name="fecha_deuda" type="TipoFecha" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="ccc" minOccurs="0" maxOccurs="1" >
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="TipoIban">
<xsd:attribute name="nombre_banco" type="xsd:string" use="optional" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="codigo" type="xsd:ID" use="required" />
<xsd:attribute name="fecha_alta" type="TipoFecha" use="required" />
<xsd:attribute name="cargo" type="TipoCargo" default="Ninguno" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="nombre_comunidad" type="xsd:string" use="required" />
<xsd:attribute name="cif_comunidad" type="TipoCIF" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
No hay comentarios:
Publicar un comentario