ATTACH TABLE  "PUB"."Customer"      PRIMARY KEY ("Cust-Num")              AS "isports_rdf"."prs10_isports_rdf"."Customer"      FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Invoice"       PRIMARY KEY ("Invoice-Num")           AS "isports_rdf"."prs10_isports_rdf"."Invoice"       FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Item"          PRIMARY KEY ("Item-num")              AS "isports_rdf"."prs10_isports_rdf"."Item"          FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Local-Default" PRIMARY KEY ("Country")               AS "isports_rdf"."prs10_isports_rdf"."Local-Default" FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Order"         PRIMARY KEY ("Order-num")             AS "isports_rdf"."prs10_isports_rdf"."Order"         FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Order-Line"    PRIMARY KEY ("Order-num", "Line-num") AS "isports_rdf"."prs10_isports_rdf"."Order-Line"    FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Ref-Call"      PRIMARY KEY ("Call-Num")              AS "isports_rdf"."prs10_isports_rdf"."Ref-Call"      FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."Salesrep"      PRIMARY KEY ("Sales-Rep")             AS "isports_rdf"."prs10_isports_rdf"."Salesrep"      FROM 'prs10_isports_rdf';
ATTACH TABLE  "PUB"."State"         PRIMARY KEY ("State")                 AS "isports_rdf"."prs10_isports_rdf"."State"         FROM 'prs10_isports_rdf';

COMMIT WORK;

GRANT SELECT ON isports_rdf.prs10_isports_rdf.Customer        TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf."Order"         TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.Item            TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf."Order-Line"    TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.Invoice         TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf."Local-Default" TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf."Ref-Call"      TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.Salesrep        TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.State           TO "SPARQL", "SPARQL_UPDATE";

GRANT SPARQL_UPDATE to "SPARQL";

CREATE VIEW isports_rdf.prs10_isports_rdf.VCustomer      AS SELECT "Cust-Num" AS Cust_Num, Name, Address, Address2, City, State, Country, Phone, Contact, "Sales-Rep" AS Sales_Rep, Comments, "Credit-Limit" AS Credit_Limit, Balance, Terms, Discount, "Postal-Code" AS Postal_Code FROM isports_rdf.prs10_isports_rdf.Customer;
CREATE VIEW isports_rdf.prs10_isports_rdf.VOrder         AS SELECT "Order-num" AS Order_num, "Cust-Num" AS Cust_Num, "Order-Date" AS Order_Date, "Ship-Date" AS Ship_Date, "Promise-Date" AS Promise_Date, Carrier, Instructions, PO, Terms, "Sales-Rep" AS Sales_Rep FROM isports_rdf.prs10_isports_rdf."Order";
CREATE VIEW isports_rdf.prs10_isports_rdf.VItem          AS SELECT "Item-num" AS Item_num, "Item-Name" AS Item_Name, "Cat-Page" AS Cat_Page, Price, "Cat-Description" AS Cat_Description, "On-hand" AS On_hand, Allocated, "Re-Order" AS Re_Order, "On-Order" AS On_Order FROM isports_rdf.prs10_isports_rdf.Item;
CREATE VIEW isports_rdf.prs10_isports_rdf.VOrder_Line    AS SELECT "Order-num" AS Order_num, "Line-num" AS Line_num, "Item-num" AS Item_num, Price, Qty, Discount, "Extended-Price" AS Extended_Price, Backorder FROM isports_rdf.prs10_isports_rdf."Order-Line";
CREATE VIEW isports_rdf.prs10_isports_rdf.VInvoice       AS SELECT "Invoice-Num" AS Invoice_Num, "Cust-Num" AS Cust_Num, "Invoice-Date" AS Invoice_Date, Amount, "Total-Paid" AS Total_Paid, Adjustment, "Order-Num" AS Order_Num, "Ship-Charge" AS Ship_Charge FROM isports_rdf.prs10_isports_rdf.Invoice;
CREATE VIEW isports_rdf.prs10_isports_rdf.VLocal_Default AS SELECT Country, "Region1-Label" AS Region1_Label, "Region2-Label" AS Region2_Label, "Postal-Label" AS Postal_Label, "Postal-Format" AS Postal_Format, "Tel-Format" AS Tel_Format, "Date-Format" AS Date_Format, "Currency-Symbol" AS Currency_Symbol FROM isports_rdf.prs10_isports_rdf."Local-Default";
CREATE VIEW isports_rdf.prs10_isports_rdf.VRef_Call      AS SELECT "Call-Num" AS Call_Num, "Cust-Num" AS Cust_Num, "Call-Date" AS Call_Date, "Sales-Rep" AS Sales_Rep, Parent, Txt FROM isports_rdf.prs10_isports_rdf."Ref-Call";
CREATE VIEW isports_rdf.prs10_isports_rdf.VSalesrep      AS SELECT "Rep-Name" AS Rep_Name, Region, "Sales-Rep" AS Sales_Rep, "Month-Quota" AS Month_Quota FROM isports_rdf.prs10_isports_rdf.Salesrep;
CREATE VIEW isports_rdf.prs10_isports_rdf.VState         AS SELECT State, "State-Name" AS State_Name, Region FROM isports_rdf.prs10_isports_rdf.State;

GRANT SELECT ON isports_rdf.prs10_isports_rdf.VCustomer      TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VOrder         TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VItem          TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VOrder_Line    TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VInvoice       TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VLocal_Default TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VRef_Call      TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VSalesrep      TO "SPARQL", "SPARQL_UPDATE";
GRANT SELECT ON isports_rdf.prs10_isports_rdf.VState         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 customer:     <http://example.com/schemas/progress/isports/customer/> .
@prefix order:        <http://example.com/schemas/progress/isports/order/> .
@prefix item:         <http://example.com/schemas/progress/isports/item/> .
@prefix orderline:    <http://example.com/schemas/progress/isports/order_line/> .
@prefix invoice:      <http://example.com/schemas/progress/isports/invoice/> .
@prefix localdefault: <http://example.com/schemas/progress/isports/local_default/> .
@prefix refcall:      <http://example.com/schemas/progress/isports/ref_call/> .
@prefix salesrep:     <http://example.com/schemas/progress/isports/salesrep/> .
@prefix state:        <http://example.com/schemas/progress/isports/state/> .

customer:Customer a rdfs:Class ;
        rdfs:label "Customer" ;
        rdfs:comment "Progress isports Customer table" .

customer:Cust-Num a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:integer ;
        rdfs:label "Cust-Num" .

customer:Name a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Name" .

customer:Address a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Address" .

customer:Address2 a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Address2" .

customer:City a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "City" .

customer:State a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "State" .

customer:Country a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Country" .

customer:Phone a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Phone" .

customer:Contact a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Contact" .

customer:Sales-Rep a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Sales-Rep" .

customer:Comments a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Comments" .

customer:Credit-Limit a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:decimal ;
        rdfs:label "Credit-Limit" .

customer:Balance a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:decimal ;
        rdfs:label "Balance" .

customer:Terms a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Terms" .

customer:Discount a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:integer ;
        rdfs:label "Discount" .

customer:Postal-Code a rdf:Property ;
        rdfs:domain customer:Customer ;
        rdfs:range xsd:string ;
        rdfs:label "Postal-Code" .

order:Order a rdfs:Class ;
        rdfs:label "Order" ;
        rdfs:comment "Progress isports Order table" .

order:Order-num a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:integer ;
        rdfs:label "Order-num" .

order:Cust-Num a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:integer ;
        rdfs:label "Cust-Num" .

order:Order-Date a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:date ;
        rdfs:label "Order-Date" .

order:Ship-Date a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:date ;
        rdfs:label "Ship-Date" .

order:Promise-Date a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:date ;
        rdfs:label "Promise-Date" .

order:Carrier a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:string ;
        rdfs:label "Carrier" .

order:Instructions a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:string ;
        rdfs:label "Instructions" .

order:PO a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:string ;
        rdfs:label "PO" .

order:Terms a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:string ;
        rdfs:label "Terms" .

order:Sales-Rep a rdf:Property ;
        rdfs:domain order:Order ;
        rdfs:range xsd:string ;
        rdfs:label "Sales-Rep" .

item:Item a rdfs:Class ;
        rdfs:label "Item" ;
        rdfs:comment "Progress isports Item table" .

item:Item-num a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:integer ;
        rdfs:label "Item-num" .

item:Item-Name a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:string ;
        rdfs:label "Item-Name" .

item:Cat-Page a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:integer ;
        rdfs:label "Cat-Page" .

item:Price a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:decimal ;
        rdfs:label "Price" .

item:Cat-Description a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:string ;
        rdfs:label "Cat-Description" .

item:On-hand a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:integer ;
        rdfs:label "On-hand" .

item:Allocated a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:integer ;
        rdfs:label "Allocated" .

item:Re-Order a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:integer ;
        rdfs:label "Re-Order" .

item:On-Order a rdf:Property ;
        rdfs:domain item:Item ;
        rdfs:range xsd:integer ;
        rdfs:label "On-Order" .

orderline:Order-Line a rdfs:Class ;
        rdfs:label "Order-Line" ;
        rdfs:comment "Progress isports Order-Line table" .

orderline:Order-num a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:integer ;
        rdfs:label "Order-num" .

orderline:Line-num a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:integer ;
        rdfs:label "Line-num" .

orderline:Item-num a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:integer ;
        rdfs:label "Item-num" .

orderline:Price a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:decimal ;
        rdfs:label "Price" .

orderline:Qty a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:integer ;
        rdfs:label "Qty" .

orderline:Discount a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:integer ;
        rdfs:label "Discount" .

orderline:Extended-Price a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:decimal ;
        rdfs:label "Extended-Price" .

orderline:Backorder a rdf:Property ;
        rdfs:domain orderline:Order-Line ;
        rdfs:range xsd:byte ;
        rdfs:label "Backorder" .

invoice:Invoice a rdfs:Class ;
        rdfs:label "Invoice" ;
        rdfs:comment "Progress isports Invoice table" .

invoice:Invoice-Num a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:integer ;
        rdfs:label "Invoice-Num" .

invoice:Cust-Num a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:integer ;
        rdfs:label "Cust-Num" .

invoice:Invoice-Date a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:date ;
        rdfs:label "Invoice-Date" .

invoice:Amount a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:decimal ;
        rdfs:label "Amount" .

invoice:Total-Paid a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:decimal ;
        rdfs:label "Total-Paid" .

invoice:Adjustment a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:decimal ;
        rdfs:label "Adjustment" .

invoice:Order-Num a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:integer ;
        rdfs:label "Order-Num" .

invoice:Ship-Charge a rdf:Property ;
        rdfs:domain invoice:Invoice ;
        rdfs:range xsd:decimal ;
        rdfs:label "Ship-Charge" .

localdefault:Local-Default a rdfs:Class ;
        rdfs:label "Local-Default" ;
        rdfs:comment "Progress isports Local-Default table" .

localdefault:Country a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Country" .

localdefault:Region1-Label a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Region1-Label" .

localdefault:Region2-Label a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Region2-Label" .

localdefault:Postal-Label a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Postal-Label" .

localdefault:Postal-Format a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Postal-Format" .

localdefault:Tel-Format a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Tel-Format" .

localdefault:Date-Format a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Date-Format" .

localdefault:Currency-Symbol a rdf:Property ;
        rdfs:domain localdefault:Local-Default ;
        rdfs:range xsd:string ;
        rdfs:label "Currency-Symbol" .

refcall:Ref-Call a rdfs:Class ;
        rdfs:label "Ref-Call" ;
        rdfs:comment "Progress isports Ref-Call table" .

refcall:Call-Num a rdf:Property ;
        rdfs:domain refcall:Ref-Call ;
        rdfs:range xsd:string ;
        rdfs:label "Call-Num" .

refcall:Cust-Num a rdf:Property ;
        rdfs:domain refcall:Ref-Call ;
        rdfs:range xsd:integer ;
        rdfs:label "Cust-Num" .

refcall:Call-Date a rdf:Property ;
        rdfs:domain refcall:Ref-Call ;
        rdfs:range xsd:date ;
        rdfs:label "Call-Date" .

refcall:Sales-Rep a rdf:Property ;
        rdfs:domain refcall:Ref-Call ;
        rdfs:range xsd:string ;
        rdfs:label "Sales-Rep" .

refcall:Parent a rdf:Property ;
        rdfs:domain refcall:Ref-Call ;
        rdfs:range xsd:string ;
        rdfs:label "Parent" .

refcall:Txt a rdf:Property ;
        rdfs:domain refcall:Ref-Call ;
        rdfs:range xsd:string ;
        rdfs:label "Txt" .

salesrep:Salesrep a rdfs:Class ;
        rdfs:label "Salesrep" ;
        rdfs:comment "Progress isports Salesrep table" .

salesrep:Sales-Rep a rdf:Property ;
        rdfs:domain salesrep:Salesrep ;
        rdfs:range xsd:string ;
        rdfs:label "Sales-Rep" .

salesrep:Rep-Name a rdf:Property ;
        rdfs:domain salesrep:Salesrep ;
        rdfs:range xsd:string ;
        rdfs:label "Rep-Name" .

salesrep:Region a rdf:Property ;
        rdfs:domain salesrep:Salesrep ;
        rdfs:range xsd:string ;
        rdfs:label "Region" .

salesrep:Month-Quota a rdf:Property ;
        rdfs:domain salesrep:Salesrep ;
        rdfs:range xsd:string ;
        rdfs:label "Month-Quota" .

state:State a rdfs:Class ;
        rdfs:label "State" ;
        rdfs:comment "Progress isports State table" .

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

state:State-Name a rdf:Property ;
        rdfs:domain state:State ;
        rdfs:range xsd:string ;
        rdfs:label "State-Name" .

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

', '', 'http://example.com/schemas/progress/isports', 0);

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

SPARQL

prefix customer:     <http://example.com/schemas/progress/isports/customer/>
prefix order:        <http://example.com/schemas/progress/isports/order/>
prefix item:         <http://example.com/schemas/progress/isports/item/>
prefix orderline:    <http://example.com/schemas/progress/isports/order_line/>
prefix invoice:      <http://example.com/schemas/progress/isports/invoice/>
prefix localdefault: <http://example.com/schemas/progress/isports/local_default/>
prefix refcall:      <http://example.com/schemas/progress/isports/ref_call/>
prefix salesrep:     <http://example.com/schemas/progress/isports/salesrep/>
prefix state:        <http://example.com/schemas/progress/isports/state/>

create iri class customer:customer_iri
        "http://example.com/progress/isports/customer/%d#this"
        (in Cust_Num integer not null) .

create iri class order:order_iri
        "http://example.com/progress/isports/order/%d#this"
        (in Order_Num integer not null) .

create iri class item:item_iri
        "http://example.com/progress/isports/item/%d#this"
        (in Item_num integer not null) .

create iri class orderline:order-line_iri
        "http://example.com/progress/isports/order-line/%d_%d#this"
        (in Order_num integer not null, in Line_num integer not null) .

create iri class invoice:invoice_iri
        "http://example.com/progress/isports/invoice/%d#this"
        (in Invoice_Num integer not null) .

create iri class localdefault:local-default_iri
        "http://example.com/progress/isports/local-default/%U#this"
        (in Country varchar not null) .

create iri class refcall:ref-call_iri
        "http://example.com/progress/isports/ref-call/%U#this"
        (in Call_Num varchar not null) .

create iri class salesrep:salesrep_iri
        "http://example.com/progress/isports/salesrep/%U#this"
        (in Sales_Rep varchar not null) .

create iri class state:state_iri
        "http://example.com/progress/isports/state/%U#this"
        (in State varchar not null) .

;

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

SPARQL

prefix customer:     <http://example.com/schemas/progress/isports/customer/>
prefix order:        <http://example.com/schemas/progress/isports/order/>
prefix item:         <http://example.com/schemas/progress/isports/item/>
prefix orderline:    <http://example.com/schemas/progress/isports/order_line/>
prefix invoice:      <http://example.com/schemas/progress/isports/invoice/>
prefix localdefault: <http://example.com/schemas/progress/isports/local_default/>
prefix refcall:      <http://example.com/schemas/progress/isports/ref_call/>
prefix salesrep:     <http://example.com/schemas/progress/isports/salesrep/>
prefix state:        <http://example.com/schemas/progress/isports/state/>

alter quad storage virtrdf:DefaultQuadStorage
  from isports_rdf.prs10_isports_rdf.VCustomer      as Customer_tbl
  from isports_rdf.prs10_isports_rdf.VOrder         as Order_tbl
  from isports_rdf.prs10_isports_rdf.VItem          as Item_tbl
  from isports_rdf.prs10_isports_rdf.VOrder_Line    as Order_Line_tbl
  from isports_rdf.prs10_isports_rdf.VInvoice       as Invoice_tbl
  from isports_rdf.prs10_isports_rdf.VRef_Call      as Ref_Call_tbl
  from isports_rdf.prs10_isports_rdf.VRef_Call      as Ref_Call_tbl_1  -- Additional Ref_Call_tbl_1 alias required to represent recursive FK relationship (refcall:has_parent) below.
  from isports_rdf.prs10_isports_rdf.VLocal_Default as Local_Default_tbl
  from isports_rdf.prs10_isports_rdf.VSalesrep      as Salesrep_tbl
  from isports_rdf.prs10_isports_rdf.VState         as State_tbl
{
  create virtrdf:progress_isports as graph <http://example.com/progress/isports>
  {
    customer:customer_iri (Customer_tbl.Cust_Num) a customer:Customer as virtrdf:customer_pk ;
    customer:Cust-Num     Customer_tbl.Cust_Num     as virtrdf:Customer_cust-num ;
    customer:Name         Customer_tbl.Name         as virtrdf:Customer_name ;
    customer:Address      Customer_tbl.Address      as virtrdf:Customer_address ;
    customer:Address2     Customer_tbl.Address2     as virtrdf:Customer_address2 ;
    customer:City         Customer_tbl.City         as virtrdf:Customer_city ;
    customer:State        Customer_tbl.State        as virtrdf:Customer_state ;
    customer:Country      Customer_tbl.Country      as virtrdf:Customer_country ;
    customer:Phone        Customer_tbl.Phone        as virtrdf:Customer_phone ;
    customer:Contact      Customer_tbl.Contact      as virtrdf:Customer_contact ;
    customer:Sales-Rep    Customer_tbl.Sales_Rep    as virtrdf:Customer_sales_rep ;
    customer:Comments     Customer_tbl.Comments     as virtrdf:Customer_comments ;
    customer:Credit-Limit Customer_tbl.Credit_Limit as virtrdf:Customer_credit-limit ;
    customer:Balance      Customer_tbl.Balance      as virtrdf:Customer_balance ;
    customer:Terms        Customer_tbl.Terms        as virtrdf:Customer_terms ;
    customer:Discount     Customer_tbl.Discount     as virtrdf:Customer_discount ;
    customer:Postal-Code  Customer_tbl.Postal_Code  as virtrdf:Customer_postal-code ;
    customer:from_state        state:state_iri (State_tbl.State)                           where ( ^{Customer_tbl.}^.State     = ^{State_tbl.}^.State )           as virtrdf:Customer_from_state ;
    customer:has_sales_rep     salesrep:salesrep_iri (Salesrep_tbl.Sales_Rep)              where ( ^{Customer_tbl.}^.Sales_Rep = ^{Salesrep_tbl.}^.Sales_Rep )    as virtrdf:Customer_has_sales_rep ;
    customer:has_local_default localdefault:local-default_iri (Local_Default_tbl.Country)  where ( ^{Customer_tbl.}^.Country   = ^{Local_Default_tbl.}^.Country ) as virtrdf:Customer_has_local_default ;
    customer:placed_order      order:order_iri (Order_tbl.Order_num)                       where ( ^{Customer_tbl.}^.Cust_Num  = ^{Order_tbl.}^.Cust_Num )        as virtrdf:Customer_placed_order ;
    customer:has_invoice       invoice:invoice_iri (Invoice_tbl.Invoice_Num)               where ( ^{Customer_tbl.}^.Cust_Num  = ^{Invoice_tbl.}^.Cust_Num )      as virtrdf:Customer_has_invoice ;
    customer:ref_call          refcall:ref-call_iri (Ref_Call_tbl.Call_Num)                where ( ^{Customer_tbl.}^.Cust_Num  = ^{Ref_Call_tbl.}^.Cust_Num )     as virtrdf:Customer_ref-call .

    order:order_iri (Order_tbl.Order_num) a order:Order as virtrdf:order_pk ;
    order:Order-num    Order_tbl.Order_num    as virtrdf:Order_order-num ;
    order:Cust-Num     Order_tbl.Cust_Num     as virtrdf:Order_cust_num ;
    order:Order-Date   Order_tbl.Order_Date   as virtrdf:Order_order-date ;
    order:Ship-Date    Order_tbl.Ship_Date    as virtrdf:Order_ship-date ;
    order:Promise-Date Order_tbl.Promise_Date as virtrdf:Order_promise-date ;
    order:Carrier      Order_tbl.Carrier      as virtrdf:Order_carrier ;
    order:Instructions Order_tbl.Instructions as virtrdf:Order_instructions ;
    order:PO           Order_tbl.PO           as virtrdf:Order_po ;
    order:Terms        Order_tbl.Terms        as virtrdf:Order_terms ;
    order:placed_by    customer:customer_iri (Customer_tbl.Cust_Num)                                 where ( ^{Order_tbl.}^.Cust_Num  = ^{Customer_tbl.}^.Cust_Num )    as virtrdf:Order_placed_by ;
    order:Sales-Rep    salesrep:salesrep_iri (Salesrep_tbl.Sales_Rep)                                where ( ^{Order_tbl.}^.Sales_Rep = ^{Salesrep_tbl.}^.Sales_Rep )   as virtrdf:Order_sales_rep ;
    order:invoiced_on  invoice:invoice_iri (Invoice_tbl.Invoice_Num)                                 where ( ^{Order_tbl.}^.Order_num = ^{Invoice_tbl.}^.Order_Num )    as virtrdf:Order_invoiced_on ;
    order:has_lines    orderline:order-line_iri (Order_Line_tbl.Order_num, Order_Line_tbl.Line_num)  where ( ^{Order_tbl.}^.Order_num = ^{Order_Line_tbl.}^.Order_num ) as virtrdf:Order_has_lines .

    item:item_iri (Item_tbl.Item_num) a item:Item as virtrdf:item_pk ;
    item:Item-num        Item_tbl.Item_num        as virtrdf:item_item-num ;
    item:Item-Name       Item_tbl.Item_Name       as virtrdf:Item_item-Name ;
    item:Cat-Page        Item_tbl.Cat_Page        as virtrdf:Item_cat-page ;
    item:Price           Item_tbl.Price           as virtrdf:Item_price ;
    item:Cat-Description Item_tbl.Cat_Description as virtrdf:Item_cat-description ;
    item:On-hand         Item_tbl.On_hand         as virtrdf:Item_on-hand ;
    item:Allocated       Item_tbl.Allocated       as virtrdf:Item_allocated ;
    item:Re-Order        Item_tbl.Re_Order        as virtrdf:Item_re-order ;
    item:On-Order        Item_tbl.On_Order        as virtrdf:Item_on-order ;
    item:order_line  orderline:order-line_iri (Order_Line_tbl.Order_num, Order_Line_tbl.Line_num)  where ( ^{Item_tbl.}^.Item_num  = ^{Order_Line_tbl.}^.Item_num )   as virtrdf:Item_order_line .

    orderline:order-line_iri (Order_Line_tbl.Order_num, Order_Line_tbl.Line_num) a orderline:Order-Line as virtrdf:order-line_pk ;
    orderline:Line-num       Order_Line_tbl.Line_num       as virtrdf:Order-Line_line-num ;
    orderline:Price          Order_Line_tbl.Price          as virtrdf:Order-Line_price ;
    orderline:Qty            Order_Line_tbl.Qty            as virtrdf:Order-Line_qty ;
    orderline:Discount       Order_Line_tbl.Discount       as virtrdf:Order-Line_discount ;
    orderline:Extended-Price Order_Line_tbl.Extended_Price as virtrdf:Order-Line_extended-price ;
    orderline:Backorder      Order_Line_tbl.Backorder      as virtrdf:Order-Line_backorder ;
    orderline:Order-num  order:order_iri (Order_tbl.Order_num)  where ( ^{Order_Line_tbl.}^.Order_num = ^{Order_tbl.}^.Order_num ) as virtrdf:Order_Line_order_num ;
    orderline:Item-num   item:item_iri (Item_tbl.Item_num)      where ( ^{Order_Line_tbl.}^.Item_num  = ^{Item_tbl.}^.Item_num )   as virtrdf:Order_Line_item_num .

    invoice:invoice_iri (Invoice_tbl.Invoice_Num) a invoice:Invoice as virtrdf:invoice_pk ;
    invoice:Invoice-Num  Invoice_tbl.Invoice_Num  as virtrdf:Invoice_invoice-num ;
    invoice:Cust-Num     Invoice_tbl.Cust_Num    as virtrdf:Invoice_cust_num ;
    invoice:Invoice-Date Invoice_tbl.Invoice_Date as virtrdf:Invoice_invoice-date ;
    invoice:Amount       Invoice_tbl.Amount       as virtrdf:Invoice_amount ;
    invoice:Total-Paid   Invoice_tbl.Total_Paid   as virtrdf:Invoice_total-paid ;
    invoice:Adjustment   Invoice_tbl.Adjustment   as virtrdf:Invoice_adjustment ;
    invoice:Order-Num    Invoice_tbl.Order_Num    as virtrdf:Invoice_order-num ;
    invoice:Ship-Charge  Invoice_tbl.Ship_Charge  as virtrdf:Invoice_ship-charge ;
    invoice:invoiced_to  customer:customer_iri (Customer_tbl.Cust_Num)  where ( ^{Invoice_tbl.}^.Cust_Num  = ^{Customer_tbl.}^.Cust_Num ) as virtrdf:Invoice_invoiced_to ;
    invoice:Order-Num    order:order_iri (Order_tbl.Order_num)          where ( ^{Invoice_tbl.}^.Order_Num = ^{Order_tbl.}^.Order_num )   as virtrdf:Invoice_order_num .

    localdefault:local-default_iri (Local_Default_tbl.Country) a localdefault:Local-Default as virtrdf:local-default_pk ;
    localdefault:Country         Local_Default_tbl.Country as virtrdf:local-default_country ;
    localdefault:Region1-Label   Local_Default_tbl.Region1_Label   as virtrdf:Local-Default_region1-label ;
    localdefault:Region2-Label   Local_Default_tbl.Region2_Label   as virtrdf:Local-Default_region2-label ;
    localdefault:Postal-Label    Local_Default_tbl.Postal_Label    as virtrdf:Local-Default_postal-label ;
    localdefault:Postal-Format   Local_Default_tbl.Postal_Format   as virtrdf:Local-Default_postal-format ;
    localdefault:Tel-Format      Local_Default_tbl.Tel_Format      as virtrdf:Local-Default_tel-format ;
    localdefault:Date-Format     Local_Default_tbl.Date_Format     as virtrdf:Local-Default_date-format ;
    localdefault:Currency-Symbol Local_Default_tbl.Currency_Symbol as virtrdf:Local-Default_currency-symbol ;
    localdefault:has_customer customer:customer_iri (Customer_tbl.Cust_Num) where ( ^{Local_Default_tbl.}^.Country = ^{Customer_tbl.}^.Country ) as virtrdf:Local-Default_has_customer .

    refcall:ref-call_iri (Ref_Call_tbl.Call_Num) a refcall:Ref-Call as virtrdf:ref-call_pk ;
    refcall:Call-Num   Ref_Call_tbl.Call_Num   as virtrdf:Ref-Call_call-num ;
    refcall:Cust-Num   Ref_Call_tbl.Cust_Num   as virtrdf:Ref-Call_cust-num ;
    refcall:Call-Date  Ref_Call_tbl.Call_Date  as virtrdf:Ref-Call_call-date ;
    refcall:Sales-Rep  Ref_Call_tbl.Sales_Rep  as virtrdf:Ref-sales-rep ;
    refcall:Parent     Ref_Call_tbl.Parent     as virtrdf:Ref-Call_parent ;
    refcall:Txt        Ref_Call_tbl.Txt        as virtrdf:Ref-Call_txt ;
    refcall:made_to     customer:customer_iri (Customer_tbl.Cust_Num)   where  ( ^{Ref_Call_tbl.}^.Cust_Num  = ^{Customer_tbl.}^.Cust_Num )    as virtrdf:Ref-Call_made_to ;
    refcall:made_by     salesrep:salesrep_iri (Salesrep_tbl.Sales_Rep)  where  ( ^{Ref_Call_tbl.}^.Sales_Rep = ^{Salesrep_tbl.}^.Sales_Rep )   as virtrdf:Ref-Call_made-by ;
    refcall:has_parent  refcall:ref-call_iri (Ref_Call_tbl_1.Call_Num)  where  ( ^{Ref_Call_tbl.}^.Parent    = ^{Ref_Call_tbl_1.}^.Call_Num )  as virtrdf:Ref-Call_has_parent .

    salesrep:salesrep_iri (Salesrep_tbl.Sales_Rep) a salesrep:Salesrep as virtrdf:salesrep_pk ;
    salesrep:Sales-Rep   Salesrep_tbl.Sales_Rep   as virtrdf:Salesrep_sales-rep ;
    salesrep:Region      Salesrep_tbl.Region      as virtrdf:Salesrep_region ;
    salesrep:Rep-Name    Salesrep_tbl.Rep_Name    as virtrdf:Salesrep_rep-name ;
    salesrep:Month-Quota Salesrep_tbl.Month_Quota as virtrdf:Salesrep_month-quota ;
    salesrep:is_sales_rep_for customer:customer_iri (Customer_tbl.Cust_Num) where ( ^{Salesrep_tbl.}^.Sales_Rep = ^{Customer_tbl.}^.Sales_Rep ) as virtrdf:Salesrep_is_sales_rep_for ;
    salesrep:has_order        order:order_iri (Order_tbl.Order_num)         where ( ^{Salesrep_tbl.}^.Sales_Rep = ^{Order_tbl.}^.Sales_Rep )    as virtrdf:Salesrep_has_order ;
    salesrep:manages_region   state:state_iri (State_tbl.State)             where ( ^{Salesrep_tbl.}^.Region    = ^{State_tbl.}^.Region )       as virtrdf:Salesrep_manages_region ;
    salesrep:made_call        refcall:ref-call_iri (Ref_Call_tbl.Call_Num)  where ( ^{Salesrep_tbl.}^.Sales_Rep = ^{Ref_Call_tbl.}^.Sales_Rep ) as virtrdf:Ref-Call_made_call .

    state:state_iri (State_tbl.State) a state:State as virtrdf:state_pk ;
    state:State_     State_tbl.State        as virtrdf:State_state ;
    state:State-Name State_tbl.State_Name   as virtrdf:State_state-name ;
    state:Region     State_tbl.Region       as virtrdf:State_region ;
    state:has_customer   customer:customer_iri (Customer_tbl.Cust_Num)   where ( ^{State_tbl.}^.State  = ^{Customer_tbl.}^.State )  as virtrdf:State_has_customer ;
    state:has_sales_rep  salesrep:salesrep_iri (Salesrep_tbl.Sales_Rep)  where ( ^{State_tbl.}^.Region = ^{Salesrep_tbl.}^.Region ) as virtrdf:State_has_sales_rep .

  } .
} .
;

-- Setup re-write rules that enable de-referencing of RDF based descriptions of
-- iSports Entities

-- Cleanup old rules

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

-- Create rules for handling HTML representation of Entity (resource) description requests

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

-- Create rules for handling RDF based representations (N3 or RDF/XML) of Entity (resource) descriptions

DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
    'progress_isports_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/progress/isports%%3E&format=%U',
    vector('path', 'path', '*accept*'),
    null,
    '(text/rdf.n3)|(application/rdf.xml)',
    0,
    null
    );

DB.DBA.URLREWRITE_CREATE_RULELIST (
    'progress_isports_rule_list1',
    1,
    vector (
                'progress_isports_rule1',
                'progress_isports_rule2'
          ));

-- Setup OWL ontology data space that describes iSports entities

-- Create Virtual Directory access point

VHOST_REMOVE (lpath=>'/progress/isports');

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

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

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

DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
    'progress_isports_schemas_rule2',
    1,
    '(/[^#]*)',
    vector('path'),
    1,
    '/sparql?query=CONSTRUCT+{+%%3Chttp%%3A//localhost%%3A8890%U%%3E+%%3Fp+%%3Fo+}%%0D%%0AFROM+%%3Chttp%%3A//localhost%%3A8890/schemas/progress/isports%%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 (
    'progress_isports_schemas_rule_list1',
    1,
    vector (
                'progress_isports_schemas_rule1',
                'progress_isports_schemas_rule2'
          ));

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

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

DB.DBA.XML_SET_NS_DECL ('customer',     'http://^{URIQADefaultHost}^/schemas/progress/isports/customer/', 2);
DB.DBA.XML_SET_NS_DECL ('order',        'http://^{URIQADefaultHost}^/schemas/progress/isports/order/', 2);
DB.DBA.XML_SET_NS_DECL ('item',         'http://^{URIQADefaultHost}^/schemas/progress/isports/item/', 2);
DB.DBA.XML_SET_NS_DECL ('orderline',    'http://^{URIQADefaultHost}^/schemas/progress/isports/order_line/', 2);
DB.DBA.XML_SET_NS_DECL ('invoice',      'http://^{URIQADefaultHost}^/schemas/progress/isports/invoice/', 2);
DB.DBA.XML_SET_NS_DECL ('localdefault', 'http://^{URIQADefaultHost}^/schemas/progress/isports/local_default/', 2);
DB.DBA.XML_SET_NS_DECL ('refcall',      'http://^{URIQADefaultHost}^/schemas/progress/isports/ref_call/', 2);
DB.DBA.XML_SET_NS_DECL ('salesrep',     'http://^{URIQADefaultHost}^/schemas/progress/isports/salesrep/', 2);
DB.DBA.XML_SET_NS_DECL ('state',        'http://^{URIQADefaultHost}^/schemas/progress/isports/state/', 2);