Libraries

RDF Databases

RdfDB

ObjectDB

Algae

generalized RDF statement queries

Algae Query Data Structure

Algae is SQL-like

combinatorial solution set
yields every combination that matches query:

Friend
id name
586 Dick
14 Jane
703 Spot
Address
id street
586 218 12th Street West
14 6219 6th Avenue
586 123 Elmstraas
SELECT Friend.name,Address.street
FROM Friend,Address
WHERE Friend.id=Address.id
query results
name street
Dick 218 12th Street West
Jane 6219 6th Avenue
Dick 123 Elmstraas

Algae Query on Repeated Property

predicate subject object
rdf:type myFriends:Dick Rolodex:Friend
Rolodex:Address myFriends:Dick [anoymous node 23]
Rolodex:Street [anoymous node 23] 218 12th Street West
Rolodex:Address myFriends:Dick [anoymous node 614]
Rolodex:Street [anoymous node 614] 123 Elmstraas
rdf:type myFriends:Jane Rolodex:Friend
Rolodex:Address myFriends:Jane [anoymous node 218]
Rolodex:Street [anoymous node 218] 6219 6th Avenue
rdf:type myFriends:Spot Rolodex:Friend
(ask '((rdf:type ?friend Rolodex:Friend)
       (Rolodex:Address ?friend ?addrNode)
       (Rolodex:Street ?addrNode ?street)
       ) :collect '(?friend ?street))
query results
?friend ?street
myFriends:Dick 218 12th Street West
myFriends:Dick 123 Elmstraas
myFriends:Jane 6219 6th Avenue

Database Support for Algae

SqlDB

* silly popular culture reference

SqlDB Example: ACLs Query to W3C Site

algae(namespace '(a http://localhost/SqlDB#) 
    attach '("W3C::Rdf::SqlDB" ("properties:/usr/local/perl/modules/Conf/chacl.prop" "name:a::W3Cacls")) 

    ask '(a::W3Cacls
     (a::uris.uri ?uri0 http://www.w3.org/Member/Overview.html)
     (a::uris.acl ?uri0 ?t1)
     (a::acls.acl ?acl0 ?t1)
     (a::ids.value ?id0 "eric")
     (a::idInclusions.id ?idInc0 ?id0)
     (a::acls.id ?acl0 ?t0)
     (a::idInclusions.groupId ?idInc0 ?t0)
    )
    collect '(?t0) 
   ) -> 
("100")
("102")

Cost

010505  7:39:24             71 Query       SELECT id FROM uris WHERE uri="http://www.w3.org/Member/Overview.html"
                     71 Query       SELECT acl FROM uris WHERE uris.id=1
                     71 Query       SELECT access FROM acls WHERE acl="6"
                     71 Query       SELECT id FROM ids WHERE value="eric"
                     71 Query       SELECT id FROM ids WHERE value="eric"
                     71 Query       SELECT groupId FROM idInclusions WHERE idInclusions.id=2112
                     71 Query       SELECT groupId FROM idInclusions WHERE idInclusions.id=2112
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3122
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
                     71 Query       SELECT id FROM acls WHERE acls.access=3955
010505  7:39:25             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=100
010505  7:39:30             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=102
010505  7:39:31             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=103
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=104
010505  7:39:32             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=105
010505  7:39:38             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=106
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=115
010505  7:39:44             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=117
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=120
010505  7:39:45             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=2112
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=7756
010505  7:39:46             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=9546
010505  7:39:47             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=100
010505  7:39:52             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=102
010505  7:39:53             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=103
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=104
010505  7:39:54             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=105
010505  7:40:00             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=106
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=115
010505  7:40:06             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=117
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=120
010505  7:40:07             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=2112
010505  7:40:08             71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=7756
                     71 Query       SELECT 1 FROM idInclusions WHERE idInclusions.groupId=9546

ProcessQuerySet: Algae Query

algae(namespace '(a http://localhost/SqlDB#) 
    attach '("W3C::Rdf::SqlDB" ("properties:/usr/local/perl/modules/Conf/chacl.prop" "name:a::W3Cacls")) 

    ask '(a::W3Cacls
     (a::uris.uri ?uri0 http://www.w3.org/Member/Overview.html)
     (a::uris.acl ?uri0 ?t1)
     (a::acls.acl ?acl0 ?t1)
     (a::ids.value ?id0 "eric")
     (a::idInclusions.id ?idInc0 ?id0)
     (a::acls.id ?acl0 ?t0)
     (a::idInclusions.groupId ?idInc0 ?t0)
    )
    collect '(?t0) 
   )

ProcessQuerySet: SQL Query

SELECT idInc0.groupId FROM
    uris as uri0,acls as acl0,ids as id0,idInclusions as idInc0 WHERE
    uri0.uri='http://www.w3.org/Member/Overview.html' AND
    acl0.acl=uri0.acl AND
    id0.value='eric' AND
    idInc0.id=id0.id AND
    idInc0.groupId=acl0.id
+---------+
| groupId |
+---------+
|     100 |
|     102 |
+---------+

Contacts

discuss this and other library-related stuff on www-rdf-perllib@w3.org

These slides will be available at http://www.w3.org/2001/Talks/0505-perl-RDF-lib/