Construyendo un vocabulario para el callejero de Santander

10 Sep 2013

Compartelo:Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0

Cuando hablamos de vocabularios en la web semántica nos estamos refiriendo principalmente a la definición de conceptos y relaciones que describen o representan términos de un área específica del conocimiento. Podemos encontrar desde vocabularios muy simples con unas pocas definiciones a vocabularios muy complejos, con varios cientos de términos.

En la web semántica resultan decisivos a la hora de la integración de datos y de su reutilización pues al publicar un conjunto de datos muchos campos pueden llevar a confusiones o ambigüedades, resultando necesaria la definición formal de los mismos.

En nuestro esfuerzo por conformar una infraestructura tecnológica de soporte a las iniciativas de apertura de datos alrededor de iCMS, incorporamos el modelado de los datos a publicar garantizando su formalización a través de vocabularios.

Hay dos formas populares de describir o formalizar vocabularios, RDF Schema (RDFS) y OWL (en el contexto de esta última especificación vocabulario y ontología son usados indistintamente). RDFS resulta un poco más ligero que OWL y la inferencia automática más eficiente pero es impropio para un modelado complejo que requiere el uso de OWL.

En un vocabulario encontraremos dos elementos: clase y propiedad, la primera representa conceptos, por ejemplo, una persona, una localidad, un documento, etc. Las relaciones que involucran a dichos conceptos son sus propiedades. Asociado a la propiedad encontramos también el dominio, que indica a que clase está asociada la propiedad y el rango, que señala los tipos de valores que tomará la propiedad.

Por ejemplo, podemos definir la propiedad ej:autor que pertenece al dominio de la clase ej:Documento y que tiene como rango instancias de la clase ej:Persona.

Cuando tenemos que disponer de un vocabulario que cubra los conceptos de uno de nuestros conjuntos de datos lo primero que debemos intentar es encontrar un vocabulario reconocido como lo pueden ser FOAF, DCMI Metadata Terms, SKOS, vCard, etc. que lo incluya, para ello nos valemos de alguno de los buscadores especializados como LOV, Falcons, Swoogle, Watson, etc. Si no es posible encontrar entre los vocabularios reconocidos el concepto que se ajuste a los datos que estamos publicando debemos construir un vocabulario propio y siempre que sea posible extender de esos vocabularios usando herencia de clases mediante la propiedad rdfs:subClassOf o estableciendo relaciones mediante propiedades del tipo owl:sameAs y owl:equivalentClass para indicar similitudes entre clases, y owl:equivalentProperty para el caso de las propiedades.

Por otro lado resulta necesario implantar un esquema de URI que proporcione un mecanismo de identificación común para los sistemas de gestión del conocimiento –en nuestro caso el vocabulario– de forma que se pueda hacer referencia a estos de forma única, fiable y persistente en el tiempo, requisito clave para facilitar su posterior reutilización.

La Norma Técnica de Interoperabilidad de Reutilización de recursos de la información para el caso de definición de vocabularios indica que las URI deben de conformarse según el siguiente esquema: [code language=”html” light=true]http://{base}/def/{sector}/{dominio}[/{concepto}[/code]

Como herramienta para la definición de nuestro vocabulario hemos utilizado la versión gratuita de TopBraid Composer y para su publicación Neologism.

Veamos ahora el proceso completo a partir de uno de los conjuntos de datos que publica el Portal de Datos Abiertos del Ayuntamiento de Santander, el Callejero, aquí tenemos por ejemplo el recurso Calles, entre sus campos tenemos el tipo de vía (Calle, Pasaje, Avenida, Plaza, Alameda, Travesía, etc.). Usando los buscadores no nos fue posible encontrar un vocabulario que definiera este concepto, lo mismo sucede con la sigla que se le asocia (CL, PSJ, AV, PZ, AL, TRV, etc.), por ello decidimos definir un vocabulario propio.

Con TopBraid Composer definimos las propiedades generales del vocabulario:

Formulario de definición del vocabulario

Observar que este vocabulario sería accesible a través de la URI:

http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero

El código RDF/XML generado sería:

<?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:skos="http://www.w3.org/2004/02/skos/core#"
    xmlns:cc="http://web.resource.org/cc/"
    xmlns="http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:dctype="http://purl.org/dc/dcmitype/"
    xmlns:vann="http://purl.org/vocab/vann/"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xml:base="http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero">
  <owl:Ontology rdf:about="">
    <dcterms:hasFormat>
      <dctype:Text rdf:about="http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero.rdf">
        <dc:format>
          <dcterms:IMT>
            <rdf:value>application/rdf+xml</rdf:value>
            <rdfs:label xml:lang="es">RDF</rdfs:label>
          </dcterms:IMT>
        </dc:format>
      </dctype:Text>
    </dcterms:hasFormat>
    <owl:versionInfo rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >v 1.0</owl:versionInfo>
    <dc:creator rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Ayuntamiento de Santander</dc:creator>
    <dcterms:issued>2013-05-02</dcterms:issued>
    <vann:preferredNamespaceUri rdf:datatype="http://www.w3.org/2001/XMLSchema#anyURI"
    >http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero#</vann:preferredNamespaceUri>
    <vann:preferredNamespacePrefix rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >callej</vann:preferredNamespacePrefix>
    <rdfs:comment xml:lang="es">Se utiliza para representar elementos del Callejero.</rdfs:comment>
    <dc:title xml:lang="es">Vocabulario del Callejero</dc:title>
    <dc:rights xml:lang="es">Ayuntamiento de Santander - Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 España de Creative Commons</dc:rights>
    <cc:license rdf:resource="http://creativecommons.org/licenses/by-nc-sa/3.0/es"/>
  </owl:Ontology>

Veamos a continuación la definición de una clase en el mismo, por ejemplo el caso de Tipo-via ya comentado:

Formulario para definir una clase

Que tiene como URI:

[code language=”plain” light=true]
http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero#Tipo-via
[/code]
Su código en RDF/XML sería:

  <rdf:Description rdf:about="#Tipo-via">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
    <rdfs:comment xml:lang="es">Los diferentes objetos en un Callejero, ejemplo: LADERA, CALLE, BULEVAR, etc.</rdfs:comment>
    <dcterms:issued>2013-05-02</dcterms:issued>
    <rdfs:isDefinedBy rdf:resource="#"/>
    <rdfs:label xml:lang="es">Tipo de vía</rdfs:label>
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing"/>
    <skos:definition xml:lang="es">Los diferentes tipos de vía en un Callejero</skos:definition>
  </rdf:Description>

Una de las propiedades asociadas a la clase Tipo-via es sigla, veamos como la hemos definido:

Formulario para definir una propiedad

Su URI sería: [code language=”plain” light=true]http://datos.ayto-santander.es/def/urbanismo-infraestructuras/callejero#sigla[/code]

y su representación RDF/XML:

<rdf:Description rdf:about="#sigla">
    <rdfs:domain rdf:resource="#Calles"/>
    <rdfs:domain rdf:resource="#Numeros-postales"/>
    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
    <rdfs:domain rdf:resource="#Tipo-via"/>
    <dcterms:issued>2013-05-02</dcterms:issued>
    <rdfs:domain rdf:resource="#Tramos-calle"/>
    <rdfs:comment xml:lang="es">Por ejemplo: CL, AV, BO, etc.</rdfs:comment>
    <rdfs:isDefinedBy rdf:resource="#"/>
    <rdfs:label xml:lang="es">Sigla del Tipo de Vía</rdfs:label>
    <skos:definition xml:lang="es">La sigla del tipo de vía que se asocia al nombre de la vía</skos:definition>
  </rdf:Description>

Definido el vocabulario completo simplemente lo subimos a Neologism usando Importar vocabulario, rellenamos los campos del formulario y pinchamos en Importar desde archivo:

Formulario importando el vocabulario callej

Y ya tenemos el vocabulario publicado:

Vista del vocabulario ya importado con sus clases y propiedades

Suponiendo que esta URL fuera pública, Neologism sería capaz de devolvernos las consultas a las URI de las clases y propiedades del vocabulario para el callejero de Santander.

Post relacionados

Compartelo:Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0

Sin comentarios

Dejar un comentario

*