UT4.7 Festival

Festival
XML Festival
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE festival SYSTEM "07.dtd">
<festival xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="07.xsd">  
    <info>
        <warning>Cualquier parecido con la realidad es pura coincidencia (esto no debería existir)</warning>
        <ubicacion>Benavente, España</ubicacion>
        <capacidad>50000</capacidad>
        <website>www.rockfestbenavente.es</website>
    </info>

    <patrocinadores>
        <patrocinadorPrincipal>Cervezas El Ebro</patrocinadorPrincipal>
    </patrocinadores>

    <bandas>
        <banda id="BND-001">
            <nombre>ElXokas y su basura</nombre>
            <genero>Rock</genero>
            <miembros>4</miembros>
            <actuacion escenario="Iglesia del Carmen" hora="21:30:00"/>
            <merchandising>Bolsas de basura</merchandising>
        </banda>

        <banda id="BND-002">
            <nombre>Pereira</nombre>
            <genero>Electronica</genero>
            <miembros>1</miembros>
            <actuacion escenario="La Mota" hora="18:00:00"/>
            <merchandising>Castores con su cara</merchandising>
        </banda>

        <banda id="BND-003">
            <nombre>Infarruco y Juan de Dios</nombre>
            <genero>Flamenco</genero>
            <miembros>2</miembros>
            <actuacion escenario="Estadio Luciano Rubio" hora="20:00:00"/>
            <merchandising>Castores con su cara</merchandising>
        </banda>
    </bandas>
</festival>
DTD Festival
<!ELEMENT festival (info, patrocinadores, bandas)>
<!ATTLIST festival xmlns:xsi CDATA #IMPLIED
    xsi:noNamespaceSchemaLocation CDATA #IMPLIED>
<!ELEMENT info (warning,ubicacion, capacidad, website)>
<!ELEMENT warning (#PCDATA)>
<!ELEMENT ubicacion (#PCDATA)>
<!ELEMENT capacidad (#PCDATA)>
<!ELEMENT website (#PCDATA)>
<!ELEMENT patrocinadores (patrocinadorPrincipal | coPatrocinadores)>
<!ELEMENT patrocinadorPrincipal (#PCDATA)>
<!ELEMENT coPatrocinadores (#PCDATA)>
<!ELEMENT bandas (banda+)>
<!ELEMENT banda (nombre, genero, miembros, actuacion, merchandising?)>
<!ATTLIST banda id ID #REQUIRED>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT genero (#PCDATA)>
<!ELEMENT miembros (#PCDATA)>
<!ELEMENT actuacion EMPTY>
<!ATTLIST actuacion 
    escenario CDATA #REQUIRED
    hora CDATA #REQUIRED>

<!ELEMENT merchandising (#PCDATA)>
XSD Festival
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:annotation>
        <xs:documentation xml:lang="es">
            Schema XML para la gestión de un Festival de Música.
        </xs:documentation>
    </xs:annotation>

    <xs:simpleType name="TipoIdBanda">
        <xs:restriction base="xs:ID">
            <xs:pattern value="BND-[0-9]{3}"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="TipoMiembros">
        <xs:restriction base="xs:integer">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="20"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="TipoGenero">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Flamenco"/>
            <xs:enumeration value="Rock"/>
            <xs:enumeration value="Pop"/>
            <xs:enumeration value="Metal"/>
            <xs:enumeration value="Electronica"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="festival">
        <xs:complexType>
            <xs:sequence>
                
                <xs:element name="info">
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="warning" type="xs:string"/>
                            <xs:element name="ubicacion" type="xs:string"/>
                            <xs:element name="capacidad" type="xs:positiveInteger"/>
                            <xs:element name="website" type="xs:string"/>
                        </xs:all>
                    </xs:complexType>
                </xs:element>

                <xs:element name="patrocinadores">
                    <xs:complexType>
                        <xs:choice>
                            <xs:element name="patrocinadorPrincipal" type="xs:string"/>
                            <xs:element name="coPatrocinadores" type="xs:string"/>
                        </xs:choice>
                    </xs:complexType>
                </xs:element>

                <xs:element name="bandas">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="banda" minOccurs="1" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="nombre" type="xs:string"/>
                                        <xs:element name="genero" type="TipoGenero"/>
                                        <xs:element name="miembros" type="TipoMiembros"/>
                                        
                                        <xs:element name="actuacion">
                                            <xs:complexType>
                                                <xs:attribute name="escenario" type="xs:string" use="required"/>
                                                <xs:attribute name="hora" type="xs:time" use="required"/>
                                            </xs:complexType>
                                        </xs:element>
                                        
                                        <xs:element name="merchandising" type="xs:string" minOccurs="0"/>
                                    </xs:sequence>
                                    <xs:attribute name="id" type="TipoIdBanda" use="required"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>

            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>