Protocolos, Lenguajes y Estándares. 2 PROTOCOLOS, LENGUAJES Y ESTÁNDARES 2.1 Introducción A continuación, se explica de forma teórica los temas que ha sido necesario estudiar para desarrollar el proyecto: Protocolo HTTP. Lenguaje HTML. Lenguaje XML. Lenguaje XSL. DTD. Schemas. Lenguaje Visual Basic. DOM level 1. Lenguaje Perl. Estándar QTI (Questions & Test Interoperability) del IMS (Instructional Management System) para la interoperabilidad de las pruebas. 2.2 Protocolo HTTP HTTP (Hypertext Transfer Protocol) es el protocolo utilizado en las aplicaciones Cliente-Servidor, que articula los intercambios de información normalmente entre varios clientes y un servidor. Se basa en sencillas operaciones solicitud / respuesta que, producen la comunicación entre un cliente (un navegador) y un servidor Web. Un cliente establece la conexión con un servidor y envía un mensaje con los datos de la solicitud. El servidor le responde con un mensaje similar, que contiene el estado de la operación y su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso (clasificado por su descripción MIME) sobre el que actúan; cada objeto es conocido por su URL. • • • • • Las principales características del protocolo HTTP son : Se puede transmitir cualquier tipo de documento, respetando su formato original. Es un protocolo de nivel de aplicación con la ligereza, rapidez y simplicidad necesarias para sistemas de información distribuida y multimedia. Existen varios métodos, que un cliente puede utilizar para dialogar con el servidor: GET, para recoger un objeto; POST, para enviar información al servidor; HEAD, para solicitar las características de un objeto. Cada operación http implica una conexión con el servidor, que es liberada al término de la misma. Es decir, en una operación se puede recoger un único objeto. Es un protocolo que no mantiene estado. Es decir, no mantiene ninguna información sobre la conexión entre sucesivas transacciones. O lo que es lo mismo, el servidor tratará cada petición como una operación independiente del resto. 5 Protocolos, Lenguajes y Estándares. • Cada objeto al que se le aplican los verbos del protocolo está identificado a través de la información de situación al final de la URL. • El formato de los mensajes es muy simple ([Marshall, 1997]): una cabecera seguida de los datos con una línea en blanco separándolas. Los formatos de los mensajes petición y respuesta HTTP son similares y constan fundamentalmente de: o Una línea inicial compuesta de la versión de HTTP utilizada y de los siguientes campos dependiendo de su sentido: § Petición: Contiene el nombre del método utilizado (Get, Post, Put, etc) y el path del recurso solicitado. § Respuesta: Código de estado como resultado de la petición y una frase que lo describe. o Cero o más líneas de cabecera, con el formato: “nombre_cabecera:valor”. o Una línea en blanco. o El cuerpo del mensaje. Esta parte es opcional y en ella es donde viaja, por ejemplo, el recurso que pidió el cliente al hacer la petición. Si un mensaje HTTP incluye esta parte, suele haber líneas de cabecera. En concreto, el protocolo HTTP utiliza un tipo de encabezado MIME (Multiporpuse Internet Mail Extensions), tanto para las consultas al servidor como para sus respuestas para transmitir meta-información entre el cliente y el servidor. Si duda, el campo más importante en estas cabeceras es la denominada ContentType que le indica al cliente qué tipo de información está enviando el servidor: texto HTML, texto plano, imagen GIF (Graphics Interchange Format), JPEG (Join Photographics Experts Group), XML , sonido, etc. 2.3 Lenguajes de marcado para definir documentos hipertexto 2.3.1 Lenguaje HTML Es un lenguaje simple utilizado para crear documentos de hipertexto, con un formato de texto común, empleado para todos los sitios web y reconocible a través de cualquier sistema operativo. HTML no es un lenguaje de programación, sino un lenguaje de etiquetas derivado de un metalenguaje denominado SGML (Standard Generalized Markup Language) que fue aprobado por la ISO en 1986, pero empezó a gestionarse desde principios de los 70, y a su vez basado en el GML creado por IBM en 1969. HTML significa Hypertext Markup Language , “Hypertext” se refiere a que en un documento HTML puede ser codificado de forma que permita al lector acceder a otros documentos a través de enlaces en pantalla. El término “Markup” se refiere a la manera de dar formato a un texto, es decir, a través de marcas. 6 Protocolos, Lenguajes y Estándares. HTML estaba formado en origen, por un conjunto de instrucciones basado en etiquetas que permite definir la estructura del contenido de una página, es decir, para controlar cómo un texto es mostrado al cliente. Sin embargo, este lenguaje ha evolucionado permitiendo, por ejemplo, la incorporación de tablas, applets, la manipulación de imágenes, sonido, hojas de estilo, compatibilidad con los principales navegadores del mercado (Navegador de Netscape y Explorer de Microsoft), la integración con otras tecnologías, puesto que permite la inserción directa de código en lenguaje scripting como JavaScript. 2.3.2 Lenguaje XML El HTML es el cimiento de la Web. Cada página Web hace uso de HTML, ya que es el lenguaje que hace posible la compatibilidad de las prestaciones de hipertexto e hipermedia. El HTML se encuentra en la actualidad por su versión 4, pero tiene una serie de limitaciones. Con la finalidad de paliar las limitaciones de HTML el W3 Consortium ha desarrollado el XML (eXtensible Mark up Language) que es un metalenguaje (lenguaje para definir lenguajes) que aprovecha las innegables ventajas del HTML pero que permite realizar otras adicionales. La idea que subyace bajo el XML es la de crear un lenguaje muy general que sirva para muchas cosas. El HTML está diseñado para presentar información directamente a los humanos, y esto es sin duda algo bueno, pero es un lenguaje complicado de procesar para los programas informáticos. El HTML no es bueno porque no indica lo que esta representando, se preocupa principalmente de la presentación, sin indicar o diferenciar lo que está mostrando. El XML hace precisamente esto: describe el contenido de lo que etiqueta. La principal ventaja del XML es que etiqueta o identifica la información dejando de lado la presentación. Al estar identificada la información se pueden realizar operaciones con la misma, es decir, procesarla. Para procesar la información de un fichero XML se puede utilizar otro lenguaje de programación XSL. Este lenguaje permite transformar el contenido de un documento XML en formato de presentación HTML, o formatos de impresión como PDF (Postscript Data File). Ya que el XML es un metalenguaje que nos permite definir lenguajes, para definir la estructura y contenidos de los documentos se utiliza una DTD (Document Type Definition) ¿??? En ella se definen los elementos que conforman el documento y cómo deben estar organizados para que sea correcto. 2.3.3 Lenguaje XSL Es un lenguaje que nos permite definir una presentación o formato para un documento XML. Un mismo documento XML puede tener varias hojas de estilo XSL que lo muestren en diferentes formatos (HMTL, PDF, RTF, VRML, PostScript, sonido, etc) 7 Protocolos, Lenguajes y Estándares. La aplicación de una hoja de estilo XSL a un documento XML puede ocurrir tanto en un origen (por ejemplo un CGI que convierta XML en HTML para que este sea mostrado en un navegador conectado a un servidor de web), o en el mismo navegador (como es el caso del MS IE5 y Netscape 6) Básicamente XSL es un lenguaje que define una transformación entre un documento XML de entrada, y otro documento XML de salida. Una hoja de estilo XSL es una serie de reglas que determinan cómo va a ocurrir la transformación. Cada regla se compone de un patrón (pattern) y una acción o plantilla (template). XSL = XSLT + Xpath XSLT ( XSL Transformations) Define las acciones o transformaciones a realizar. Xpath Se encarga de localizar los elementos en el documento XML. Los elementos de XSLT son: <xsl:stylesheet></xsl:stylesheet> Se trata del elemento raíz de la hoja de estilos. Contiene a los elementos xml:templatey xml:script. <xsl:template match=”pattern”></xsl:template> Define la plantilla para un determinado conjunto de nodos de un cierto tipo o en un contexto determinado. <xsl:apply-template select=”patttern”/> Indica al procesador que busque la plantilla adecuada para el tipo y contexto de cada nodo seleccionado. <xsl:value -of select=”pattern”/> Inserta el valor del nodo seleccionado como texto. <xsl:attribute name=”nombre”>valor</xsl:attribute> Crea un atributo y lo añade al nodo de salida. <xsl:element name=”nmbre”></xsl:element> Crea un elemento con el nombre indicado. Esto es útil para evitar conflictos de nombres. <xsl:for-each order-by=”criterio” select=”pattern”> Repite una plantilla de forma iterativa. <xsl:if test=”expresión booleana”></xsl:if> Realiza un test, y ejecuta un template condicionalmente. <xsl:choose> <xsl:when test=”expresion1”>…</xsl:when> <xsl:when test=”expresion1”>…</xsl:when> <xsl:otherwise>…</xsl:otherwise> </xsl:choose> Selección de templates con condicionales múltiples. Especificación de plantillas (Xpath) / // . * @ @* Especifica el “hijo” inmediato. Puede referirse al raíz. Selecciona a “cualquier profundidad” en el árbol. Selecciona el contexto actual. Selecciona todos los elementos en el contexto actual. Selecciona el atributo. Selecciona todos los atributos del contexto actual. 8 Protocolos, Lenguajes y Estándares. 2.3.4 DTD DTD (Document Type Definitions). La creación de una definición de tipo de documento es como crear nuestro propio lenguaje de marcado, para una aplicación específica. La DTD define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas limitaciones para combinarlos. La DTD puede residir en un fichero externo, y quizá compartido por varios (puede que miles) de documentos. O bien, puede estar contenida en el propio documento XML, como parte de su declaración de tipo de documento. Los documentos XML que se ajustan a su DTD, se denominan “válidos”. El concepto de “validez” no tiene nada que ver con el de estar “bien formado”. Un documento “bien formado” simplemente respeta la estructura y sintaxis definidas por la especificación de XML. Un documento “bien formado” puede ser además “válido” si cumple las reglas de una DTD determinada. También existen documentos XML con una DTD asociada, en este caso no son “válidos”, pero tampoco “inválidos” ... Simplemente “bien-formados” o no. Declaraciones de tipo elemento: Los elementos son la base de las marcas XML, y deben de ajustarse a un tipo de documento declarado en una DTD para que el documento XML sea considerado válido. Las declaraciones de tipo elemento deben empezar con “<!ELEMENT” seguidas por el identificador genérico del elemento que se declara. A continuación tienen una especificación de contenido. <!ELEMENT receta(titulo, ingredientes, procedimiento)> Las especificaciones de contenido pueden ser de cuatro tipos: EMPTY, ANY, Mixed y Element. • • • • EMPTY: Puede no tener contenido. ANY: Puede tener cualquier contenido. Mixed: Puede tener caracteres de tipo datos o una mezcla de caracteres y subelementos especificados. Element: Solo puede contener sub-elementos especificados en la especificación de contenido. Para declarar que un tipo de elemento tenga contenido de elementos se especifica un modelo de contenido en lugar de una especificación de contenido mixto o una de las claves ya descritas. Así, si en elemento. , aparece un solo elemento, la definición sólo permite tener un solo Si aparece una coma, denota una secuencia de elementos. 9 Protocolos, Lenguajes y Estándares. | ? * + La barra vertical indica una opción. Indica Opcional (0 o 1 vez) Opcional y repetible (0 o más veces) Necesario y repetible ( 1 o más veces) Declaraciones de la lista de atributos Los atributos permiten añadir funcionalidad a los elementos de un documento. La principal diferencia entre los elementos y los atributos, es que los atributos no pueden contener sub-atributos. Se usan para añadir información corta sencilla y desestructurada. Otra diferencia entre los atributos y los elementos, es que cada uno de los atributos sólo se puede especificar una vez, y en cualquier orden. La declaración de los atributos empiezan con “<!ATTRLIST”, y a continuación del espacio en blanco viene el identificador del elemento al que se aplica el atributo, después el nombre del atributo, su tipo y su valor por defecto. Se puede obligar a que se defina el valor del atributo con la palabra #REQUIRED. En el caso de que no se desee que aparezca un valor por defecto se debe utilizar la palabra #IMPLIED • • • • Tipos de atributos: CDATA, NMTOKEN, Enumerados, ID e IDREF. CDATA: (character data) son los más sencillos y pueden almacenar cualquier cosa. NMTOKEN solo aceptan los caracteres válidos para mostrar cosas (letras, números, puntos, guiones, subrayados y los dos puntos.) Enumerados. Son aquellos que solo pueden contener un valor entre un número reducido de opciones. ID e IDREF: permite que un atributo tenga un nombre único que podrá ser referenciado por un atributo de otro elemento que sea de tipo IDREF. Declaraciones de Entidades XML hace referencia a objetos (ficheros, páginas Web, imágenes, cualquier cosa) que no deben ser analizados sintácticamente según las reglas de XML, mediante el uso de entidades. Se declaran en la DTD mediante el uso de <!ENTITY”. Una entidad puede no ser más que una abreviatura que se utiliza como una forma corta de algunos textos. Al usar una referencia a esta entidad, el analizador sintáctico reemplaza la referencia con su contenido. En otras ocasiones es una referencia a un objeto externo o local. Los tipos de entidades pueden ser: Internas o Externas, Analizadas o No Analizadas y Generales o Parámetro. Las entidades generales internas son básicamente abreviaturas definidas en la sección de la DTD del documento XML. Son siempre entidades analizadas, es decir, una vez reemplazada la referencia a la entidad por su contenido, pasa a ser parte del documento XML y como tal, es analizada por el procesador XML. Las entidades generales externas analizadas obtienen su contenido en cualquier otro sitio del sistema, ya sea otro archivo del disco duro, una página web o un objeto de 10 Protocolos, Lenguajes y Estándares. una base de datos. Se hace referencia al contenido de una entidad así mediante la palabra SYSTEM seguida de un URI (Universal Resource Identifier) Entidades no analizadas. Evidentemente si el contenido de la entidad es un archivo MPEG o una imagen GIF o un fichero ejecutable EXE, el procesador XML no debería interpretarlo como si fuera texto XML. Este tipo de entidades siempre son generales y externas. Entidades parámetro internas. Se denominan así a aquellas que solo pueden usarse en la DTD, y no en el documento XML. Para hacer referencia a ellas, se usa el símbolo “%” en lugar de “&” tanto para declararlas como para utilizarlas. Entidades parámetro externas estas pueden estar definidas externamente. 2.3.5 Schemas XML Un “Schema XML” es algo similar a un DTD porque define qué elementos puede contener un documento XML, cómo están organizados, qué atributos y de qué tipo pueden tener sus elementos. Las ventajas de los schemas frente a los DTDs son: • • • Usan sintaxis de XML, al contrario que los DTDs. Permiten especificar los tipos de datos. Son extensibles. La sintaxis de los schemas utiliza las siguientes definiciones: • • • • ElementType: Define el tipo y el contenido de un elemento, incluyendo los subelementos que pueda contener. AttributeType: Asigna un tipo y condiciones a un atributo. Attribute: Declara que un atributo previamente definido por AttributeType puede aparecer como atributo de un elemento determinado. Element: Declara que un elemento previamente definido por ElementType puede aparecer como contenido de otro elemento. Tal como se han definido es necesario empezar el schema definiendo los elementos más profundamente anidados dentro de la estructura jerárquica de los elementos del documento XML. Es decir se tiene que trabajar “de dentro hacia fuera”. 2.3.6 DOM Level 1 DOM ( Document Object Model) es un modelo que especifica la forma de acceder a los datos de un documento XML. DOM especifica un árbol jerárquico de nodos (elementos, comentarios, atributos, etc). DOM especifica un conjunto de primitivas para moverse por el árbol 11 Protocolos, Lenguajes y Estándares. Para utilizar MSXML.DLL se utiliza básicamente la interfaz IXMLDOMNode, aunque también se ha utilizado la interfaz IXMLDOMNodeMap. Estas interfaces permiten acceder a los diferentes nodos (elementos, atributos, texto, etc) Tipos de nodos: Existen 13 tipos de nodos que se definen con las siguientes etiquetas: NODE_ATTRIBUTE, NODE_CDATA_SECTION, NODE_COMMENT, NODE_DOCUMENT, NODE_DOCUMENT_FRAGMENT, NODE_DOCUMENT_TYPE, NODE_ELEMENT, NODE_ENTITY NODE_ENTITY_REFERENCE, NODE_INVALID, NODE_NOTATION, NODE_PROCESSING_INSTRUCTION, NODE_TEXT. Los métodos y propiedades de DOM importantes son: • • • • • • • • • • • • • • • • • • • nodeName : se trata de la propiedad que indica el nombre del nodo. nodeValue: devuelve el valor que contiene el nodo. childNodes: contiene una colección de nodos “hijos” del nodo considerado. Esta colección puede ser iterada por una construcción for each de Visual Basic. hasChildNodes: Propiedad booleana que indica si un nodo tiene “hijos”. firstChild / lastChild : Contienen referencias al primer y último “hijo” de un nodo. parentNode : Devuelve una referencia al “padre” del nodo. nextSibling / previusSibling : devuelve una referencia al siguiente o anterior “hermano” del nodo. attributes: devuelve una colección de nodos tipo NODE_ATTRIBUTE del nodo. appendChild: Añade un “hijo” sobre un nodo. closeNode : duplica un nodo “hijo”. getAttribute: Obtiene el valor de un atributo por su nombre. getElementsByTagName : Recupera los nodos que tienen por nombre uno dado. insertBefore : Permite insertar un nodo antes de otro dado. removeAttribute: Borra el atributo de un nodo definido por su nombre. removeChild: Elimina un nodo “hijo” dada la referencia. replaceChild: Reemplaza un nodo “hijo” por otro dada la referencia. selectNodes: Selecciona los nodos que dependen de uno dado por un patrón de búsqueda. selectSingleNode : Selecciona la primera ocurrencia de la búsqueda por un patrón. setAttribute: Establece el valor de un atributo dado el nombre. 12