Web Semántica desde cero: RDF Schema
En el artículo anterior comentamos la piedra angular de la web semántica, el modelo de datos RDF. RDF es muy flexible y potente, pero ¿cómo conseguimos dar significado a las relaciones? Al fin y al cabo, las tripletas no dejan de ser tuplas de strings de cara al ordenador. Tiene que haber un componente, que permita hacer de intermediario entre el significado humano y la máquina. Esto son las ontologías. Las ontologías definen el sentido semántico de los recursos de RDF. RDF Schema nos permite diseñar ontologías de forma sencilla. Como veremos, añade operadores que podemos usar en RDF para definir las ontologías. Por tanto, RDF Schema no es comparable a XML Schema o JSON Schema, que sirven para validar que un documento sigue una estructura, sino que sirve para dotar de significado a la información.
Clases
El primer concepto clave de RDF Schema son las clases. Los recursos pueden pertenecer a una clase. La clase de un recurso se especifica con la propiedad ya vista anteriormente de rdf:type. Las clases se relacionan entre sí mediante propiedades. Aquí se pueden definir dos conceptos: rango y dominio. Su significado es similar al de las funciones matemáticas. El rango representa los conjuntos de valores que puede tomar un atributo. Y el dominio, los recursos sobre los que tiene sentido aplicar ese atributo. Por tanto en una tripleta que use una propiedad, el recurso deberá estar dentro del dominio y el valor dentro del rango. Mencionar que las propiedades son también recursos, en esencia.
Además se definen relaciones de herencia entre clases, de tal modo que existen subclases y superclases, como en programación orientada a objetos. Las subclases heredan los atributos de su superclase y además son también superclase. La herencia que soporta RDF Schema es herencia múltiple, donde una clase puede tener varias superclases. También existe herencia de atributos, habiendo subatributos y superatributos. Si tenemos un atributo A, y un subatributo B se entiende que usar el atributo B implica el atributo A para el mismo objeto y valor.
Sin embargo, a diferencia de la POO, aquí las clases son conceptos abiertos y podemos integrar nuevas propiedades sobre la marcha, modificando clases ya existentes. Esta flexibilidad es necesaria, para que funcione en un mundo tan heterogéneo como es la web.
Clases predefinidas por RDF Schema
- rdfs:Class: La superclase absoluta. Toda clase es hija de esta
- rdfs:Resource: La clase que de la que heredan todos los recursos (las propiedades también son recursos)
- rdfs:Literal: La clase de la que heredan todos los valores atómicos o literales
- rdf:Property: La clase de la que heredan todas las propiedades
Propiedades predefindas por RDF Schema
- rdfs:range: Para indicar el rango de una propiedad
- rdfs:domain: Para indicar el dominio de una propiedad
- rdfs:subPropertyOf: Para indicar que una propiedad hereda de otra
- rdfs:subClassOf: Para indicar que una clase hereda de otra
- rdfs:comment: Descripción en formato humano de un recurso
- rdfs:label: El nombre en formato humano de un recurso
- rdfs:isDefinedBy: Para indicar que recurso define a otro
- rdfs:seeAlso: Información adicional sobre el recurso
- rdfs:member: Miembro del recurso
- rdf:type: La clase de un recurso
Ahora veamos un ejemplo de ontología en formato XML.
Aquí se definen dos clases: animal y horse. Y horse se define como subclase de animal. Por tanto un recurso de la clase horse es a la vez de la clase animal.
Esta ontología es más completa, porque define propiedades también
Inferencia
Una característica de las ontologías es que podemos realizar inferencias a través de ellas. Inferir algo es generar información nueva aplicando reglas lógicas. Veamos un ejemplo. Basándonos en la ontología de la última foto vamos a tener dos tripletas:
- ("Matemática Discreta","isTaughtBy","Grigoris Antoniu")
- ("isTaughtBy","rdfs:range","Miembro Académico")
Entonces podemos deducir que:
- ("Grigoris Antoniu","rdf:type","Miembro Académico")
Ya que Grigoris está admitido en el rango de isTaughtBy y el rango de isTaughtBy solo admite "Miembro Académico".
Con esto ya tenemos lo básico para diseñar ontologías. Actualmente existen muchas ontologías: Schema.org (colaboración entre Google, Bing, Yandex, recursos web principalmente), Dublin Core (recursos digitales), DOAP (describir proyectos de software), FOAF (personas y actividades), SIOC (comunidades online), SKOS (para describir diccionarios, tesauros, conceptos).
RDF Schema es simple y fácil de entender, pero poco potente. Para solventar algunos de los problemas de RDF Schema se diseñó OWL. En el siguiente artículo veremos algo ya mucho más práctico, realizar consultas en SPARQL sobre recursos RDF.