Categorías destacadas
programacion php    
Artículo
16
¡votar!

 Curso de XML


QAML

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>jbravo@retemail.es</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í.

Publicado por:
Eduard Puigdemunt
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon