durito-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Durito-dev] Queries: problemas y explicaciones


From: ahg
Subject: [Durito-dev] Queries: problemas y explicaciones
Date: Mon, 17 Oct 2005 04:51:52 -0500

OK, he estado investigando algunas cuestiones relacionadas con la
creación de la utilidad de prueba WS
http://durito.alesoft.net/durito/ticket/1
y especialmente los queries que hay que elaborar.

En primer lugar hay que notar que los API de los almacenes de triples no
son especialmente sencillos, y lograr un manejo fluido de cualquiera de
ellos será una tarea sustancial en sí.

Encontré el primer problema importante al intentar expresar el primer
query que se menciona en el ticket;el problema es el manejo de las
estructuras rdf:List con el API y el lenguaje de query que ofrece
Sesame.

Recuerdo que el primer query que se plantea es:
"Determinar a qué colección pertenece un recurso."

Bien, parece sencillo, ¿no? Si vemos el XML de repository, vemos
estructuras como ésta:

  <sys:ArchivalSiteOrgCollection 
rdf:about="&rep;asoc_00000000000000000000000000000068">
    <wv:hasTitle xml:lang="en" >Geographic areas</wv:hasTitle>
    <wv:hasTitle xml:lang="es" >Áreas geográficas</wv:hasTitle>
    <wv:hasDescription xml:lang="en" >Geographic areas</wv:hasDescription>
    <wv:hasDescription xml:lang="es" >Áreas geográficas</wv:hasDescription>
    <sys:usesLenses rdf:parseType="Collection">
      <!-- por hacerse: diseñar este grupo de lentes -->
      <rdf:Description rdf:about="&shared;sys_GeographicAreaLenses" />          
    </sys:usesLenses>           
    <sys:includesThings rdf:parseType="Collection">
      <rdf:Description rdf:about="&rep;at_0000000000000000000000000000006A" />
      <rdf:Description rdf:about="&rep;at_0000000000000000000000000000006C" />
      <rdf:Description rdf:about="&rep;at_0000000000000000000000000000006E" />
      <rdf:Description rdf:about="&rep;at_00000000000000000000000000000070" />  
                
    </sys:includesThings>
  </sys:ArchivalSiteOrgCollection>

Esta es la descripción de una colección, y la propiedad
sys:includesThings refiere las cosas que se incluyen en esa colección.

Entonces partiendo de un URI, digamos, p.e.,
rep:at_0000000000000000000000000000006E, simplemente hay que buscar la
estructura de lista que lo contiene y que se vincula con una colección
por medio de la propiedad sys:includesThings.

El problema es que las estructuras de lista en RDF son algo complejas
(véase la primera imagen adjunta a este correo) y al parecer Sesame no
proporciona métodos en su API para manejarla de manera sencilla--digo,
al parecer; mandé un mensaje al foro de discusión de Sesame para
preguntar bien:
http://www.openrdf.org/forum/mvnforum/viewthread?thread=726&lastpage=yes

Si Sesame no incluye un API para manejar ese tipo de estructura,
podríamos cambiar los elementos rdf:List en las ontologías a elementos
rdf:Bag. Si bien, según los documentos de WS un rdf:List es lo que
queremos aquí, para fines prácticos, debe funcionar igual de bien un
rdf:Bag, y Sesame, al igual que los demás almacenes de triples, permite
manejar los rdf:Bag con sencillez.

Es decir: si estructuramos los valores de sys:includesThings con un
rdf:Bag en lugar de un rdf:List, tenemos una estructura de triples como
la que se representa en el segundo imagen adjunto a este correo. En
RDF/XML, esta estructura se representaría

  <sys:ArchivalSiteOrgCollection 
rdf:about="&rep;asoc_00000000000000000000000000000068">
    <sys:includesThings>
       <rdf:Bag>
          <rdf:li rdf:resource="&rep;at_0000000000000000000000000000006A" />
          <rdf:li rdf:resource="&rep;at_0000000000000000000000000000006C" />
          <rdf:li rdf:resource="&rep;at_0000000000000000000000000000006E" />
          <rdf:li rdf:resource="&rep;at_00000000000000000000000000000070" />
       </rdf:Bag>
    </sys:includesThings>
  </sys:ArchivalSiteOrgCollection>

Si usáramos ésa estructura, entonces con el siguiente query se podría
determinar a qué colección pertenece un recurso con el uri
"rep:at_0000000000000000000000000000006A":

SELECT
  ArchSiOrgCol
FROM
  {ArchSiOrgCol} rdf:type {sys:ArchivalSiteOrgCollection}
  {ArchSiOrgCol} sys:includesThings {} rdf:li 
{rep:at_at_0000000000000000000000000000006A}

También estuve viendo el API de Jena, y parece que es bastante más
completo: sí incluye objetos para manejar estructuras de tipo rdf:List,
aunque no pude determinar si incluye un mecanismo sencillo y eficiente
para llevar a cabo la operación arriba mencionada sobre una estructura
de ese tipo.

Lo que sí parece, a primera vista, es que el API de Jena es bastante más
completo. Al parecer incluye funciones para tratar con elementos OWL,
entre ellos, las subclases y superclases; asimismo, tiene la función de
mantener separados las diferentes ontologías que maneja un sistema
(función que nos serviría para mantener separados el área de datos con
las ontologías que definen términos y estrucutras de datos). Asimismo,
incluye un mecanismo para ponerle "una cerradura" ("lock") sobre una
parte de un almacén de triples, cosa que también necesitamos para un
sistema con múltiples usuarios con derechos de administración.

Bueno, hay que pensar en si cambiamos las ontologías para usar rdf:Bag
en lugar de rdf:List, y hay que mandar un correo a la lista de discusion
de Jena para preguntar detalles sobre los objetos que tiene para manejar
los rdf:List.

Por otra parte, estuve indagando las implementaciones ya existentes de
Fresnel. Aparentemente son un poco menos avanzadas de lo que pensaba.
Aquí la respuesta que recibí al mensaje que presenté en la lista de
correos:
http://simile.mit.edu/mail/ReadMsg?listName=Fresnel&msgNo=197

Espero que estén bien, salduos,
Andrew


Jena

- OWL reasoner, inferences
- Keeps ontologies in a separate graph structure (good!)
- Locks

Attachment: 1_coleccion.svg
Description: image/svg

Attachment: 2_bag.svg
Description: image/svg


reply via email to

[Prev in Thread] Current Thread [Next in Thread]