Representación del Conocimiento. Web Semántica Raúl Castro Fernández NIA:100061617 Universidad Carlos III de Madrid [email protected] RESUMEN En este documento se trata la relación de la web semántica con la representación del conocimiento, y se muestra una implementación a modo de ejemplo. Categorías y Descriptores I. [Knowledge Representation Formalisms and Methods]: Relation Systems [4], Representation Languages [5], Semantic Networks [7]. Términos Generales Documentación, Experimentación, Factores Humanos, Lenguajes, Teoría. Palabras Clave Representación del conocimiento, ontologías, taxonomías, web semántica, redes semánticas, grafos semánticos, RDF, RDFa, RDFS, OWL, SPARQL. 1.INTRODUCCIÓN La ingeniería del conocimiento es una disciplina perteneciente a la rama de la inteligencia artificial que busca el desarrollo de sistemas expertos, para lo cual se apoya en la representación del conocimiento de un determinado campo, bajo un sistema artificial. La web semántica se concibe con la idea de añadir a la web tradicional unos metadatos que describan la información contenida en la página. Estos metadatos se suponen entendibles por parte de las máquinas. La idea inicial es conseguir que mediante estos metadatos se amplíe la interoperabilidad entre las máquinas sin que el humano intervenga de una forma activa. Los metadatos semánticos que conforman la web semántica son una forma de representación del conocimiento, que deben ser cuidadosamente elegidos e introducidos en la práctica para alcanzar el fin último del concepto, el cual sería desde un punto de vista optimista, que la web en general conformase un sistema experto, y que éste sistema experto no se centrase en un dominio concreto, sino que aprovechase la universalidad de la web para alcanzar el máximo número de dominios. Aunque se conciba como utópico lo expuesto en el apartado anterior, sí es mucho más viable representar el conocimiento asociado a un determinado dominio, para la web semántica esto supone crear un vocabulario, que forme una red semántica, la cual a la vez sea capaz de representar todo el conocimiento asociado a un campo concreto. 2.ACERCAMIENTO A LA WEB SEMÁNTICA La web semántica por tanto, es el hecho de añadir metadatos semánticos al contenido de la página, del mismo modo que se añade el estilo con una hoja CSS, por ejemplo. Cuando observamos una web, entendemos lo que nos dice porque leemos el texto y sabemos en qué contexto esta esa web. Lo cual no supone ningún problema, puesto que conseguimos de la web lo que buscamos. Como ejemplo, cuando queremos buscar algo en concreto, y para ello usamos un buscador para acceder a la información que nos interesa, debemos indicar las palabras clave de esa información, puesto que, a grosso modo, el buscador explorará su base de datos buscando coincidencias de esas palabras para devolver un resultado. De esta manera, si escribimos: "universidad telecomunicaciones", el sistema nos devolverá aquellas páginas donde aparezcan tanto temas relacionados con universidad, como temas relacionados con telecomunicaciones, lo cual es un resultado lógico. El problema surge cuando nos interesa algo como por ejemplo, "las universidades donde exista carrera de telecomunicaciones", en este caso nos gustaría esta información en concreto y no toda la que devolvería el sistema al introducir: "universidad, telecomunicaciones", que sería la correspondiente a los términos 'universidad' y 'telecomunicaciones' por separado. Los metadatos, o más concretamente, la red semántica que conforma la base de la web semántica provee de una solución para este problema. Si dotamos a una página de una universidad de información semántica relevante, que asocie la carrera de telecomunicaciones a esa universidad, cuando introduzcamos algo como: "universidad que imparta telecomunicaciones", será mucho más sencillo para las máquinas ofrecer unos resultados mucho más acotados, de hecho, sólo nos ofrecerían las páginas de universidades donde se ofrezca la carrera de telecomunicaciones. Este sencillo ejemplo no es concluyente, puesto que con la potencia actual de los buscadores, entre los resultados que nos ofrecería el servidor, con seguridad, se encontraría alguno que respondiese a nuestras necesidades, pero si imaginamos un ejemplo más preciso como pueda ser: "aquellos pisos de 2 habitaciones en Punta Cana, con aire acondicionado, fachada de color rojo y cuyo precio se encuentre entre 700€ y 800€" deja de ser trivial encontrar información válida usando un buscador actual, en cambio, sería igual de fácil que en el caso anterior para la máquina encontrar la información correcta si nos apoyásemos en la web semántica, puesto que ésta clasificará esa información sobre una base de conocimiento, que será una red semántica. 3.REPRESENTACIÓN DEL CONOCIMIENTO En el grafo anterior estamos agrupando un conocimiento taxonómico, como son las relaciones entre los distintos seres del reino animal, así como varias propiedades que los caracterizan. Para llegar a la solución anterior, debemos, antes de nada, definir el conocimiento asociado a una web, los elementos que la conforman, así como las relaciones que asocian estos elementos entre sí. Para esto hacemos uso de metadatos, como se ha comentado más arriba. Estos metadatos los conforman triplas OAV (Objeto-Atributo-Valor). Por ejemplo si queremos expresar: "Coche de color rojo", la tripla asociada podría ser: "coche(O)tiene_color(A)_rojo(V)". Vemos que en el grafo, cada nodo corresponde a una entidad, ya sea gato(un ser), mamífero(una característica de algunos seres), o agua(refiriéndose al lugar donde vive, lo cual también termina por ser una característica). Para conformar el grafo estos nodos se unen mediante líneas etiquetadas con el nombre de ciertos atributos que relacionan un nodo con otro. Como podemos apreciar las líneas son dirigidas, indicando en qué sentido existe, o se cumple el atributo etiquetado en la propia línea. Si extrajésemos el conocimiento que el grafo representa, deberíamos ir a un nodo, que sería el objeto (O), seguir la línea que lo relacione con otro nodo, siendo la etiqueta de esta línea, el atributo (A), y finalmente llegaríamos al nodo destino, que sería el valor (V) para el que se cumple la relación. Para definir una red semántica que trate sobre un dominio concreto deberemos en primera instancia conocer los elementos que lo conforman y las relaciones entre ellos. Una vez conocemos esto, debemos crear los metadatos que describan ese conocimiento. Para esto creamos un esquema conceptual lo más fiel posible al conocimiento que hemos extraído. Este esquema conceptual recibe el nombre de ontología, y es una estructura fácilmente explorable por los sistemas, de modo que se facilita muchísimo la labor de búsqueda o clasificación de la información. Una ontología es por tanto una forma de representación del conocimiento. A continuación se muestra una red semántica, en el formato más habitual en el que lo podemos encontrar, que es representarlo como si de un grafo se tratara. De esta forma queda muy claro para un humano las relaciones entre los elementos que conforman la red semántica (nodos) y las relaciones entre ellos (las uniones entre nodos). De este modo extraemos las triplas OAV de una representación del conocimiento en forma de grafo. En este punto, si juntásemos todas las triplas OAV que hemos extraído del grafo, conformaríamos una ontología que trataría sobre las relaciones del reino animal, es decir, sobre la representación del conocimiento que buscamos. Con lo que tenemos hasta ahora, no obstante, no proveemos de una solución, una tecnología, con la que podamos representar este conocimiento en un formato más amigable para las máquinas, (un formato procesable por las máquinas) que al final en el caso de la web semántica, serán las que tengan que tratar los datos. En el siguiente apartado se verá las principales tecnologías que nos permitirán hacer esto y empezaremos algunos de los ejemplos implementados. 4. ACERCAMIENTO A LOS FORMATOS DE LA WEB SEMÁNTICA. Para conseguir que, tras haber recopilado el conocimiento que queremos representar, podamos expresarlo de tal forma que las máquinas sean capaces de procesarlo, el W3 lleva años trabajando en varios lenguajes, basados en su mayoría en la sintaxis XML que están definidos para tener la capacidad de representar las ontologías y vocabularios que veamos necesario a través de ir programando las triplas, y con algunas construcciones un poco más complejas. Estos lenguajes son RDFa, RDF, RDFS (una extensión de RDF), y OWL. Haré una pequeña presentación de cada uno de ellos para centrarnos luego en RDF para los siguientes ejemplos. En general, todos estos lenguajes, que en su forma normal se basan en una sintaxis XML, definen su sintaxis mediante espacios de nombres XML (XML namespaces). Además, en la cabecera de un archivo con algún lenguaje de este tipo, también podemos encontrar espacios de nombres XML definidos e implementados por terceros, que se pueden incluir en cualquier otro fichero para ayudar a formar una ontología. Por ejemplo, si queremos hacer una ontología sobre marcas de motos, modelos y motor, quizá exista alguien que previamente haya definido y escrito una ontología sobre las piezas de la moto, de su motor, y en ese caso podríamos incluir el vocabulario a la hora de definir nuestra propia ontología. A continuación se presentan finalmente algunas características de los principales formatos/lenguajes, así como algún pequeño ejemplo. 4.1 RDFa RDFa, el más sencillo y directo de los formatos, provee de algunas etiquetas xhtml que podemos incluir directamente en el código xhtml sin hacer que el documento pierda su consistencia, es decir, que con el DOCTYPE adecuado, el documento sigue validando las pruebas del W3. Es una solución muy rápida para proveer, por ejemplo, de la semántica que dice que la etiqueta <title/> (donde se acostumbra a escribir el título de la página) de nuestra página, es el título de una página concreta, o para decir quién es el autor, o indicar su e-mail o su teléfono. RDFa soporta algunos lenguajes ya definidos por terceros, como son DC (Dublin Core), que diseño un lenguaje que proporciona una pila de características base, capaces de describir cualquier recurso, sin importar el formato de origen, ni el dominio a donde va dirigido. </div> 4.2 RDF RDF (Resource Description Framework), es el formato base de la web semántica, sobre el cual se basan los demás formatos o sobre el que se apoyan. Definido por el W3, con la intención precisamente de crear un lenguaje de descripción de metadatos. Su función es, como se viene diciendo, tomar el conocimiento de cierto dominio y representarlo en un formato amigable para una máquina. El conocimiento va traduciéndose al lenguaje RDF mediante las triplas OAV. Desde el punto de vista técnico es un espacio de nombres de XML, es decir, si queremos escribir un documento con formato RDF, declaramos en el documento la versión de XML, y después introducimos como espacio de nombres el de la definición de RDF, que es: De esta forma, un simple tag de xhtml como pueda ser: xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" <h1> Tu Tienda Semántica </h1> Se puede escribir RDF en varias notaciones, las más importantes son RDF/XML, la cuál sigue un formato estrictamente del tipo de XML, y Notation3, o N3, que supone un formato mucho más sencillo y rápido a la hora de escribir. Para los ejemplos que tratamos usaremos el formato RDF/XML. donde nosotros vemos el texto con un determinado formato, una máquina sólo ve un texto encerrado entre dos tags, que le dicen cómo tiene que presentar aquello que haya dentro de esos tags. Para que la máquina comprenda que se trata de un título, podemos usar RDFa de la siguiente forma: <div xmlns:dc="http://dublincore.org/2008/01/14/dcelements.rdf#"> <h1 property="dc:title">Tu Tienda Semántica</h1> <div> Estamos definiendo un nombre canónico (para no tener que escribir la ruta entera cada vez que queramos referirnos a algún elemento de ese lenguaje) para el vocabulario de Dublin Core que se encuentra en el recurso: http://dublincore.org/2008/01/14/dcelements.rdf#. Después ponemos el atributo property a la etiqueta <h1/>, y como valor de propiedad referenciamos 'title' del vocabulario que hemos importado, “dc:title”, con esto estamos accediendo a la semántica que otorga el valor 'title', dentro del vocabulario. Dicho de otra forma, una máquina que lea el tag <h1/>, tendrá que acceder al vocabulario de Dublin Core para saber como describir la propiedad del atributo que se le está aplicando. Por la rapidez con la que podemos dotar de significado semántico a algunos de los tags de una web, es por lo que RDFa es un formato muy usado para describir el autor, datos personales o datos de una página web, como puedan ser el título (como hemos visto en el ejemplo), o la licencia (con el vocabulario CC de Creative Commons). <div typeof="foaf:Person"xmlns:foaf="http://xmlns.com/foaf/0.1”> Las características de RDF, como son la fácil representación de triplas, hacen de este formato una forma rápida y simple forma de representación de datos, que ha llevado a usarse en aplicaciones que poco tienen que ver con la web semántica. En relación con la representación del conocimiento, RDF supone un modelo de datos, como pueda ser un modelo relacional. Una pila de código RDF supone en sí misma una base de datos, que además es explorable por máquinas mediante lenguajes de consulta, como puedan ser SPARQL, o RQL. De esta forma los servidores web se pueden dotar de herramientas que exploren la semántica de las páginas, de modo que se cumpla el objetivo de que sean las máquinas las que conlleven el trabajo duro y sea para los humanos mucho más sencillo hacer peticiones en un lenguaje más simple y directo. Además de la forma anteriormente descrita, quedaría de forma independiente la presentación de las páginas (lo que ven los humanos) de la semántica de éstas (lo que procesan las máquinas). Con RDF por tanto, podemos representar conocimiento, pero a veces necesitamos extender ese conocimiento, para crear nosotros nuestros propios vocabularios, completamente personalizados para un determinado uso. No hay problema en ese caso, puesto que RDF sirve como base para dos lenguajes que extienden su utilidad, como son RDFS y OWL, los cuáles veremos un poco más adelante. <p>Página creada por: </p> Para poner un ejemplo, imaginemos cómo dotaríamos de semántica a un artículo de la wikipedia que trate sobre John Lennon por ejemplo: <p property="foaf:name">Raúl Castro Fernández </p> <rdf:RDF <p>Contacto: </p> xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#” xmlns:rdf=”http://purl.org/dc/elements/1,1/” <p property="foaf:mbox">{[email protected]</p> <rdf:Description rdf:about=”http://en.wikipedia.org/wiki/John_Lenon”> <dc:title> John Lennon </dc:title> <dc:publisher> Wikipedia </dc:publisher> Para ilustrar un poco las posibilidades que ofrecer RDFS, se va a presentar un ejemplo como en los casos anteriores. </rdf:Description> <rdfs:Class </rdf:RDF> rdf:ID="Person" En el ejemplo anterior, importamos al inicio los dos espacios de nombres que vamos a utilizar, el que define la sintaxis de RDF, para poder usar este lenguaje, y el vocabulario de Dublin Core, que usamos en el ejemplo de RDFa. Después usamos una etiqueta 'Description', propia del lenguaje RDF, y que nos sirve para hacer la descripción de un recurso. Con 'rdf:about' indicamos sobre qué recurso vamos a hacer esa descripción. Dentro de la descripción propia, usamos las etiquetas 'title' y 'publisher', ambas pertenecientes al vocabulario de Dublin Core, y que usamos en este caso para indicar el título del recurso y quién lo publica. De esta sencilla manera hemos dotado de semántica a una entrada de la wikipedia, hemos expresado un conocimiento que podríamos representar en un par de triplas como: wikipedia/JohnLennon – tiene_titulo – John Lennon. wikipedia/JohnLennon – publicado por – wikipedia. Objeto - Atributo rdfs:label="Person" rdfs:comment="A person"> </rdfs:Class> <rdf:Property rdf:about="http://xmlns.com/foaf/0.1/knows" rdfs:label="knows" rdfs:comment="A person known by this person."> <rdfs:domain rdf:resource="http://xmlns.com/foaf/0.1/Person"/> <rdfs:range rdf:resource="http://xmlns.com/foaf/0.1/Person"/> </rdf:Property> - Valor Como comenté anteriormente, es posible que en ciertas ocasiones necesitemos extender las posibilidades de RDF, por ejemplo, si necesitamos definir un vocabulario concreto para una aplicación que estemos desarrollando, y no encontramos nadie que haya implementado ya uno que satisfaga los requisitos que queremos. Para estos casos existen dos lenguajes que extienden la utilidad de RDF, estos dos lenguajes son RDFS y OWL. Ambos se construyen sobre una base en RDF, y, si bien RDFS aumenta significativamente las posibilidades de RDF, con OWL se incluyen todas las mejoras que introduce RDFS además de muchas otras, lo que lo convierten en el lenguaje que dota de mayor expresividad a un documento. 4.3 RDFS La principal característica que añade RDFS (RDF Schema) es la posibilidad de declarar clases, subclases y propiedades de recursos. La jerarquía de clases y los tipos de propiedades de RDFS se pueden comparar al significado que obtienen de los lenguajes orientados a objetos, o dicho de otro modo, el sistema de tipos que se consigue con RDFS es comparable con el de la orientación a objetos. En este punto conviene observar cómo se implementa la representación del conocimiento mediante RDFS. Una vez tenemos las triplas que resumen el conocimiento a representar, clasificamos los recursos (los objetos y valores de esas triplas) en clases, consiguiendo con esto una taxonomía, es decir, una forma de datos jerarquizada y dividida en clases. Si a esto le unimos las propiedades de las clases (que podemos proveer gracias a una etiqueta incluida en el lenguaje RDFS), el dominio al cual se pueden aplicar esas propiedades (es decir, las clases a las que se les pueden aplicar propiedades), así como los valores que se pueden adjudicar a cada propiedad (el rango), conseguimos una ontología. En el ejemplo anterior vemos como se describen dos recursos, una clase y una propiedad. La clase tiene un identificador, ID=“Person”, con lo que damos el nombre a la clase. Además le ponemos una etiqueta, con “rdfs:label”, que, como es de esperar es un atributo que estará definido en la implementación estándar de RDFS que ofrece el W3. Así mismo indicamos un comentario con 'comment'. Más abajo definimos una propiedad, para ello nos referimos a un recurso ya existente en el lenguaje FOAF (que es un lenguaje previamente definido como pude ser el de Dublin Core). Para referirnos al recurso 'knows' del lenguaje FOAF, utilizamos la etiqueta “rdf:about”, como en otras ocasiones. A esta propiedad le otorgamos de una etiqueta y un comentario, del mismo modo que lo hacíamos con la clase. Adicionalmente debemos declarar el dominio al que pertenece y el rango de sus valores. La propiedad 'knows' del lenguaje FOAF sirve para definir una relación entre dos personas, por ejemplo la tripla: “A conoce a B”, el atributo de esa tripla se puede representar con la propiedad 'knows del lenguaje FOAF'. Ahora que sabemos cuál es el significado de 'knows', es fácil ver que el dominio al que se aplica la propiedad 'knows' que estamos definiendo en el ejemplo, debe aplicar a una persona, es decir, el dominio de la propiedad 'FOAF:knows' debe ser el de una persona. En el propio lenguaje FOAF se define un recurso 'Person', que sirve precisamente para referirse a una persona. Del mismo modo que con el caso del dominio, sabemos que la propiedad 'knows', que estamos definiendo, debe aplicarse a una persona, por tanto podemos indicar finalmente que el rango al que aplica la propiedad es igualmente a un recurso “FOAF:Person”. De esta forma, ayudándonos de la declaración de las clases que veamos necesarias para dotarnos de una taxonomía ajustada a lo que queremos presentar, así como de la definición de una serie de propiedades aplicadas correctamente a los términos necesarios, llegamos a la definición de un vocabulario propio. 4.4 OWL Una vez visto cómo podemos aumentar las posibilidades del lenguaje RDF, gracias a la extensión RDFS, nos queda ver en qué consiste OWL, el que es sin duda el lenguaje que mayor significado semántico nos permitirá añadir, así como el que mayor libertad otorga a la hora de implementar una ontología. Del mismo modo que en el caso de RDFS, OWL (Web Ontology Language), se construye sobre una base en RDF, además, el propio lenguaje OWL posee las estructuras que añadía RDFS. Se escribe usando una sintaxis XML como en los casos anteriores, pero en este caso hay tres variantes del lenguaje, Lite, DL, y Full, cada una de las cuáles posee unas características propias. A rasgos generales la versión Lite es más fácilmente procesable por las máquinas pero ofrece menos posibilidades, en cambio la versión DL ofrece características de lógica descriptiva lo que lo convierten en una forma del lenguaje mucho más potente que la versión Lite. Por último la versión Full se compone de una mezcla de las anteriores versiones a la vez que procura ser compatible con RDFS, para que, como hemos comentado, se pueda ampliar una ontología que esté haciendo uso de RDFS, o bien podamos implementar una nueva ayudándonos de alguna que estuviera implementada previamente en RDFS. Desde un punto de vista técnico, lo que hace OWL es proveer de una serie de axiomas que dotan de ciertas restricciones a unas clases que hemos definido (es parecido al concepto del domino de RDFS) y las relaciones permitidas entre estos elementos. Además OWL es capaz de usar lógica descriptiva. Esto es, en los problemas de representación del conocimiento, es habitual que cuando se escribe una ontología muy grande no se consiga una claridad total en las definiciones que se hagan de ciertos recursos. Este problema se puede solucionar casi totalmente aplicando una lógica a los datos que estamos implementando, pero no es algo trivial cuando, como decimos, nos encontramos ante una ontología muy extensa. Es aquí donde entra la capacidad del lenguaje OWL (en sus formas DL y Full) de aplicar cierta lógica descriptiva a la ontología. Conviene por tanto ver qué es exactamente la lógica descriptiva, para entender como ayuda a la representación del conocimiento, y en concreto, a las ontologías, y de este modo entender realmente una de las principales ventajas que ofrece OWL con respecto a los otros formatos vistos. 4.4.1 Lógica de Descripción La lógica de descripción puede entenderse como una metodología a la hora de representar el conocimiento, como puedan ser los grafos semánticos, pero en este caso, este método, implementado en la sintaxis de varios lenguajes (entre los cuales se encuentra OWL), provee de ciertas ventajas que se presentan a continuación. − La principal ventaja que ofrecen con respecto a otras formas de representación del conocimiento es que permiten plasmar ese conocimiento de un modo formal, lo que le dota de mayor comprensión, y sobre todo de una forma estructurada. El hecho de que permita representar el conocimiento de una forma estructurada, es precisamente lo que ayuda a preservar el orden cuando estamos implementando una ontología muy larga, puesto que las restricciones estructurales y formales de las que dota a la implementación hacen más fácil mantener la forma y la estructura, así como no perjudicar el contenido semántico de la ontología en cuestión. Los elementos a destacar de la lógica de descripción son: − Formalismo descriptivo: Ofrece conceptos, individuos, roles y constructores para definir los recursos que queremos representar. − Formalismo terminológico: Para definir las propiedades de la terminología descriptiva, es decir, conceptos, individuos, roles y constructores. − Formalismo asertivo: Introduce propiedades específicas de individuos. − La última característica a destacar y una de las mas importantes es que son capaces de inferir conocimiento a partir de un conocimiento dado, mediante algoritmos de razonamiento. A la hora de representar el conocimiento con una lógica de descripción, desde un punto de vista teórico, se usan dos construcciones, llamados, Tbox (Teminological Box) y Abox (Assertion Box). Se usan las Tbox para describir conceptos que tienen una estructura jerarquizada. Además, son precisamente éstas estructuras las que contienen todo el vocabulario de un dominio. Las Abox se usan para describir las relaciones entre los individuos y conceptos que tengamos. Contienen aserciones (descripción de propiedades) de individuos (recursos de la ontología en definitiva). Una base de conocimiento conformada por Tboxes y Aboxes es precisamente la estructura desde la cual se puede inferir conocimiento nuevo a partir del conocimiento ya declarado o representado. Tras ver un atisbo de lo que la lógica de descripción nos puede facilitar las cosas y dotar a la vez de más potencia a las ontologías que se implementen con OWL, vamos a ver un ejemplo de OWL para ver las diferencias que introduce con respecto a los otros formatos vistos anteriormente. <owl:Ontology rdf:about="http://ebiquity.umbc.edu/ontology/person.owl#person "> <owl:versionInfo>0.1</owl:versionInfo> <rdfs:label>eBiquity Person Ontology</rdfs:label> <cc:License rdf:resource="http://creativecommons.org/licenses/by/2 .0/"/> </owl:Ontology> <owl:Class rdf:ID="Person"> <rdfs:label>Person</rdfs:label> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#name"/> <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativ eInteger">1</owl:maxCardinality> </owl:Restriction> </rdfs:subClassOf> </owl:Class> En el ejemplo anterior, se comienza declarando una ontología, con un atributo propio de OWL (OWL:Ontology), y vemos después que la ontología va a tratar sobre “Person”, esto está descrito con el atributo “about”. Dentro también vemos como se indica la versión de la ontología (owl:versionInfo), y un comentario sobre la misma , para lo cual se usa la etiqueta “label” de RDFS (aquí observamos el primer ejemplo de la extensión que puede suponer OWL de RDFS, valiéndose de las etiquetas que ya aportaba RDFS y de las nuevas que introduce OWL) . Tras cerrar la declaración de la ontología, el ejemplo continua con la declaración de una clase “Person” (sobre lo que trata la ontología), por medio de la etiqueta “owl:Class”. Dentro de esta clase, se usa RDFS (segundo ejemplo de la reutilización de las etiquetas propias de RDFS en OWL), para definir una etiqueta para la clase, y una subclase. Para finalizar el ejemplo, encontramos un caso claro de la semántica adicional que proporciona OWL con respecto a RDFS, y es la variedad de restricciones que se pueden definir con OWL a las propiedades, clases, subclases, que definamos. En RDFS esto no era tan trivial, podíamos definir un dominio al que sería perteneciente una propiedad, y también podríamos definir un rango al que sería aplicable la misma. Con OWL podemos definir un número mucho mayor de restricciones, y esto lo vemos en el ejemplo mediante el uso de la etiqueta, “owl:Restriction”. Vemos con la etiqueta “owl:onProperty”, que hace referencia a la propiedad #name, (que deducimos será el nombre de la persona), que ajusta una restricción, con la siguiente etiqueta (“owl:maxCardinality”), tras la que restringe el número de nombres de la persona a uno. Con este sencillo ejemplo se ha ilustrado como OWL es capaz de reutilizar aquellas etiquetas de RDFS que dotan de tanto significado a la ontología, y como es capaz de potenciarlas mediante la aplicación de restricciones mucho más fuertes que las que podemos aplicar con el uso de RDFS. Para ejemplificar la aplicación de la lógica de descripción del lenguaje OWL, nos haría falta un ejemplo mucho más elaborado que no merece la pena. 5 UNA IMPLEMENTACIÓN BÁSICA DE SEMÁNTICA EN UNA WEB. Para ilustrar un poco todo lo que se ha comentado en el trabajo, se va a describir un pequeño ejemplo de web que incluye contenido semántico, haciendo uso tanto de RDFa, como RDF, como RDFS, como OWL. El sitio web es muy sencillo, representa una tienda, donde se ofrecen los siguientes servicios: − Venta de Tecnología: Es una sección, cuya semántica esta implementada con RDF, y extendida con RDFS. − Servicio de Compra de Vehículos: Sección, cuya semántica esta implementada con OWL, apoyándose en muchos casos en atributos propios de RDFS. La implementación se basa en la reutilización de una ontología extraída de SWOOGLE. − Servicio de Alquiler de Vehículos: Sección en la cual se encuentra implementada la semántica por medio de RDF y RDFS para establecer una base taxonómica de las relaciones entre el recurso vehículo y los tipos de vehículos en sí. Adicionalmente, se encuentra un enlace a un documento escrito en RDF con una estructura básica y con un uso del lenguaje FOAF. Este documento, comúnmente denominado como perfil FOAF, es una descripción de una persona, y se usa normalmente asociado a blogs, o páginas web personales, con la intención de crear una red social semántica. De hecho el nombre del vocabulario utilizado, FOAF, proviene de Friend Of A Friend. También se encuentra en la página inicial (el índice de la web), contenido semántico escrito en RDFa, por lo cual es posible visualizarlo con simplemente observar el código fuente de la página, ya que como se explicó arriba, RDFa provee precisamente de una serie de etiquetas que pueden integrarse con el código (X)HTML. La implementación es muy sencilla, sin embargo, con ayuda del validador de RDF que ofrece el W3, se puede observar la complejidad que se extrae de la sección implementada en OWL (Sección de Compra de Vehículos). Esta semántica como se comento arriba está implementada sobre una base extraída del buscador de ontologías SWOOGLE. Todos los términos que aparecen están enlazados con el lugar desde el cual han sido definidos, lo cual hacen de esta la ontología más completa, y a la vez más compleja. Un pequeño ejemplo (no visible), del grafo semántico que genera es el que se muestra en la siguiente página. En ese grafo se puede apreciar la cantidad de nodos, y de líneas dirigidas entre nodos que se ocupan de indicar que propiedades aplican a que nodo desde que otro nodo. Es, en definitiva una representación del conocimiento, la más simple de entender para los humanos. </foaf:knows> </foaf:Person> </rdf:RDF> El Grafo: Un ejemplo mucho más visible de grafo semántico es el que genera por ejemplo el perfil FOAF. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:PersonalProfileDocument rdf:about=""> <foaf:maker rdf:resource="#me"/> <foaf:primaryTopic rdf:resource="#me"/> </foaf:PersonalProfileDocument> <foaf:Person rdf:ID="me"> <foaf:name>Raul</foaf:name> <foaf:title>Student</foaf:title> <foaf:givenname>Raul</foaf:givenname> <foaf:nick>Ra</foaf:nick> <foaf:homepage rdf:resource="index.html"/> <foaf:workplaceHomepage rdf:resource="http://www.it.uc3m.es/"/> <foaf:knows> <foaf:Person> <foaf:name>Julio Villena</foaf:name> <rdfs:seeAlso rdf:resource="http://www.it.uc3m.es/jvillena/"/> </foaf:Person> 6 CONCLUSIONES La web semántica es a día de hoy aún un proyecto, cada vez más palpable, en el que todos podemos colaborar si queremos. Desde el punto de vista de muchas empresas no es rentable económicamente pasar de la web 2.0 (la actual), a la web 3.0 (la web semántica), y esto por supuesto es un inconveniente a la hora de propulsar la tecnología. No obstante, como viene siendo habitual, la necesidad irá marcando el paso, y a la velocidad que avanzan las redes de datos actualmente, llegará el momento en el que se verá necesario ese cambio, el cambio de la información, al conocimiento. Para cuando ese momento llegue, la inteligencia artificial en el campo de la representación del conocimiento será una disciplina mucho más experimentada y mucho más óptima. El hecho de que actualmente se creen ontologías para describir ciertos dominios del conocimiento, y que esto se haga empleando distintas tecnologías, fomenta precisamente el desarrollo y la evolución de estos métodos de representación del conocimiento. Y esto último por supuesto, desemboca en una mejora de la web semántica. [3]W3C Semantic Web Activity http://www.w3.org/2001/sw/ [4]The Friend of a Friend (FOAF) Project http://www.foaf-project.org/ [5]Dublin Core Metadata Iniciative http://www.dublincore.org/ [6]RDFa, RDF, OWL, RDFS, SPARQL http://en.wikipedia.org/wiki/ [7]Faculty of Computer Science, Free University of BozenBolzano, Italy . Description Logics http://www.inf.unibz.it/~franconi/dl/course/ 7 REFERENCIAS [1] ACM Inc. ACM SIG Proceedings Templates [8]Apuntes de IRC, Universidad Carlos III, Julio Villena. http://www.acm.org/sigs/pubs/proceed/template.html http://www.it.uc3m.es/jvillena/irc/indice.html [2] ACM Inc. ACM Computing Classification System [V.1998] http://www.acm.org/class/1998/