XML, XSD y DTD
¿Qué es XML?
XML (eXtensible Markup Language) es un lenguaje de marcado diseñado para almacenar y transportar datos, no para mostrarlos.
Características clave
- Estructurado y legible por humanos y máquinas.
- Etiquetas definidas por el usuario.
- Separación entre contenido y presentación.
- Bien formado = sigue reglas básicas de sintaxis.
Reglas básicas de XML
Regla |
Ejemplo o Nota |
Un único elemento raíz |
<raiz>...</raiz> |
Etiquetas bien cerradas |
<etiqueta></etiqueta> o <etiqueta /> |
Anidamiento correcto |
<a><b></b></a> |
Atributos entre comillas |
<etiqueta attr="valor"/> |
Ejemplo general
<persona edad="30">
<nombre>Lucía</nombre>
<profesion>Ingeniera</profesion>
</persona>
DTD (Document Type Definition)
DTD Interno vs Externo
<!-- Interno -->
<!DOCTYPE persona [
<!ELEMENT persona (nombre, edad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
]>
<!-- Externo -->
<!DOCTYPE persona SYSTEM "persona.dtd">
Sintaxis de comandos DTD
Comando |
Descripción |
Ejemplo |
<!ELEMENT> |
Define un elemento |
<!ELEMENT libro (titulo, autor)> |
<!ATTLIST> |
Define atributos de un elemento |
<!ATTLIST libro genero CDATA #REQUIRED> |
#PCDATA |
Texto sin etiquetas |
<!ELEMENT titulo (#PCDATA)> |
* |
0 o más repeticiones |
<!ELEMENT capitulo (parrafo*)> |
+ |
1 o más repeticiones |
<!ELEMENT lista (item+)> |
? |
0 o 1 vez |
<!ELEMENT epilogo (texto?)> |
| |
O (alternativa) |
<!ELEMENT animal (perro | gato)> |
Valores de los atributos
Tipo de Atributo |
Declaración |
Descripción |
CDATA |
<!ATTLIST libro titulo CDATA #REQUIRED> |
Cualquier cadena de caracteres. |
ID |
<!ATTLIST usuario id ID #REQUIRED> |
Identificador único dentro del documento XML. |
IDREF |
<!ATTLIST pedido cliente IDREF #REQUIRED> |
Referencia a un atributo de tipo ID. |
IDREFS |
<!ATTLIST grupo miembros IDREFS #IMPLIED> |
Lista de referencias a atributos de tipo ID (separadas por espacios). |
NMTOKEN |
<!ATTLIST item codigo NMTOKEN #REQUIRED> |
Cadena sin espacios (nombre válido). |
NMTOKENS |
<!ATTLIST producto etiquetas NMTOKENS #IMPLIED> |
Lista de NMTOKEN separados por espacios. |
Enumerado |
<!ATTLIST genero tipo (ficción | ensayo | drama) "ficción"> |
Lista cerrada de valores permitidos. |
NOTATION |
<!ATTLIST imagen formato NOTATION (jpg | png) #REQUIRED> |
Indica el formato de datos no XML (menos usado actualmente). |
Valores predeterminados en atributos:
Valor |
Significado |
#REQUIRED |
El atributo es obligatorio. |
#IMPLIED |
El atributo es opcional. |
#FIXED |
El valor del atributo es fijo y no puede cambiar. |
"valor" |
Valor por defecto si no se especifica el atributo. |
Ejemplo
<!DOCTYPE producto [
<!ELEMENT producto (nombre, precio)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT precio (#PCDATA)>
<!-- Atributos del producto -->
<!ATTLIST producto
id ID #REQUIRED
categoria (electronica | hogar | ropa) "electronica"
destacado CDATA #IMPLIED
referencia IDREF #IMPLIED
etiquetas NMTOKENS #IMPLIED
>
]>
<producto id="p001" categoria="hogar" destacado="sí" etiquetas="nuevo oferta">
<nombre>Batidora 3000</nombre>
<precio>49.99</precio>
</producto>
<producto id="p002" referencia="p001">
<nombre>Accesorio Batidora</nombre>
<precio>15.00</precio>
</producto>
XSD (XML Schema Definition)
Sintaxis de comandos XSD:
Comando / Etiqueta |
Descripción |
Ejemplo |
<xs:element> |
Define un elemento |
<xs:element name="nombre" type="xs:string"/> |
<xs:complexType> |
Agrupa elementos o atributos |
<xs:complexType>...</xs:complexType> |
<xs:sequence> |
Orden estricto |
<xs:sequence>...</xs:sequence> |
<xs:choice> |
Alternativa entre elementos |
<xs:choice>...</xs:choice> |
type="xs:string" |
Tipo de dato |
xs:string , xs:integer , xs:date , etc. |
minOccurs / maxOccurs |
Cardinalidad |
minOccurs="0" maxOccurs="unbounded" |
<xs:attribute> |
Define un atributo |
<xs:attribute name="id" type="xs:ID"/> |
Ejemplo práctico
<!-- XML -->
<producto codigo="P001">
<nombre>Ratón</nombre>
<precio>15.99</precio>
</producto>
<!-- XSD -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="producto">
<xs:complexType>
<xs:sequence>
<xs:element name="nombre" type="xs:string"/>
<xs:element name="precio" type="xs:decimal"/>
</xs:sequence>
<xs:attribute name="codigo" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
DTD vs XSD: Esquema Resumen
Concepto |
DTD |
XSD |
Sintaxis |
Propia, no XML |
Basada en XML |
Tipado de datos |
No |
Sí (string, int, etc.) |
Validación |
Básica |
Precisa y detallada |
Namespaces |
No |
Sí |
Atributos |
Sí |
Sí |
Reutilización |
Limitada |
Alta (tipos complejos y globales) |
Cardinalidad (* + ? ) |
Sí |
Sí (minOccurs, maxOccurs) |
Uso actual |
Obsoleto |
Estándar moderno |