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-->