Solución a Esquema XML do Bánco Simpático Galego
Ir a la navegación
Ir a la búsqueda
Esquema XML do Bánco Simpático Galego
Crea un esquema XML que valide o fichero XML creado no exercicio anterior.
Inclúense a continuación as especificacións que tiñamos para a creación do fichero XML e alguhna máis que deben ser consideradas para a realización deste exercicio.
- O banco consta de sucursais e de empregados. Para coñecer os empregados que traballan nunha sucursal debense utilizar claves.
- O banco ten o código 4444, e tamén queremos coñecer o seu nome completo, abreviatura, nome e apelidos do seu presidente, data de creación que debe ter 3 atributos: día, mes y año, e información das sucursais das que consta.
- Cada sucursal ten un código de catro díxitos e unha superficie que terá un atributo unidade que tomará sempre coma valor “m2”.
- Para cada sucursal queremos coñecer o personal do que consta. Os empregados identificaranse cun código, e ademáis para cada un dos empregados queremos coñecer o seu nome e apelidos (que serán obligatorios), o seu NSS (constará de 12 díxitos) e o cargo que ocupan na sucursal (que pode ser “Director”, “Interventor” e “Outros”).
- O formato do código será o seguinte:
- Como moito terá 6 caracteres
- Comenzará pola letra E seguida deuhna vogal en maiúsculas.
- A continuación poden vir: dous número do 3 ao 6, ou o número 9.
- Termina con duos ou tres letras en minúscula.
- No caso de non coñecer o cargo que ocupa unha persona, este debe tomar o valor nulo.
- Debes crear como mínimo dúas sucursais coa información correspondente.
NOTA. Valorarase o uso de diferentes tipos de datos, a reutilización de tipos e calquer outra característica propia dos XML Schemas.
Solución
XSD – banco.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wmh="http://www.wmhelp.com/2003/eGenerator" elementFormDefault="qualified">
<xs:group name="nomeCompleto">
<xs:sequence>
<xs:element name="nome" type="nomeCorto"/>
<xs:element name="apelido1" type="nomeCorto"/>
<xs:element name="apelido2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:element name="banco">
<xs:complexType>
<xs:sequence>
<xs:element name="nome" type="nomeLongo"/>
<xs:element ref="presidente"/>
<xs:element ref="dataCreación"/>
<xs:element ref="sucursais"/>
<xs:element ref="empregados"/>
</xs:sequence>
<xs:attribute name="codigo" type="tipoCodigo" fixed="4444"/>
<xs:attribute name="abreviatura" type="xs:string"/>
</xs:complexType>
<xs:key name="sucursal">
<xs:selector xpath="sucursais/sucursal"/>
<xs:field xpath="@codigo"/>
</xs:key>
<xs:keyref name="departamento" refer="sucursal">
<xs:selector xpath="empregados/empregado"/>
<xs:field xpath="sucursal"/>
</xs:keyref>
</xs:element>
<xs:element name="presidente">
<xs:complexType>
<xs:sequence>
<xs:group ref="nomeCompleto"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="dataCreación">
<xs:complexType>
<xs:attribute name="día" type="xs:string" use="required"/>
<xs:attribute name="mes" type="xs:string" use="required"/>
<xs:attribute name="ano" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="sucursais">
<xs:complexType>
<xs:sequence>
<xs:element ref="sucursal" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="sucursal">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="superficie"/>
</xs:choice>
<xs:attribute name="codigo" type="tipoCodigo"/>
</xs:complexType>
</xs:element>
<xs:element name="superficie">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="unidade" type="xs:string" fixed="m2"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="empregados">
<xs:complexType>
<xs:sequence>
<xs:element ref="empregado" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="empregado">
<xs:complexType>
<xs:sequence>
<xs:group ref="nomeCompleto"/>
<xs:element name="sucursal" type="xs:string"/>
<xs:element name="cargo" type="tipoCargo" nillable="true"/>
</xs:sequence>
<xs:attribute name="codigo" type="tipoCodigoEmpregado" use="required"/>
<xs:attribute name="NSS" type="tipoNSS" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="tipoCodigo">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="nomeCorto">
<xs:restriction base="xs:string">
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="nomeLongo">
<xs:restriction base="xs:string">
<xs:maxLength value="150"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tipoNSS">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tipoCodigoEmpregado">
<xs:restriction base="xs:string">
<xs:maxLength value="6"/>
<xs:pattern value="E[AEIOU]([3-6][3-6]|9)[a-z]{2,3}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tipoCargo">
<xs:restriction base="xs:string">
<xs:enumeration value="Director"/>
<xs:enumeration value="Interventor"/>
<xs:enumeration value="outros"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>