Saltar a contenido

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
Atributos
Reutilización Limitada Alta (tipos complejos y globales)
Cardinalidad (* + ?) Sí (minOccurs, maxOccurs)
Uso actual Obsoleto Estándar moderno