web_XML_W3C_DTD_XMLSchema
web_XML_W3C_DTD_XMLSchema
Instrucciones de
procesamiento
Declaraciones de tipos de
documento
Referencias de Entidades
Comentarios
Secciones CDATA
Espacio de nombres
Etiquetas de Elemento
<nombre>Fernando Damián</nombre>
Siempre empieza con una <etiqueta> que puede contener atributos o no, y
termina con una </etiqueta> que debe tener el mismo nombre.
Etiquetas de Elemento
Un elemento puede estar vacío, por lo que no tiene contenido. Por ejemplo;
<identificador DNI="23123244"/>
<linea-horizontal/>
Los elementos pueden tener atributos, que son una manera de incorporar
características o propiedades a los elementos de un documento.
Al igual que en otras cadenas literares de XML, los atributos pueden estar
marcados entre comillas simples (') o doble ("). Cuando se usa uno para
delimitar el valor del atributo, el otro tipo se puede usar dentro.
<gato><nombre>Micifú</nombre><raza>Persa</raza></gato>
<gatoraza="Persa">Micifú</gato>
<gato raza="Persa" nombre="Micifú"/>
Instrucciones de procesamiento
<?xml version=" 1.0 " encoding=" UTF-8 " standalone= " yes "?>
<ficha>
<nombre> Angel </nombre>
<apellido> Barbero </apellido>
<direccion> c/Ulises, 36 </direccion>
</ficha>
Lo primero que tenemos que observar es la primera línea. Con ella deben empezar todos
los documentos XML, ya que es la que indica que lo que la sigue es XML. Aunque es
opcional, es recomendable incluirla. Puede tener varios atributos, algunos obligatorios y
otros no:
<!DOCTYPE lista_de_personas [
<!ELEMENT lista_de_personas (persona*)>
<!ELEMENT persona (nombre, fechanacimiento?, sexo?, numeroseguridadsocial?)>
<!ELEMENT nombre (#PCDATA) >
<!ELEMENT fechanacimiento (#PCDATA) >
<!ELEMENT sexo (#PCDATA) >
<!ELEMENT numeroseguridadsocial (#PCDATA)>
]>
<lista_de_personas>
<persona>
<nombre>José García</nombre>
<fechanacimiento>25/04/1984</fechanacimiento>
<sexo>Varón</sexo>
</persona>
</lista_de_personas>
Declaración de Tipo de Documento
Ejemplos:
<!DOCTYPE HTML PUBLIC "-/ /W3C/ /DTD HTML 3.2 Final/ /EN">
Entidades internas
También llamadas macros ó constantes de texto, las entidades internas son las que se
asocian a una cadena de caracteres. Se referencian única y exclusívamente desde el
fichero.
< Es sustitído por el símbolo < , > Es sustitído por el símbolo > , & Es sustitído
por el símbolo & , ' Es sustitído por el símbolo ' , " Es sustitído por el
símbolo "
Existe otra construcción llamada CDATA (Character DATA) en XML que permite especificar
datos, utilizando cualquier carácter, especial o no, sin que se interprete como marcado
XML.
Como hemos visto dentro de una sección CDATA podemos poner cualquier cosa, que no
será interpretada. Existe una excepción y es la cadena "]]>" con el que termina el bloque
CDATA. Esta cadena no puede utilizarse dentro de una secció CDATA.
Espacios de Nombres
<?xml version="1.0"?>
<cli:cliente xmlns:cli='http://www.dominio.org/Espacio_de_nombres_XML/cliente'
xmlns:ped='http://www.dominio1.org/Espacio_de_nombres_XML/pedido'>
<cli:numero_ID>1232654</cli:numero_ID>
<cli:nombre>Fulanito de Tal</cli:nombre> <cli:telefono>99999999</cli:telefono>
<ped:pedido>
<ped:numero_ID>6523213</ped:numero_ID>
<ped:articulo>Caja de herramientas</ped:articulo> <ped:precio>187,90</ped:precio>
</ped:pedido>
</cli:cliente>
Un espacio de nombres se declara usando el atributo XML reservado xmlns, cuyo valor
debe ser un identificador uniforme de recurso.
Por ejemplo:
xmlns="http://www.w3.org/1999/xhtml"
Introducción Elementos Atributos
Diseño y
Entidades Comentarios
Validación
Una DTD indica:
Qué elementos pueden ser utilizados en un tipo de documento
específico
Cuales son obligatorios y cuales opcionales
Cuales son repetibles y cuales no
En qué orden deben aparecer
Cómo deben anidarse los elementos que conforman un documento
Entidades de carácter
Se utilizan en lugar de caracteres especiales (acentos, mark
up, etc.) difíciles de introducir en el teclado o que se
codifican de forma diferente en distintas plataformas.
En el documento se hará referencia a las entidades
escribiendo su código ASCII entre los caracteres &# y ;,
por ejemplo:
<ciudad>Alcalz de Henares</ciudad>
XML incluye entidades predefinidas para los caracteres <,
>, &, „ y “
Para definir entidades para otros caracteres, tenemos que
conocer su código Unicode (ISO 10646)
Se puede utilizar el código decimal (precedido por &#) o el
hexadecimal (precedido por &#x) seguidas de ;
Predefinidas en XML
lt <
Otras entidades útiles
gt >
aacute
apos „ eacute
quot “ iacute
amp & oacute
uacute
Aacute
Eacute
Iacute
Oacute
Uacute
Entidades de Texto Internas
<?xml version="1.0"?>
<?xml version="1.0"?>
<!DOCTYPE libro SYSTEM "libro.dtd"[
<!ELEMENT libro (capitulo)*>
<!ENTITY tema SYSTEM "tema.xml"> ]>
<!ELEMENT capitulo (#PCDATA)>
<libro>
<capitulo>&tema;</capitulo> <seccion id="1">
<capitulo>&tema;</capitulo> <b> ccc </b>
</libro> </seccion>
<seccion id="2">
<b> bbbb </b>
</seccion>
Entidades externas no procesables
Referencian cualquier archivo que no sea XML.
Se declaran utilizando el calificador SYSTEM o PUBLIC, y van acompañadas
de una notación (información adicional de estas entidades no analizables).
De esta forma, la declaración de contenido del elemento body equivale a (subp, pp, foot)
El „modelo de contenido‟ al que sustituye la entidad se podrá reutilizar en otras partes de
la DTD
<!DOCTYPE texto [
<!ENTITY % elemento-alf "<!ELEMENT ALF (#PCDATA)>">
...
%elemento-alf;
]>
También puede ser externa:
<!DOCTYPE texto [
<!ENTITY % elemento-alf SYSTEM "alf.ent">
...
%elemento-alf;
]
La DTD puede incluirse totalmente junto al
documento XML (¡cuidado, en XML documento es
la DTD y los datos!).
Elementos
Atributos
“Simples”
Elementos
Faceta/Restriciones
Complejos
Son una sintáxis alternativa para las DTDs, propuesta inicialmente
por Microsoft, …, etc.
Utilizan la sintáxis propia de XML.
Ventajas:
Fáciles de aprender (se usa también XML).
Soportan tipos de datos: numéricos, fechas…
Procesables igual que los documentos XML.
Un esquema XML define la estructura válida para un tipo de
documento XML (al igual que las DTD), es decir:
Los elementos que pueden aparecer en el documento
Los atributos que pueden utilizarse junto a cada elemento
Cómo se pueden anidar los elementos (padres e hijos)
El orden en el que deben aparecer los elementos hijos de un mismo
padre
El número permitido de elementos hijos
Si un elemento puede ser vacío o no
Tipos de datos para elementos y atributos
Valores por defecto y fijos para elementos y atributos
La propuesta inicial de Microsoft dio lugar a los
llamados “esquemas XDR”.
Posteriormente, el W3C diseñó un modelo de
esquemas que es la propuesta oficial y la que
debemos conocer (llamados “esquemas XSD”)
XSD se publicó como una recomendación el 31
de marzo del 2001 (se considera oficial desde
mayo)
XSD es más complejo que otras alternativas
anteriores, pero supuso un importante paso
hacia adelante en la estandarización de XML
XDS permite una mayor precisión en la
definición de tipos de datos mediante formatos
y facetas
Por ejemplo, la fecha:
<date type="date">1999-03-11</date>
¿es el 11 de marzo o el 3 de noviembre?
Los esquemas se definen como documentos
XML, en un documento aparte con extensión
.XSD
En los documentos XML que se basen en ese
esquema, incluiremos una referencia al archivo
.XSD
<?xml version="1.0“ encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "http://www.us.com/dtd/note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>
Don't forget me this weekend!
</body>
</note> <?xml version="1.0“ encoding="UTF-8"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://www.us.com/schema/note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>
Don't forget me this weekend!
</body>
</note>
<?xml version="1.0“ encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema”>
<xsd:element name="note">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="heading" type="xsd:string"/>
<xsd:element name="body" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Los elementos utilizados en la creación de un esquema
“proceden” del espacio de nombres:
http://www.w3.org/2001/XMLSchema
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
…..
…..
</xsd:schema>
Un elemento simple es un elemento que sólo
puede contener texto (cualquier tipo de dato),
pero no a otros elementos ni atributos
Para definir un elemento simple, utilizamos la
sintáxis:
<xsd:simpleType name="carType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Audi"/>
<xsd:enumeration value="Golf"/>
<xsd:enumeration value="BMW"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="letter">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-z]"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:pattern value="[a-zA-Z0-9]{2,8}"/>
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value=“\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:simpleType> </xsd:simpleType>
enumeration Establece una lista de valores
“aceptados”
fractionDigits Número de cifras decimales
length Número de caracteres
obligatorios
maxExclusive y maxInclusive Valor máximo de un rango
minExclusive y minInclusive Valor mínimo en un rango
maxLength y minLength Número máximo y mínimo de
caracteres permitidos
pattern Define una secuencia de
caracteres permitida
totalDigits Número exacto de dígitos
permitidos
whiteSpace Indica cómo se deben de
tratar los espacios en blanco
Son elementos que contienen a otros elementos
hijos, o que tienen atributos.
<xsd:element name="employee">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Podemos usar otra sintáxis para reutilizar la
“definición” de los elementos hijos en varios
elementos:
<xsd:complexType name="personinfo">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="personinfo">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="fullpersoninfo">
<xsd:complexContent>
<xsd:extension base="personinfo">
<xsd:sequence>
<xsd:element name="address" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="country" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Para declarar un elemento vacío con atributos, se
utilizará la siguiente sintáxis:
<xsd:element name="product">
<xsd:complexType>
<xsd:attribute name="prodid" type="xsd:positiveInteger"/>
</xsd:complexType>
</xsd:element>
<xsd:element name=“alumno">
<xsd:complexType mixed="true">
<xsd:attribute name="country" type="xsd:string" />
</xsd:complexType>
</xsd:element>
Para declarar un elemento con contenido “mixto”, basta con
añadir un atributo “mixed” al elemento xsd:complexType:
<xsd:element name="letter">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="orderid" type="xsd:positiveInteger"/>
<xsd:element name="shipdate" type="xsd:date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="person">
<xsd:complexType>
<xsd:all>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
El indicador xsd:choice indica que puede aparecer
sólo uno de los elementos que contiene
<xsd:element name="person">
<xsd:complexType>
<xsd:choice>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
minOccurs, maxOccurs se utilizan para indicar el número máximo y mínimo
de veces que puede aparecer un elemento hijo de un elemento complejo
El atributo maxOccurs puede tomar el valor “unbounded”, que indica que
no existe ningún límite
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="full_name" type="xsd:string"/>
<xsd:element name="child_name" type="xsd:string"
maxOccurs="10"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
En esquemas XML también contamos con un modelo
de contenido ANY, que permite incluir elementos no
declarados inicialmente en el esquema.
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
<xsd:any minOccurs=“1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
También contamos con un elemento que permite extender
el número de atributos de un elemento:
<xsd:element name="person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="es">
Esquema de hoja de pedido para Example.com.
Copyright 2000 Example.com. Todos los derechos reservados.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="empleado">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:sequence>
<xsd:sequence>
<xsd:element name="nombre" type="xsd:string" />
<xsd:element name="fechaingreso" type="xsd:string" />
<xsd:element name="salario" type="xsd:string" />
</xsd:sequence>
<xsd:choice>
<xsd:element name="fe1" type="xsd:date" />
<xsd:element name="fe2" type="xsd:date" />
</xsd:choice>
<xsd:element name="comentario" type="xsd:string“ minOccurs="1"
maxOccurs=“3" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<xsd:element name=”empleado”>
<xsd:complexType> Referencia a un elemento global
<xsd:sequence>
<xsd:element ref=”nombre” />
<xsd:element ref=”fechaingreso” />
<xsd:element ref=”salario” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”nombre” type="xsd:string" />
<xsd:element name=”fechaingreso” type="xsd:date"/>
<xsd:element name=”salario” type="xsd:double"/>
</xsd:schema>
Xmlspy® Professional Edition.
XMetaL
<vehiculos
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = "vehiculos.xsd" >
<nombre>coche</nombre>
<nombre>moto</nombre>
<nombre>carro</nombre>
</vehiculos>
Desarrolla el esquema DTD/XSD para este xml:
<persona
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = “persona.xsd" >
<?xml version="1.0"?>
…..
<datos>
<nombre>Pepe</nombre>
<apellidos>Garcia</apellidos>
<dni>25390952</dni>
</datos>
<comentario>buena gente...</comentario>
</persona>
Desarrolla el esquema DTD/XSD para este xml:
<Libro
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = " Libro.xsd" >
<?xml version="1.0"?>
……
<persona sexo="hombre" id="ricky">
<nombre>Ricky Martin</nombre>
<email>[email protected]</email>
<relacion amigo-de="leatitia">
</persona>
</listin>
Desarrolla el esquema DTD/XSD para este xml:
<listin
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation = listin.xsd" >
<?xml version="1.0"?>
……
<persona sexo="hombre" id="ricky">
<nombre>Ricky Martin</nombre>
<email>[email protected]</email>
<relacion amigo-de="leatitia">
</persona>
</listin>
Implementa los XSD para estas situaciones:
Por ejemplo:
Hidrógeno estado=“gas”, símbolo “H”, número atómico “1”, peso atómico “1.00794”, punto
ebullición unidades=“kelvin” “20.28”, densidad unidades=“gramos/centímetros cúbicos”
“0.0899”
Helio estado=“gas”, símbolo ”He”, número atómico “2”, peso atómico “4.0026, punto
ebullición unidades=“kelvin” “4.216”, densidad unidades=“gramos/centímetros cúbicos”
“0.1785”
Diseñar un SXD esquema XML para crear documentos
para el préstamo.
En cada documento se indicarán:
El nombre y apellidos del bibliotecario
Fecha del préstamo y de devolución
Datos del lector (id, nombre, apellidos, teléfono y dirección) La
dirección se dividirá en tipo de calle (que puede ser calle,
avenida o plaza), nombre calle, número, piso y letra, c.p.,
localidad y provincia
Un máximo de tres ejemplares en préstamo. Para cada uno de
ellos: el número de registro, título, autor(es)
El préstamo tendrá un atributo numérico que servirá como
identificador
Modificar un nuevo esquema, de forma
que no todos los elementos estén
anidados, utilizando las referencias.
Primero declaramos los elementos
simples. Luego declararemos los
elementos complejos indicando su
“modelo de contenido” mediante atributos
ref.
Crear un DTD/XSD xml para codificar datos de un pedido a
un proveedor. Se indicarán los datos del proveedor (nif,
nombre, dirección, localidad, téléfono), datos de la
biblioteca, y el listado de items que se han pedido.
Para cada item se indicará el número de unidades, precio,
y también el precio total del pedido y el número de items.
Crear un DTD/XSD xml para codificar datos de un pedido a
un proveedor. Se indicarán los datos del proveedor (nif,
nombre, dirección, localidad, téléfono), datos de la
biblioteca, y el listado de items que se han pedido.
Para cada item se indicará el número de unidades, precio,
y también el precio total del pedido y el número de items.