Virtuoso Open-Source Wiki
Virtuoso Open-Source, OpenLink Data Spaces, and OpenLink Ajax Toolkit
Advanced Search
Help?
Location: / Dashboard / Main / VirtRDFViewDrupal

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')
  );

Powered By Virtuoso