XML y DTDs

La sintaxis de la semántica es más
simple que la semántica de la sintaxis.

Esta columna es la segunda dedicada a XML y explica brevemente como definir un lenguaje usando un DTD (Document Type Definition), ahondando también en la diferencia entre la sintaxis y la semántica de un lenguaje.

Escribiendo un DTD

Explicaremos un DTD a través del ejemplo en la figura adjunta que define un lenguaje que permite estructurar información de libros. El DTD tiene dos partes principales. Primero se definen los elementos del lenguaje (nombres de las marcas) usando una gramática y operadores simples. Por ejemplo, se comienza definiendo un libro como una secuencia de otros elementos, algunos de ellos opcionales (?). En el caso de resumen y extracto, el operador | indica que sólo uno de los dos elementos debe existir. Luego se define cada elemento y en la mayoría de los casos el contenido es texto (#PCDATA). Hay algunos elementos que en realidad son listas de uno o más elementos y esto se indica con el símbolo +. Finalmente, en el caso del elemento cita, éste no tiene contenido (y por lo tanto se usará /> al final). La segunda parte del DTD especifica los atributos de cada elemento. En este caso, sólo cita tiene atributos, y para cada uno se detalla su nombre, tipo de valor y si es obligatorio u opcional. Un libro entonces podría ser descrito usando estos elementos. Dejamos como ejercicio al lector convertir la bibliografía adjunta a un texto marcado usando el DTD ejemplo y la columna pasada.

Sintaxis y Semántica

El DTD define la sintaxis del lenguaje pero no la semántica. La semántica esta implícita en los nombres de los elementos y sus atributos, pero no hay ninguna regla explícita que permita verificar que, por ejemplo, dentro de la marca autor, verdaderamente hay un autor. Para definir la semántica se pueden usar comentarios como los que tiene el ejemplo, pero en general esto no es suficiente. Luego, debe existir otro nivel de abstracción que permita describir la semántica. Por ejemplo, para precisar uno de los usos de XML mencionados en la columna pasada, RDF (Resource Description Framework) en realidad usa XML para definir el lenguaje de intercambio de objetos, pero tiene otros mecanismos de más alto nivel para definir la semántica de ellos.

Bibliografía:

Figura

< ?xml version="1.0"?>
< !DOCTYPE documento
[

< !ELEMENT record (num articulo autores titulo fuente
          tema (resumen|extracto) referencias? citas?)>
< !--  cada documento incluye estos 9 campos, los dos ultimos opcionales -->

< !ELEMENT num (#PCDATA)>
< !-- Numero serial -->

< !ELEMENT articulo (#PCDATA)>
< !-- Volumen y numero de documento en ese volumen -->

< !ELEMENT autores (autor+)>
< !ELEMENT autor (#PCDATA)>
< !-- Lista de autores  -->

< !ELEMENT titulo (#PCDATA)>
< !-- Titulo del documento -->

< !ELEMENT fuente (#PCDATA)>
< !-- Fuente bibliografica -->

< !ELEMENT tema (topico+)>
< !ELEMENT topico (#PCDATA)>

< !ELEMENT resumen (#PCDATA)>
< !ELEMENT extracto (#PCDATA)>

< !-- El resumen del documento, o si no tiene, un extracto del texto -->

< !ELEMENT referencias (cita+)>
< !!-- Lista completa de referencias -->

< !ELEMENT citas (cita+)>
< !-- Una lista de citas al documento -->

< !ELEMENT cita EMPTY>
< !ATTLIST cita 
	num CDATA #REQUIRED;
	autor CDATA #REQUIRED;
	publicacion CDATA #REQUIRED;
	fecha CDATA #REQUIRED;
        nota CDATA #OPTIONAL>
< !-- Una referencia/cita a un documento -->

]>


Si tiene preguntas o sugerencias, envíe e-mail a rbaeza@dcc.uchile.cl