Curso de XML

QAML es una lenguaje XML creado especialmente para ayudar en la escritura, utilizaci�n y mantenimiento de las FAQ,Frequently Asked Questions", es decir, documentos en los que se da respuesta a las preguntas m�s frecuentes sobre un tema. Su uso est�muy extendidos por Internet.

La versi�n 1.0 de la QAML fue escrita for Justin Higgens de faq.org. Pero esta versi�n est� escrita en SGML. La versi�n 2.0 ya es en XML y ha sido escrita por Rick Jelliffe del Centro de Computaci�n de la Academia Sinica de Taipei en Taiwan.

En el momento de escribir estas l�neas se encuentra en versi�n 2.4 cuya DTD pod��s encontrar en el Web sobre XML de Rick Jelliffe, que por cierto es muy interesante.

No es una sintaxis XML desarrollada por ninguna organizaci�n, pero su uso es generalizado y utilizado en muchos Webs en las que tienen que escribir FAQ. Esto nos facilita el trabajo, ya que disponemos de:

  1. Las XSLT que nos permiten la conversi�n a HTML.
  2. La CSS que nos permite visualizarla en el IE5.
  3. Tambi�n tenemos escrita la XSLT que nos permite convertirla a XSL-FO para luego convertirla a PDF utilizando por ejemplo el FOP de James Tauber.
  4. Disponemos de el html2qaml.xom,que es un Omnimark script para generar desde HTML un QAML.
  5. etc..

Es una de las DTD que vamos a utilizar en la elaboraci�n de nuestro Web, por lo que a continuaci�n pasamos a estudiarla en detalle.

Como podemos observar:

<!ELEMENT faq (head, body)>

faq es el elemento ra�z, que contiene una cabecera y un head.

El head se reserva para colocar informaci�n (metadata) sobre el documento:

<!ELEMENT head 
    (title, version?, maintain+, hdr*, althdr*, archive*,label*, link*)>

Los �nicos elementos indispensables son:

  • title, que es el t�tulo de la FAQ.
  • maintain, que es el elemento en el que indicamos informaci�n sobre el autor o autores de la FAQ (pueden ser varios), teniendo que indicar obligatoriamente el nombre y el corr�o electr�nico del autor.
<!ELEMENT maintain (logo*, name+, email+, subject?, address?)>

En el elemento body escribimos el contenido del cuerpo (conjunto de preguntas y respuestas):

<!ELEMENT body (section+ | qna+)>

La funcionalidad del elemento section es la de permitir agrupar los elementos qna en conjuntos:

<!ELEMENT section (logo*, title, (qna+ | q+ | ( p | div | section)+)) >

Es obligatorio que empiece por un t�tulo.

El elemento qna es sin duda el m�s importante de esta DTD, ya que contiene la pregunta y sus respectivas respuestas.

<!ELEMENT qna (logo*, q, (logo?,topic?,author?,contributor*,a)+)>

Es obligatoria la pregunta, representada por el elemento q y la respuesta indicada en el elemento a.

Como podemos observar, las respuestas pueden ser varias: (....a)+ y pueden estar acompa�adas de informaci�n adicional: autor, contributor, etc.

El elemento qna puede tener los siguientes atributos:

<!ATTLIST qna 
  id       ID      #IMPLIED
  class    CDATA   #IMPLIED
  xml:lang NMTOKEN #IMPLIED                  
  date     CDATA   #IMPLIED>

ninguno de ellos obligatorio (todos son #IMPLIED) aunque algunos muy recomendables como es el id, que nos permite identificar de forma un�voca una qna.

Una pregunta (elemento q) est� formada esencialmente por texto (#PCDATA):

<!ELEMENT q (#PCDATA | link | span)*>

Una respuesta (elemento a) tiene que estar formada

<!ELEMENT a (p | div)+>

al menos por un elemento p o elemento div.

Por tanto, un ejemplo de XML m�nimo que se ajuste a esta DTD es:

XML QAML
<?xml version="1.0"?>
<!DOCTYPE faq SYSTEM "qaml.dtd">
<faq>
  <head>
      <title>Mi primer FAQ con la QAML.dtd</title>
      <maintain>
         <name>Joaquin Bravo</name>
         <email>[email protected]</email>
      </maintain>
  </head>
  <body>
    <qna id='q1'>
      <q>Aqui la pregunta</q>
      <a><p>Aqui la respuesta.</p></a>
    </qna>
  </body>
</faq>

Mediante el elemento p indicamos bloques de contenido. Tenemos que tener cuidado y no confundirlo con un simple p�rrafo, ya que el atributo class nos permite especificar un poco m�s las caracter�sticas de su contenido.

<!ATTLIST p  id ID  #IMPLIED
             class  CDATA   #IMPLIED
             title  CDATA   #IMPLIED
             xml:lang NMTOKEN #IMPLIED  
             alt      CDATA   #IMPLIED                
             date     CDATA   #IMPLIED 
             xml:space ( default | preserve )  #IMPLIED >

Como podemos ver no es obligatorio, y tampoco tiene ning�n valor por defecto, es decir podemos poner el valor que queramos, y luego manipularlo de una manera u otra desde la aplicaci�n u hoja de estilos.

La autora de la DTD, cuando por ejemplo est� introduciendo un contenido que quiere que forme parte de una lista, da el valor li al atributo class.

 <p class="li">AAAA</p>
 <p class="li">BBBB</p>

Es una forma de trabajar que presenta ventajas e inconvenientes:

  • Permite que los documentos XML sean bastantes flexibles aunque tengan una DTD a la que ajustarse.
  • Pero tambi�n dificulta la reutilizaci�n de documentos XML, XSLT, etc.realizados por otras personas, ya que a priori no sabemos los valores que utilizan para el atributo class. Y m�s si tenemos en cuenta que este atributo se utiliza en varios elementos.

Adem�s de este atributo, como podemos observar el elemento p, posee m�s atributos que lo caracterizan:

  • id, mediante el cual lo podemos identificar de forma un�voca. Este atributo se utiliza en pr�cticamente todos los elementos.
  • title, que permite asociar un t�tulo a ese contenido.
  • xml:lang, mediante el cual podemos identificar el idioma en el que est� escrito.
  • alt, que permite asociar texto adicional sobre el contenido del p�rrafo.
  • date, que permite escribir la fecha cuando fue colocado.
  • xml:space, que indica c�mo deberemos tratar los espacios en blanco que se encuentran dentro del contenido.

Los elementos p se pueden agrupar mediante el elemento div.

<!ELEMENT div (p)+>

el cual debe estar formado por al menos un p�rrafo. Lo podemos utilizar por ejemplo para crear listas ordenadas o desordenadas, tal como muestra el siguiente ejemplo:

<div class="ul">
 <p class="li">AAAA</p>
 <p class="li">BBBB</p>
</div>

d�ndo al atributo class el valor ul. Si quisi�ramos que fuese ordenada, le pondr�amos el valor ol.

El contenido del elemento p es generalmente texto:

<!ELEMENT p (#PCDATA | link | span)*>

aunque, al igual que el elemento pregunta q, tambi�n puede llevar los elementos link y span.

Mediante el elemento link colocamos enlaces. Su contenido s�lo puede ser texto:

<!ELEMENT link (#PCDATA)>

y la direcci�n del enlace se coloca en el atributo href.

<!ATTLIST link id       ID      #IMPLIED
               class    CDATA   #IMPLIED                 
               xml:link CDATA   #FIXED "simple"        
               href     CDATA   #REQUIRED    
               alt      CDATA   #IMPLIED    
               role     CDATA   #IMPLIED
               title    CDATA   #IMPLIED
               show     (embed|replace|new) "new"
               actuate  (auto|user) "user"
               behavior CDATA   #IMPLIED> 

que como podemos observar es el �nico obligatorio (#REQUIERED).

Por tanto, un enlace tendr�a escrito en XML el siguiente aspecto:

<link href="http://www.altavista.com">altavista.</link>

Como podemos observar, tiene muchos m�s atributos, entre ellos el superutilizado class, pero dejaremos el estudio de estos atributos para m�s adelante ya que est�n muy relacionados con la especificaci�n XLink en la que se define c�mo tienen que ser los enlaces entre documentos XML.

Y, por �ltimo, mediante el elemento span caracterizamos partes del contenido dentro del elemento p. Su atributo m�s importante es el classcon el que podemos indicar que si el texto est� cursiva poni�ndole el valor i.

<span class="i">texto en cursiva</span>

Sin embargo debemos tener claro que este texto aparecer� en cursiva porque luego la aplicaci�n o XSLT que lo trate lo representar� como tal. La verdad es que luego, cuando nosotros lo pintemos, podremos ponerlo como m�s nos guste. Los valores que normalmente utiliza la autora de la DTD en sus ejemplos est�n enfocados a la presentaci�n y muy relacionados con el HTML y las CSS, pero nosotros, si queremos, podemos ponerle valores que identifiquen m�s categ�ricamente (sem�nticamente) el contenido de lo que califica. Por ejemplo, en lugar de i podr�amos poner el valor codigo.

Todav�a falta por describir algunos elementos y atributos, pero dejo como ejercicio estudiar con m�s detalle la DTD.Aunque con lo que se ha presentado hasta ahora, deben quedar claros la utilidad y el funcionamiento de esta DTD.

.�Ejercicio: FAQ en XML

Escribir una FAQ en XML sobre el tema seleccionado.

Soluci�n:

Para el Web de WML en castellano encontrar�is un FAQ sobre WAP.

El documento en formato XML pod�is obtenerlo aqu�.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO