Ingres R3 Tutorial Linked Data Views Script to set up your own instance


-- Setup script for Linked Data Views of Ingres R3 Tutorial Sample Database --

GRANT SELECT ON TUT.ingiima.book_list TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON TUT.ingiima.book_orders TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON TUT.ingiima.cust_info TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON TUT.ingiima.cust_orders TO "SPARQL", "SPARQL_UPDATE";

-------------------------------------------------------------------

-------- Create rdfs:Class definitions ----------------------------

ttlp (
'
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

@prefix tut: <http://localhost:8890/schemas/ingrestut/> .

tut:book_list a rdfs:Class ;
	rdfs:isDefinedBy <http://localhost:8890/schemas/ingrestut> ;
	rdfs:label "book_list" ;
	rdfs:comment "Ingres Tutorial Database book_list table" .
	
tut:book_no a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:integer ;
	rdfs:label "Book No" .
	
tut:title a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:string ;
	rdfs:label "Title" .
	
tut:author a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:string ;
	rdfs:label "Author" .

tut:price a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:money;
	rdfs:label "Price" .

tut:category a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:string ;
	rdfs:label "Category" .

tut:stock a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:integer ;
	rdfs:label "Stock" .

tut:dist_no a rdf:Property ;
	rdfs:domain tut:book_list ;
	rdfs:range xsd:integer ;
	rdfs:label "Dist No" .

tut:book_orders a rdfs:Class ;
	rdfs:isDefinedBy <http://localhost:8890/schemas/ingrestut> ;
	rdfs:label "Book Orders" ;
	rdfs:comment "Ingres Tutorial Database book_orders table" .
	
tut:order_no a rdf:Property ;
	rdfs:domain tut:book_orders ;
	rdfs:range xsd:integer ;
         rdfs:label "Order No" .

tut:book_no_no a rdf:Property ;
	rdfs:domain tut:book_orders ;
	rdfs:range tut:book_list ;
         rdfs:label "Book No" .

tut:sale_price a rdf:Property ;
	rdfs:domain tut:book_orders ;
	rdfs:range xsd:money ;
         rdfs:label "Sale Price" .

tut:quantity a rdf:Property ;
	rdfs:domain tut:book_orders ;
	rdfs:range xsd:integer ;
         rdfs:label "Quantity" .

tut:extension a rdf:Property ;
	rdfs:domain tut:book_orders ;
	rdfs:range xsd:money ;
         rdfs:label "Extension" .

tut:cust_info a rdfs:Class ;
	rdfs:isDefinedBy <http://localhost:8890/schemas/ingrestut> ;
	rdfs:label "Customer Information" ;
	rdfs:comment "Ingres Tutorial Database cust_info table" .
	
tut:cust_no a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:integer ;
         rdfs:label "Customer No" .

tut:name a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string ;
         rdfs:label "Name" .

tut:company a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string ;
         rdfs:label "Company" .

tut:street a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "Street" .

tut:city a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "City" .

tut:state a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "State" .

tut:city a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "City" .

tut:state a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "State" .

tut:zip a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "Zip Code" .

tut:card_no a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "Card No" .

tut:exp_date a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:date;
         rdfs:label "Expire Date" .

tut:ship_to a rdf:Property ;
	rdfs:domain tut:cust_info ;
	rdfs:range xsd:string;
         rdfs:label "Ship To" .

tut:cust_orders a rdfs:Class ;
	rdfs:isDefinedBy <http://localhost:8890/schemas/ingrestut> ;
	rdfs:label "Customer Orders" ;
	rdfs:comment "Ingres Tutorial Database cust_orders table" .
	
tut:order_no a rdf:Property ;
	rdfs:domain tut:cust_orders ;
	rdfs:range tut:book_orders ;
         rdfs:label "Order No" .

tut:book_no a rdf:Property ;
	rdfs:domain tut:cust_orders ;
	rdfs:range tut:cust_info ;
         rdfs:label "Book No" .

tut:order_date a rdf:Property ;
	rdfs:domain tut:cust_orders ;
	rdfs:range xsd:date ;
         rdfs:label "Order Date" .

tut:status a rdf:Property ;
	rdfs:domain tut:cust_orders ;
	rdfs:range xsd:string ;
         rdfs:label "Status" .

tut:order_total a rdf:Property ;
	rdfs:domain tut:cust_orders ;
	rdfs:range xsd:money ;
         rdfs:label "Order Total" .
', '', 'http://localhost:8890/schemas/ingrestut', 0);

---------------------------------------------------------------

----------- Create IRI Classes -------------

sparql

	create iri class <http://localhost:8890/schemas/ingrestut/book_list_iri> 
	"http://^{URIQADefaultHost}^/ingrestut/book_list/%d#this"
    	(in book_no integer not null) .

	create iri class <http://localhost:8890/schemas/ingrestut/book_orders_iri>
	"http://^{URIQADefaultHost}^/ingrestut/book_orders/%d_%d#this"
	 (in order_no integer not null, in book_no integer not null ) .

	create iri class <http://localhost:8890/schemas/ingrestut/cust_info_iri> 
	"http://^{URIQADefaultHost}^/ingrestut/cust_info/%d#this"
    	(in cust_no integer not null) .

	create iri class <http://localhost:8890/schemas/ingrestut/cust_orders_iri> 
	"http://^{URIQADefaultHost}^/ingrestut/cust_orders/%d#this"
    	(in order_no integer not null) .

	;

--------------------------------------------------------------------

------------- Create Quad Store ------------------------------------

sparql

prefix tut:	<http://localhost:8890/schemas/ingrestut/>

alter quad storage virtrdf:DefaultQuadStorage             
  from TUT.ingiima.book_list as book_list_tbl 
  from TUT.ingiima.book_orders as book_orders_tbl
  from TUT.ingiima.cust_info as cust_info_tbl
  from TUT.ingiima.cust_orders as cust_orders_tbl
{
  create virtrdf:ingrestut as 
      graph <http://localhost:8890/ingrestut>
  {
        tut:book_list_iri(book_list_tbl.book_no) a tut:book_list 
               as virtrdf:book_list_book_no ;
        tut:title book_list_tbl.title
	     as virtrdf:book_list_title;
        tut:author book_list_tbl.author
              as virtrdf:book_list_author;
        tut:price book_list_tbl.price
              as virtrdf:book_list_price;
        tut:category book_list_tbl.category
              as virtrdf:book_list_category;
        tut:stock book_list_tbl.stock
              as virtrdf:book_list_stock;
        tut:dist_no book_list_tbl.dist_no
              as virtrdf:book_list_dist_no .

	tut:book_orders_iri(book_orders_tbl.order_no, book_orders_tbl.book_no) a tut:book_orders
		as virtrdf:book_orders_pk;
	tut:order_no book_orders_tbl.order_no
		as virtrdf:book_orders_order_no;
	tut:book_no tut:book_list_iri(book_list_tbl.book_no)
		where(^{book_orders_tbl.}^.book_no = ^{book_list_tbl.}^.book_no)
		as virtrdf:book_orders_book_no;
	tut:sale_price book_orders_tbl.sale_price
		as virtrdf:book_orders_sale_price;
	tut:quantity book_orders_tbl.quantity
		as virtrdf:book_orders_quantity;
	tut:extension book_orders_tbl.extension
		as virtrdf:book_orders_extension .

 	tut:cust_info_iri(cust_info_tbl.cust_no) a tut:cust_info
		as virtrdf:cust_info_cust_no;
	tut:name cust_info_tbl.name
		as virtrdf:cust_info_name;
	tut:company cust_info_tbl.company
		as virtrdf:cust_info_company;
	tut:street cust_info_tbl.street
		as virtrdf:cust_info_street;
	tut:city cust_info_tbl.city
		as virtrdf:cust_info_city;
	tut:state cust_info_tbl.state
		as virtrdf:cust_info_state;
	tut:zip cust_info_tbl.zip
		as virtrdf:cust_info_zip;
	tut:card_no cust_info_tbl.card_no
		as virtrdf:cust_info_card_no;
	tut:exp_date cust_info_tbl.exp_date
		as virtrdf:cust_info_exp_date;
	tut:ship_to cust_info_tbl.ship_to
		as virtrdf:cust_info_ship_to .

 	tut:cust_orders_iri(cust_orders_tbl.order_no) a tut:cust_orders
		as virtrdf:cust_orders_order_no;

	tut:cust_no tut:cust_info_iri(cust_info_tbl.cust_no)
		where (^{cust_orders_tbl.}^.cust_no = ^{cust_info_tbl.}^.cust_no)
		as virtrdf:cust_orders_cust_no;
	tut:order_date cust_orders_tbl.order_date
		as virtrdf:cust_orders_order_date;
	tut:status cust_orders_tbl.status
		as virtrdf:cust_orders_status;
	tut:order_total cust_orders_tbl.order_total
		as virtrdf:cust_orders_order_total   .
  } .
} .
;

delete from db.dba.url_rewrite_rule_list where urrl_list like 'ingrestut_rule%';
delete from db.dba.url_rewrite_rule where urr_rule like 'ingrestut_rule%';

DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
    'ingrestut_rule1',
    1,
    '(/[^#]*)',
    vector('path'),
    1,
    '/about/html/http/^{URIQADefaultHost}^%s',
    vector('path'),
    null,
    '(text/html)|(\\*/\\*)',
    0,
    303
    );


DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
    'ingrestut_rule2',
    1,
    '(/[^#]*)',
    vector('path'),
    1,
    '/sparql?query=DESCRIBE+%%3Chttp%%3A//localhost%%3A8890%U%%23this%%3E+%%3Chttp%%3A//localhost%%3A8890%U%%23this%%3E+FROM+%%3Chttp%%3A//localhost%%3A8890/ingrestut%%3E&format=%U',
    vector('path', 'path', '*accept*'),
    null,
    '(text/rdf.n3)|(application/rdf.xml)',
    0,
    null
    );

DB.DBA.URLREWRITE_CREATE_RULELIST (
    'ingrestut_rule_list1',
    1,
    vector (
  	 	'ingrestut_rule1',
  	 	'ingrestut_rule2'
	  ));

-- ensure a VD for the IRIs which begins with /
VHOST_REMOVE (lpath=>'/ingrestut');

VHOST_DEFINE (
	lpath=>'/ingrestut',  
	ppath=>'/DAV/ingrestut/', 
    	is_dav=>1, 
	vsp_user=>'dba', 
	is_brws=>0, 
	opts=>vector ('url_rewrite', 'ingrestut_rule_list1') 
	);

delete from db.dba.url_rewrite_rule_list where urrl_list like 'ingres_schemas_rule%';
delete from db.dba.url_rewrite_rule where urr_rule like 'ingres_schemas_rule%';

DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
    'ingres_schemas_rule1',
    1,
    '(/[^#]*)',
    vector('path'),
    1,
    '/about/html/http/^{URIQADefaultHost}^%s',
    vector('path'),
    null,
    '(text/html)|(\\*/\\*)',
    0,
    303
    );

DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
    'ingres_schemas_rule2',
    1,
    '(/[^#]*)',
    vector('path'),
    1,
    '/sparql?query=CONSTRUCT+{+%%3Chttp%%3A//localhost%%3A8890%U%%3E+%%3Fp+%%3Fo+}%%0D%%0AFROM+%%3Chttp%%3A//localhost%%3A8890/schemas/ingrestut%%3E+%%0D%%0AWHERE+{+%%3Chttp%%3A//localhost%%3A8890%U%%3E+%%3Fp+%%3Fo+}&format=%U',
    vector('path','path','*accept*'),
    null,
    '(text/rdf.n3)|(application/rdf.xml)',
    0,
    null
    );

DB.DBA.URLREWRITE_CREATE_RULELIST (
    'ingres_schemas_rule_list1',
    1,
    vector (
  	 	'ingres_schemas_rule1',
  	 	'ingres_schemas_rule2'
	  ));

-- ensure a VD for the IRIs which begins with /
VHOST_REMOVE (lpath=>'/schema/ingrestut');

VHOST_DEFINE (
	lpath=>'/schemas/ingrestut',  
	ppath=>'/DAV/schemas/ingrestut/', 
    	is_dav=>1, 
	vsp_user=>'dba', 
	is_brws=>0, 
	opts=>vector ('url_rewrite', 'ingres_schemas_rule_list1') 
	);

DB.DBA.XML_SET_NS_DECL ('tut', 'http://^{URIQADefaultHost}^/schemas/ingrestut/', 2);