UT4.7 Restaurante

Restaurante
XML Restaurante
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE restaurante SYSTEM '01.dtd'>
<restaurante nombre="Oro Burguer" ciudad="Benavente">
    <plato id="E01" tipo="vegetariano">
        <nombre>Ensalada de cecina y queso de cabra</nombre>
        <precio moneda="EUR">12.00</precio>
        <calorias>300</calorias>
        <ingredientes>
            <ingrediente>Mezclum lechugas</ingrediente>
            <ingrediente>Tomate de la huerta</ingrediente>
            <ingrediente>Vinagreta de arándanos</ingrediente>
            <ingrediente>Queso de cabra</ingrediente>
            <ingrediente>Frutos rojos deshidratados</ingrediente>
        </ingredientes>
        <disponibilidad>
            <local />
        </disponibilidad>
    </plato>
    <plato id="S0" tipo="carne">
        <nombre>Solomillo de ternera con foie</nombre>
        <precio moneda="EUR">18.00</precio>
        <calorias>580</calorias>
        <ingredientes>
            <ingrediente>Base de parmentier de patata trufado</ingrediente>
            <ingrediente>Medallon de solomillo ternera madurada</ingrediente>
            <ingrediente>foie micuit</ingrediente>
            <ingrediente>Salsa P.Ximenez</ingrediente>
        </ingredientes>
        <disponibilidad>
            <domicilio />
        </disponibilidad>
    </plato>
</restaurante>
DTD Restaurante
<!-- Elemento raíz restaurante que contiene uno o más platos -->
<!ELEMENT restaurante (plato+)>
<!--  atributos del restauranterequired obligatorio,implied opcional-->
<!ATTLIST restaurante
          nombre CDATA #REQUIRED
          ciudad CDATA #IMPLIED>
<!-- Cada plato contiene titulo, autores, anyo y genero -->
<!ELEMENT plato (nombre, precio, calorias?, ingredientes, disponibilidad)>
<!-- Atributo id obligatorio de tipo ID y tipo enum-->
<!ATTLIST plato
          id ID #REQUIRED
          tipo (carne | pescado | vegetariano) #IMPLIED>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT precio (#PCDATA)>
<!ATTLIST precio
          moneda CDATA "EUR">
<!ELEMENT calorias (#PCDATA)>
<!ELEMENT ingredientes (ingrediente+)>
<!ELEMENT ingrediente (#PCDATA)>
<!ELEMENT disponibilidad (local | domicilio)>
<!--
indica que el plato se puede consumir en el local o ser enviado.
Se declara como EMPTY porque no necesita contenido, solo su presencia
indica la disponibilidad.no contiene informacion adicional
-->
<!ELEMENT local EMPTY>
<!ELEMENT domicilio EMPTY>
XSD Restaurante
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="restaurante">
       <xs:complexType>
        <!--xs:sequence os elementos deben aparecer en ESTE ORDEN.si se cambia el orden el XML no será válido)-->
        <xs:sequence>
            <xs:element name="plato" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="nombre" type="xs:string"/>
                        <xs:element name="precio" type="xs:decimal"/>
                        <xs:element name="calorias" type="xs:integer"/>
                        <!-- elemento complejo con otros elementos dentro -->
                        <xs:element name="ingredientes">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ingrediente" type="xs:string" maxOccurs="unbounded"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                         <!--choice SOLO uno de estos elementos puede aparecer -->    
                         <xs:element name="disponibilidad">
                            <xs:complexType>
                                <xs:choice>
                                    <xs:element name="local"/>
                                    <xs:element name="domicilio"/>
                                </xs:choice>
                            </xs:complexType>
                         </xs:element>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:ID" use="required"/>
                    <!-- atributo opcional con valores permitidos -->
                    <xs:attribute name="tipo" use="optional">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="vegetariano"/>
                                <xs:enumeration value="pescado"/>
                                <xs:enumeration value="carne"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:attribute>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <!-- atributos del restaurante -->
        <xs:attribute name="nombre" type="xs:string" use="required"/>
        <xs:attribute name="ciudad" type="xs:string" use="optional"/>
       </xs:complexType> 
    </xs:element>
</xs:schema>
<!-- sequence	orden obligatorio
choice	solo uno
all	todos pero sin orden,solo 0 o 1 ocurrencia, no permite repeticiones-->