--RDF Views for MediaWiki: use wikidb; drop view mw_users_rdf; drop view mw_posts_rdf; drop table mw_site_rdf; create table mw_site_rdf (url varchar primary key, name varchar, description long varchar); insert soft mw_site_rdf values ('http://'||cfg_item_value (virtuoso_ini_path (), 'URIQA', 'DefaultHost')||'/mediawiki', 'DemoWiki', ''); create procedure w3c_date (in x decimal) { declare r any; r := sprintf ('%fZ', x/1000000); return replace (r, '.', 'T'); }; create view mw_users_rdf as select user_id, user_name, user_email as user_email, sha1_digest (user_email) as user_email_sha1 from users; create view mw_posts_rdf as select page_title as post_title, page_id as post_id, old_text as post_content, wikidb..w3c_date (rev_timestamp) as post_date_gmt, wikidb..w3c_date (page_touched) as post_modified_gmt, user_name, url, concat (url, '/', page_title) as post_url, name from page, revision, texts, users, mw_site_rdf where page_latest = rev_id and rev_text_id = old_id and rev_user = user_id; grant select on mw_users_rdf to "SPARQL"; grant select on mw_posts_rdf to "SPARQL"; grant select on mw_site_rdf to "SPARQL"; grant execute on wikidb..w3c_date to "SPARQL"; grant insert,select,update,delete on DB.DBA.NEWS_MULTI_MSG to wikiuser; grant insert,select,update,delete on DB.DBA.NEWS_GROUPS to wikiuser; grant insert,select,update,delete on DB.DBA.NEWS_MSG to wikiuser; grant insert,select,update,delete on DB.DBA.HTTP_ACL to wikiuser; sparql drop quad map graph iri("http://^{URIQADefaultHost}^/mw_v") . ; sparql drop quad map virtrdf:MediaWiki . ; sparql prefix sioc: prefix sioct: prefix atom: prefix rdfs: prefix foaf: prefix dc: prefix dct: prefix skos: prefix geo: prefix wikiont: prefix v: create iri class v:user_iri "http://^{URIQADefaultHost}^/mediawiki/user/%U" (in user_name varchar not null) . create iri class v:iri "http://^{URIQADefaultHost}^/mediawiki/proxy/%s" (in uri varchar not null) . create iri class v:post_iri "http://^{URIQADefaultHost}^/mediawiki/post/%U" (in post_title varchar not null) . create iri class v:site_iri "http://^{URIQADefaultHost}^/mediawiki/site/%U" (in title varchar not null) . create iri class v:forum_iri "http://^{URIQADefaultHost}^/mediawiki/wiki/%U" (in title varchar not null) . create iri class v:mbox "mailto:%s" (in mail varchar not null) . alter quad storage virtrdf:DefaultQuadStorage { create virtrdf:MediaWiki as graph iri ("http://^{URIQADefaultHost}^/mw_v") { v:site_iri (wikidb.DBA.mw_site_rdf.name) a sioc:Space ; dc:title name ; sioc:link v:iri (url) ; sioc:host_of v:forum_iri (name) . v:forum_iri (wikidb.DBA.mw_site_rdf.name) a sioc:Container ; a sioct:Wiki ; dc:title name ; sioc:description description ; sioc:link v:iri (url) ; sioc:has_host v:site_iri (name) . v:user_iri (wikidb.DBA.mw_users_rdf.user_name) a sioc:User ; sioc:id user_name ; sioc:name user_name ; sioc:email v:mbox (user_email) ; sioc:email_sha1 user_email_sha1 . v:post_iri (wikidb.DBA.mw_posts_rdf.post_title) a sioc:Item ; a sioc:Post ; a wikiont:Article ; dc:title post_title ; dct:created post_date_gmt ; dct:modified post_modified_gmt ; sioc:has_creator v:user_iri (user_name) ; sioc:has_container v:forum_iri (name) ; sioc:content post_content ; sioc:link v:iri (post_url) ; sioc:id post_id . v:forum_iri (wikidb.DBA.mw_posts_rdf.name) sioc:container_of v:post_iri (post_title) . v:user_iri (wikidb.DBA.mw_posts_rdf.user_name) sioc:creator_of v:post_iri (post_title) . } } . ; DB.DBA.URLREWRITE_CREATE_REGEX_RULE ( 'mw_rule1', 1, '/(mediawiki)\x24', vector('dummy'), 1, '/sparql?query=select+distinct+%%3Fcls+from+%%3Chttp%%3A%%2F%%2F^{URIQADefaultHost}^%%2Fmw_v%%3E+where+%%7B+%%5B%%5D+a+%%3Fcls+.+%%7D&format=%U', vector('*accept*'), null, '(text/rdf.n3)|(application/rdf.xml)', 2, 303 ); DB.DBA.URLREWRITE_CREATE_REGEX_RULE ( 'mw_rule2', 1, '/mediawiki/(.*)', vector('path'), 1, '/sparql?query=CONSTRUCT+{+%%3Chttp%%3A//^{URIQADefaultHost}^/mediawiki/%U%%3E+%%3Fp+%%3Fo+}+FROM+%%3Chttp%%3A//^{URIQADefaultHost}^/mw_v%%3E+WHERE+{+%%3Chttp%%3A//^{URIQADefaultHost}^/mediawiki/%U%%3E+%%3Fp+%%3Fo+}&format=%U', vector('path', 'path', '*accept*'), null, '(text/rdf.n3)|(application/rdf.xml)', 2, 303 ); DB.DBA.URLREWRITE_CREATE_REGEX_RULE ( 'mw_rule3', 1, '/mediawiki/(user|post|site|proxy|wiki)/(.*)', vector('obj', 'path'), 1, '/isparql/execute.html?query=SELECT%%20%%3Fp%%20%%3Fo%%20FROM%%20%%3Chttp%%3A//^{URIQADefaultHost}^/mw_v%%3E%%20WHERE%%20{%%20%%3Chttp%%3A//^{URIQADefaultHost}^/mediawiki/%U/%U%%3E%%20%%3Fp%%20%%3Fo%%20}&endpoint=/sparql', vector('obj', 'path'), null, '(text/html)|(\\*/\\*)', 0, null ); DB.DBA.URLREWRITE_CREATE_RULELIST ( 'mw_rule_list1', 1, vector ( 'mw_rule1', 'mw_rule2', 'mw_rule3' )); DB.DBA.VHOST_REMOVE (lpath=>'/mediawiki'); DB.DBA.VHOST_DEFINE (lpath=>'/mediawiki', ppath=>'/mediawiki/', is_dav=>0, vsp_user=>'dba', is_brws=>1, def_page=>'index.php', opts=>vector ('url_rewrite', 'mw_rule_list1'));