RDF View for Drupal
USE drupal;
CREATE PROCEDURE ts2date ( IN x INT )
{
RETURN DATEADD ('second', x, STRINGDATE ('1970-1-1') );
};
CREATE VIEW poll_v AS
SELECT n.*,
u.name
FROM poll p,
node n,
users u
WHERE n.nid = p.nid
AND n.uid = u.uid
;
CREATE VIEW forum_v AS
SELECT n.*,
u.name
FROM forum f,
node n,
users u
WHERE n.nid = f.nid
AND n.uid = u.uid
;
CREATE VIEW blog_v AS
SELECT u.*,
u.name||'\'s blog' AS title_v
FROM users u;
CREATE VIEW blog_post_v AS
SELECT nr.*,
u.name,
drupal..ts2date (n.created) AS created,
drupal..ts2date (n.changed) AS changed
FROM node n,
node_revisions nr,
users u
WHERE nr.nid = n.nid
AND nr.vid = n.vid
AND n.uid = u.uid
AND n.type IN ('blog', 'story')
;
CREATE VIEW forum_post_v AS
SELECT nr.*,
u.name,
drupal..ts2date (n.created) AS created,
drupal..ts2date (n.changed) AS changed
FROM node n,
node_revisions nr,
users u
WHERE nr.nid = n.nid
AND nr.vid = n.vid
AND n.uid = u.uid
AND n.type = 'forum'
;
CREATE VIEW poll_post_v AS
SELECT nr.*,
u.name,
drupal..ts2date (n.created) AS created,
drupal..ts2date (n.changed) AS changed
FROM node n,
node_revisions nr,
users u
WHERE nr.nid = n.nid
AND nr.vid = n.vid
AND n.uid = u.uid
AND n.type = 'poll';
CREATE VIEW aggregator_item_v AS
SELECT *,
drupal..ts2date(timestmp) AS created
FROM aggregator_item
;
GRANT SELECT ON poll_v TO "SPARQL";
GRANT SELECT ON forum_v TO "SPARQL";
GRANT SELECT ON blog_v TO "SPARQL";
GRANT SELECT ON blog_post_v TO "SPARQL";
GRANT SELECT ON forum_post_v TO "SPARQL";
GRANT SELECT ON poll_post_v TO "SPARQL";
GRANT SELECT ON aggregator_item_v TO "SPARQL";
GRANT EXECUTE ON ts2date TO "SPARQL";
GRANT SELECT ON drupal..users TO "SPARQL";
GRANT SELECT ON drupal..aggregator_feed TO "SPARQL";
GRANT SELECT ON drupal..aggregator_item TO "SPARQL";
SPARQL
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX sioct: <http://rdfs.org/sioc/types#>
PREFIX atom: <http://atomowl.org/ontologies/atomrdf#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX wikiont: <http://sw.deri.org/2005/04/wikipedia/wikiont.owl#>
PREFIX aowl: <http://atomowl.org/ontologies/atomrdf#>
PREFIX v: <http://www.openlinksw.com/schemas/drupal_v#>
CREATE IRI CLASS v:user_iri "http://^{URIQADefaultHost}^/drupal/user/%U#this"
( IN user_name VARCHAR NOT NULL ) .
CREATE IRI CLASS v:iri "http://^{URIQADefaultHost}^/drupal/proxy/%s#this"
( IN uri VARCHAR NOT NULL ) .
CREATE IRI CLASS v:feed_item_iri "http://^{URIQADefaultHost}^/drupal/feed/item/%d#this"
( IN iid INTEGER NOT NULL ) .
CREATE IRI CLASS v:space_iri "http://^{URIQADefaultHost}^/drupal/space/%s#this"
( IN uri VARCHAR NOT NULL ) .
CREATE IRI CLASS v:feed_iri "http://^{URIQADefaultHost}^/drupal/feed/%d#this"
( IN fid INTEGER NOT NULL ) .
CREATE IRI CLASS v:poll_iri "http://^{URIQADefaultHost}^/drupal/poll/%d#this"
( IN nid INTEGER NOT NULL ) .
CREATE IRI CLASS v:forum_iri "http://^{URIQADefaultHost}^/drupal/forum/%d#this"
( IN nid INTEGER NOT NULL ) .
CREATE IRI CLASS v:blog_iri "http://^{URIQADefaultHost}^/drupal/blog/%d#this"
( IN uid INTEGER NOT NULL ) .
CREATE IRI CLASS v:blog_post_iri "http://^{URIQADefaultHost}^/drupal/blog/%d/%d#this"
( IN uid INTEGER NOT NULL ,
IN nid INTEGER NOT NULL ) .
CREATE IRI CLASS v:forum_post_iri "http://^{URIQADefaultHost}^/drupal/forum/%d/%d#this"
( IN uid INTEGER NOT NULL ,
IN nid INTEGER NOT NULL ) .
CREATE IRI CLASS v:poll_post_iri "http://^{URIQADefaultHost}^/drupal/poll/%d/%d#this"
( IN uid INTEGER NOT NULL ,
IN nid INTEGER NOT NULL ) .
CREATE IRI CLASS v:mbox "mailto:%s"
( IN mail VARCHAR NOT NULL ) .
ALTER QUAD STORAGE virtrdf:DefaultQuadStorage
FROM drupal.DBA.users AS users
FROM drupal.DBA.aggregator_feed AS feed
FROM drupal.DBA.aggregator_item_v AS feed_item where (^{feed_item.}^.fid = ^{feed.}^.fid)
FROM drupal.DBA.node AS node
FROM drupal.DBA.node_revisions AS node_revisions
FROM drupal.DBA.poll_v AS poll
FROM drupal.DBA.forum_v AS forum
FROM drupal.DBA.blog_v AS blog
FROM drupal.DBA.blog_post_v AS blog_post
FROM drupal.DBA.forum_post_v AS forum_post
FROM drupal.DBA.poll_post_v AS poll_post
{
CREATE virtrdf:Drupal
AS GRAPH IRI ("http://^{URIQADefaultHost}^/drupal_v")
OPTION (EXCLUSIVE)
{
v:user_iri (users.name)
a sioc:User AS virtrdf:Drupal-User-cls ;
sioc:name users.name AS virtrdf:Drupal-User-name ;
sioc:email v:mbox(users.mail) AS virtrdf:Drupal-User-mail ;
sioc:id users.uid AS virtrdf:Drupal-User-sioc_id .
v:feed_iri (feed.fid)
a aowl:Feed AS virtrdf:Drupal-Feed-cls ;
aowl:title feed.title AS virtrdf:Drupal-Feed-title ;
aowl:link v:iri (feed.link) AS virtrdf:Drupal-Feed-link ;
dc:description feed.description AS virtrdf:Drupal-Feed-desc .
v:feed_iri (feed.fid)
aowl:entry v:feed_item_iri (feed_item.iid) AS virtrdf:Drupal-Feed-aowl-entry .
v:feed_item_iri (feed_item.iid)
a aowl:Entry AS virtrdf:Drupal-FeedItem-cls ;
aowl:title feed_item.title AS virtrdf:Drupal-FeedItem-title ;
aowl:link feed_item.link AS virtrdf:Drupal-FeedItem-link ;
sioc:id feed_item.iid AS virtrdf:Drupal-FeedItem-sioc-id ;
sioc:content feed_item.description AS virtrdf:Drupal-FeedItem-sioc-content ;
aowl:content feed_item.description AS virtrdf:Drupal-FeedItem-aowl-content ;
dct:created feed_item.created AS virtrdf:Drupal-FeedItem-cr ;
aowl:source v:feed_iri (feed.fid) AS virtrdf:Drupal-FeedItem-aowl-src .
v:poll_iri (poll.nid)
a sioct:SurveyCollection AS virtrdf:Drupal-Poll-cls ;
sioc:id poll.nid AS virtrdf:Drupal-Poll-sioc-id ;
dc:title poll.title AS virtrdf:Drupal-Poll-title ;
dct:created poll.created AS virtrdf:Drupal-Poll-cr ;
dct:modified poll.changed AS virtrdf:Drupal-Poll-mod ;
sioc:has_owner v:user_iri (poll.name) AS virtrdf:Drupal-Poll-owner .
v:user_iri (poll.name)
sioc:owner_of v:poll_iri (poll.nid) AS virtrdf:Drupal-Poll-owner_of .
v:blog_iri (blog.uid)
a sioct:Weblog AS virtrdf:Drupal-Blog-cls ;
sioc:id blog.uid AS virtrdf:Drupal-Blog-sioc-id ;
dc:title blog.title_v AS virtrdf:Drupal-Blog-title ;
sioc:has_owner v:user_iri (blog.name) AS virtrdf:Drupal-Blog-owner .
v:user_iri (blog.name)
sioc:owner_of v:blog_iri (blog.uid) AS virtrdf:Drupal-Blog-owner_of .
v:forum_iri (forum.nid)
a sioc:Forum AS virtrdf:Drupal-Forum-cls ;
sioc:id forum.nid AS virtrdf:Drupal-Forum-sioc-id ;
dc:title forum.title AS virtrdf:Drupal-Forum-title ;
dct:created forum.created AS virtrdf:Drupal-Forum-cr ;
dct:modified forum.changed AS virtrdf:Drupal-Forum-mod ;
sioc:has_owner v:user_iri (forum.name) AS virtrdf:Drupal-Forum-owner .
v:user_iri (forum.name)
sioc:owner_of v:forum_iri (forum.nid) AS virtrdf:Drupal-Forum-owner_of .
v:blog_post_iri (blog_post.uid, blog_post.nid)
a sioct:BlogPost AS virtrdf:Drupal-BlogPost-cls ;
sioc:id blog_post.nid AS virtrdf:Drupal-BlogPost-sioc-id ;
dc:title blog_post.title AS virtrdf:Drupal-BlogPost-dc-title ;
sioc:content blog_post.body AS virtrdf:Drupal-BlogPost-sioc-content ;
dct:created blog_post.created AS virtrdf:Drupal-BlogPost-cr ;
dct:modified blog_post.changed AS virtrdf:Drupal-BlogPost-mod ;
sioc:has_container v:blog_iri (blog_post.uid) AS virtrdf:Drupal-BlogPost-sioc-has_container ;
sioc:has_creator v:user_iri (blog_post.name) AS virtrdf:Drupal-BlogPost-owner .
v:blog_iri (blog_post.uid)
sioc:container_of v:blog_post_iri (blog_post.uid, blog_post.nid) AS virtrdf:Drupal-BlogPost-container_of .
v:user_iri (blog_post.name)
sioc:creator_of v:blog_post_iri (blog_post.uid, blog_post.nid) AS virtrdf:Drupal-BlogPost-creator_of .
v:forum_post_iri (forum_post.uid, forum_post.nid)
a sioc:Post AS virtrdf:Drupal-ForumPost-cls ;
sioc:id forum_post.nid AS virtrdf:Drupal-ForumPost-sioc-id ;
dc:title forum_post.title AS virtrdf:Drupal-ForumPost-dc-title ;
sioc:content forum_post.body AS virtrdf:Drupal-ForumPost-sioc-content ;
dct:created forum_post.created AS virtrdf:Drupal-ForumPost-cr ;
dct:modified forum_post.changed AS virtrdf:Drupal-ForumPost-mod ;
sioc:has_container v:forum_iri (forum_post.uid) AS virtrdf:Drupal-ForumPost-sioc-has_container ;
sioc:has_creator v:user_iri (forum_post.name) AS virtrdf:Drupal-ForumPost-owner .
v:forum_iri (forum_post.uid)
sioc:container_of v:forum_post_iri (forum_post.uid, forum_post.nid) AS virtrdf:Drupal-ForumPost-container_of .
v:user_iri (forum_post.name)
sioc:creator_of v:forum_post_iri (forum_post.uid, forum_post.nid) AS virtrdf:Drupal-ForumPost-creator_of .
v:poll_post_iri (poll_post.uid, poll_post.nid)
a sioc:Poll AS virtrdf:Drupal-PollPost-cls ;
sioc:id poll_post.nid AS virtrdf:Drupal-PollPost-sioc-id ;
dc:title poll_post.title AS virtrdf:Drupal-PollPost-dc-title ;
sioc:content poll_post.body AS virtrdf:Drupal-PollPost-sioc-content ;
dct:created poll_post.created AS virtrdf:Drupal-PollPost-cr ;
dct:modified poll_post.changed AS virtrdf:Drupal-PollPost-mod ;
sioc:has_container v:poll_iri (poll_post.uid) AS virtrdf:Drupal-PollPost-sioc-has_container ;
sioc:has_creator v:user_iri (poll_post.name) AS virtrdf:Drupal-PollPost-owner .
v:poll_iri (poll_post.uid)
sioc:container_of v:poll_post_iri (poll_post.uid, poll_post.nid) AS virtrdf:Drupal-PollPost-container_of .
v:user_iri (poll_post.name)
sioc:creator_of v:poll_post_iri (poll_post.uid, poll_post.nid) AS virtrdf:Drupal-PollPost-creator_of .
}
};
DB.DBA.URLREWRITE_CREATE_REGEX_RULE
(
'drupal_rule2',
1,
'/drupal/([^#]*)',
vector('path'),
1,
'/sparql?query=DESCRIBE+%%3Chttp%%3A//^{URIQADefaultHost}^/drupal/%U%%23this%%3E+FROM+%%3Chttp%%3A//^{URIQADefaultHost}^/drupal_v%%3E&format=%U',
vector('path', 'path', '*accept*'),
null,
'(text/rdf.n3)|(application/rdf.xml)',
2,
null
);
DB.DBA.URLREWRITE_CREATE_REGEX_RULE
(
'drupal_rule3',
1,
'/drupal/(user|post|site|proxy|wiki|forum|poll|blog|feed|space)/([^#]*)',
vector('obj', 'path'),
1,
'/about/html/http://^{URIQADefaultHost}^/drupal/%U/%U%%23this',
vector('obj', 'path'),
null,
'(text/html)|(\\*/\\*)',
2,
303
);
DB.DBA.URLREWRITE_CREATE_RULELIST
(
'drupal_rule_list1',
1,
vector (
'drupal_rule3',
'drupal_rule2'
)
);
DB.DBA.VHOST_REMOVE (lpath=>'/drupal');
DB.DBA.VHOST_DEFINE
(
lpath=>'/drupal',
ppath=>'/vad/vsp/drupal/',
is_dav=>0, vsp_user=>'dba',
is_brws=>1,
def_page=>'index.php',
opts=>vector ('url_rewrite', 'drupal_rule_list1')
);