VOS.VirtRDFViewsDB2SampleDbScript

  • Topic
  • Discussion
  • VOS.VirtRDFViewsDB2SampleDbScript(Last) -- DAVWikiAdmin? , 2017-06-29 07:39:52 Edit WebDAV System Administrator 2017-06-29 07:39:52

    DB2 Sample Linked Data Views Script to set up your own instance


    -- $Id: $
    -- Setup script for Linked Data View of portions of DB2 SAMPLE database included
    -- in DB2 Express Edition v9.5
    -- 
    -- The script assumes external DB2 tables are linked into Virtuoso using 
    -- local schema name db2sample.
    
    DB..vd_remote_data_source ('db2ma-smpl', '', '<uid>','<pwd>);
    
    ATTACH TABLE  "DB2ADMIN"."ACT"      PRIMARY KEY ("ACTNO")              AS "DB"."db2sample"."ACT"      FROM 'db2ma-smpl';
    ATTACH TABLE  "DB2ADMIN"."DEPARTMENT"      PRIMARY KEY ("DEPTNO")              AS "DB"."db2sample"."DEPARTMENT"      FROM 'db2ma-smpl';
    ATTACH TABLE  "DB2ADMIN"."EMPLOYEE"      PRIMARY KEY ("EMPNO")              AS "DB"."db2sample"."EMPLOYEE"      FROM 'db2ma-smpl';
    ATTACH TABLE  "DB2ADMIN"."EMPPROJACT"      PRIMARY KEY ("EMPNO", "PROJNO", "ACTNO", "EMSTDATE")              AS "DB"."db2sample"."EMPPROJACT"      FROM 'db2ma-smpl';
    ATTACH TABLE  "DB2ADMIN"."EMP_RESUME"      PRIMARY KEY ("EMPNO", "RESUME_FORMAT")              AS "DB"."db2sample"."EMP_RESUME"      FROM 'db2ma-smpl';
    ATTACH TABLE  "DB2ADMIN"."PROJACT"      PRIMARY KEY ("PROJNO", "ACTNO", "ACSTDATE")              AS "DB"."db2sample"."PROJACT"      FROM 'db2ma-smpl';
    ATTACH TABLE  "DB2ADMIN"."PROJECT"      PRIMARY KEY ("PROJNO")              AS "DB"."db2sample"."PROJECT"      FROM 'db2ma-smpl';
    
    COMMIT WORK;
    
    GRANT SELECT ON DB.db2sample.ACT TO "SPARQL", "SPARQL_UPDATE";
    GRANT SELECT ON DB.db2sample.DEPARTMENT TO "SPARQL", "SPARQL_UPDATE";
    GRANT SELECT ON DB.db2sample.EMPLOYEE TO "SPARQL", "SPARQL_UPDATE";
    GRANT SELECT ON DB.db2sample.EMPPROJACT TO "SPARQL", "SPARQL_UPDATE";
    GRANT SELECT ON DB.db2sample.EMP_RESUME TO "SPARQL", "SPARQL_UPDATE";
    GRANT SELECT ON DB.db2sample.PROJACT TO "SPARQL", "SPARQL_UPDATE";
    GRANT SELECT ON DB.db2sample.PROJECT TO "SPARQL", "SPARQL_UPDATE";
    
    create function DB.DBA.PROJ_ACT_IRI (
      in proj_no varchar, 
      in act_no integer, 
      in ac_st_date date
      ) returns varchar
    {
      declare _act_no, _datetime, _date any;
      _act_no := cast(act_no as varchar);
      _datetime := cast(ac_st_date as varchar);
      _date := left(_datetime, 10);
      return sprintf('http://localhost:8890/db2sample/proj_act/%s_%s_%s#this',
        proj_no, _act_no, _date);
    };
    
    create function 
    DB.DBA.PROJ_ACT_IRI_INV_1 (in proj_act_iri varchar) returns varchar
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (proj_act_iri, 
       'http://localhost:8890/db2sample/proj_act/%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return parts[0];
      }
      return NULL;
    };
    
    create function 
    DB.DBA.PROJ_ACT_IRI_INV_2 (in proj_act_iri varchar) returns integer
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (proj_act_iri, 
       'http://localhost:8890/db2sample/proj_act/%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return cast(parts[1] as integer);
      }
      return NULL;
    };
    
    create function 
    DB.DBA.PROJ_ACT_IRI_INV_3 (in proj_act_iri varchar) returns date
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (proj_act_iri, 
       'http://localhost:8890/db2sample/proj_act/%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return cast(parts[2] as date);
      }
      return NULL;
    };
    
    create function DB.DBA.EMP_PROJ_ACT_IRI (
      in emp_no varchar,
      in proj_no varchar,
      in act_no integer,
      in emp_start_date date 
      ) returns varchar
    {
      declare _act_no, _datetime, _date any;
      _act_no := cast(act_no as varchar);
      _datetime := cast(emp_start_date as varchar);
      _date := left(_datetime, 10);
      return sprintf(
          'http://localhost:8890/db2sample/emp_proj_act/%s_%s_%s_%s#this',
        emp_no, proj_no, _act_no, _date);
    };
    
    create function 
    DB.DBA.EMP_PROJ_ACT_IRI_INV_1 (in emp_proj_act_iri varchar) returns varchar
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (emp_proj_act_iri, 
       'http://localhost:8890/db2sample/emp_proj_act/%s_%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return parts[0];
      }
      return NULL;
    };
    
    create function 
    DB.DBA.EMP_PROJ_ACT_IRI_INV_2 (in emp_proj_act_iri varchar) returns varchar
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (emp_proj_act_iri, 
       'http://localhost:8890/db2sample/emp_proj_act/%s_%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return parts[1];
      }
      return NULL;
    };
    
    create function 
    DB.DBA.EMP_PROJ_ACT_IRI_INV_3 (in emp_proj_act_iri varchar) returns integer
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (emp_proj_act_iri, 
       'http://localhost:8890/db2sample/emp_proj_act/%s_%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return cast(parts[2] as integer);
      }
      return NULL;
    };
    
    create function 
    DB.DBA.EMP_PROJ_ACT_IRI_INV_4 (in emp_proj_act_iri varchar) returns date
    {
      declare exit handler for sqlstate '*' { return NULL; };
      declare parts any;
      parts := sprintf_inverse (emp_proj_act_iri, 
       'http://localhost:8890/db2sample/emp_proj_act/%s_%s_%s_%s#this', 1);
      if (parts is not null)
      {
        return cast(parts[3] as date);
      }
      return NULL;
    };
    
    grant execute on DB.DBA.PROJ_ACT_IRI to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.PROJ_ACT_IRI_INV_1 to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.PROJ_ACT_IRI_INV_2 to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.PROJ_ACT_IRI_INV_3 to "SPARQL", "SPARQL_UPDATE";
    
    grant execute on DB.DBA.EMP_PROJ_ACT_IRI to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.EMP_PROJ_ACT_IRI_INV_1 to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.EMP_PROJ_ACT_IRI_INV_2 to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.EMP_PROJ_ACT_IRI_INV_3 to "SPARQL", "SPARQL_UPDATE";
    grant execute on DB.DBA.EMP_PROJ_ACT_IRI_INV_4 to "SPARQL", "SPARQL_UPDATE";
    
    sparql drop graph <http://localhost:8890/schemas/db2sample> ;
    sparql drop graph <http://localhost:8890/db2sample> ;
    
    sparql drop quad map virtrdf:db2sample ;
    
    --------------------------
    -- 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 opl: <http://localhost:8890/schemas/db2sample/> .
    
    opl:Act a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "Act" ;
    	rdfs:comment "Activity" .
    
    # ACTNO SMALLINT PRIMARY KEY
    opl:act_no a rdf:Property ;
    	rdfs:domain opl:Act ;
    	rdfs:range xsd:integer ;
    	rdfs:label "Activity number" .
    
    # ACTKWD VARCHAR(6) 
    opl:act_kwd a rdf:Property ;
    	rdfs:domain opl:Act ;
    	rdfs:range xsd:string ;
    	rdfs:label "Activity keyword" .
    
    # ACTDESC VARCHAR(20) 
    opl:act_desc a rdf:Property ;
    	rdfs:domain opl:Act ;
    	rdfs:range xsd:string ;
    	rdfs:label "Activity description" .
    
    #####
    opl:Department a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "Department" ;
    	rdfs:comment "Department" .
    
    # DEPTNO VARCHAR(3) PRIMARY KEY 
    opl:dept_no a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range xsd:string ;
    	rdfs:label "Department number" .
    
    # DEPTNAME VARCHAR(36) 
    opl:dept_name a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range xsd:string ;
    	rdfs:label "Department name" .
    
    # MGRNO CHAR(6)
    opl:dept_manager a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range xsd:Employee ;
    	rdfs:label "Department manager" .
    
    # ADMRDEPT CHAR(3)
    opl:supervising_dept a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range opl:Department ;
    	rdfs:label "Department reported to" .
    
    # LOCATION CHAR(6)
    opl:location a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range xsd:string ;
    	rdfs:label "Location" .
    
    opl:employee_collection a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range opl:Employee ;
    	rdfs:label "Department employees" .
    
    opl:dept_project_collection a rdf:Property ;
    	rdfs:domain opl:Department ;
    	rdfs:range opl:Project ;
    	rdfs:label "Department projects" .
    
    #####
    opl:Employee a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "Employee" ;
    	rdfs:comment "Employee" .
    
    # EMPNO VARCHAR(6) PRIMARY KEY 
    opl:emp_no a rdf:Property ;
    	rdfs:domain opl:Employee;
    	rdfs:range xsd:string ;
    	rdfs:label "Employee number" .
    
    # FIRSTNME VARCHAR(12) 
    opl:first_name a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:string ;
    	rdfs:label "First name" .
    
    # MIDINIT VARCHAR(1)
    opl:middle_initial a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:string ;
    	rdfs:label "Middle initial" .
    
    # LASTNAME VARCHAR(15)
    opl:last_name a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:string ;
    	rdfs:label "Last name" .
    
    # WORKDEPT VARCHAR(3)
    opl:work_dept a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range opl:Department ;
    	rdfs:label "Work department" .
    
    # PHONENO VARCHAR(4)
    opl:phone_no a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:string ;
    	rdfs:label "Phone number" .
    
    # HIREDATE DATE
    opl:hire_date a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:date;
    	rdfs:label "Hire date" .
    
    # JOB VARCHAR(8)
    opl:job a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:string ;
    	rdfs:label "Job" .
    
    # EDLEVEL SMALLINT
    opl:education_level a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:integer ;
    	rdfs:label "Education level" .
    
    # SEX VARCHAR(1)
    opl:gender a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:string ;
    	rdfs:label "Gender" .
    
    # BIRTHDATE DATE
    opl:date_of_birth a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:date ;
    	rdfs:label "Date of birth" .
    
    # SALARY DECIMAL(9,2)
    opl:salary a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:decimal ;
    	rdfs:label "Salary" .
    
    # BONUS DECIMAL(9,2)
    opl:bonus a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:decimal ;
    	rdfs:label "Bonus" .
    
    # COMM DECIMAL(9,2)
    opl:commission a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range xsd:decimal ;
    	rdfs:label "Commission" .
    
    opl:resume_collection a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range opl:EmployeeResume ;
    	rdfs:label "Employee resumes" .
    
    opl:projects_responsible_for_collection a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range opl:Project ;
    	rdfs:label "reponsible for project" .
    
    opl:activity_collection a rdf:Property ;
    	rdfs:domain opl:Employee ;
    	rdfs:range opl:EmpProjAct ;
    	rdfs:label "project activities" .
    
    #####
    opl:EmpProjAct a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "EmpProjAct" ;
    	rdfs:comment "Employee project activity" .
    
    # EMPNO VARCHAR(6) PRIMARY KEY 
    opl:epa_emp_no a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range xsd:string ;
    	rdfs:label "Employee number" .
    
    # PROJNO VARCHAR(6) PRIMARY KEY 
    opl:epa_proj_no a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range xsd:string ;
    	rdfs:label "Project number" .
    
    # ACTNO SMALLINT PRIMARY KEY
    opl:epa_act_no a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range xsd:string ;
    	rdfs:label "Activity number" .
    
    # EMSTDATE DATE PRIMARY KEY 
    opl:emp_start_date a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range xsd:date ;
    	rdfs:label "Employee activity start date" .
    
    # EMPTIME DECIMAL(5,2)
    opl:emp_time a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range xsd:decimal ;
    	rdfs:label "Employee time" .
    
    # EMENDATE DATE PRIMARY KEY 
    opl:emp_end_date a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range xsd:date ;
    	rdfs:label "Employee activity end date" .
    
    opl:assigned_to a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range opl:Employee ;
    	rdfs:label "Assigned to" .
    
    opl:project_activity a rdf:Property ;
    	rdfs:domain opl:EmpProjAct ;
    	rdfs:range opl:ProjAct ;
    	rdfs:label "Project activity" .
    
    #####
    opl:EmployeeResume a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "EmployeeResume" ;
    	rdfs:comment "Employee resume" .
    
    # EMPNO VARCHAR(6) PRIMARY KEY 
    opl:er_emp_no a rdf:Property ;
    	rdfs:domain opl:EmployeeResume ;
    	rdfs:range xsd:string ;
    	rdfs:label "Employee number" .
    
    # RESUME_FORMAT VARCHAR(10) PRIMARY KEY 
    opl:resume_format a rdf:Property ;
    	rdfs:domain opl:EmployeeResume ;
    	rdfs:range xsd:string ;
    	rdfs:label "Resume format" .
    
    # RESUME VARCHAR(5120)
    opl:resume a rdf:Property ;
    	rdfs:domain opl:EmployeeResume ;
    	rdfs:range xsd:string ;
    	rdfs:label "Resume" .
    
    opl:resume_of a rdf:Property ;
    	rdfs:domain opl:EmployeeResume ;
    	rdfs:range opl:Employee ;
    	rdfs:label "Resume subject" .
    
    #####
    opl:ProjAct a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "ProjAct" ;
    	rdfs:comment "Project activity" .
    
    # PROJNO VARCHAR(6) PRIMARY KEY 
    opl:pa_proj_no a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range xsd:string ;
    	rdfs:label "Project number" .
    
    # ACTNO SMALLINT PRIMARY KEY 
    opl:pa_act_no a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range xsd:string ;
    	rdfs:label "Activity number" .
    
    # ACSTDATE DATE PRIMARY KEY 
    opl:ac_st_date a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range xsd:date ;
    	rdfs:label "Activity start date" .
    
    # ACSTAFF DECIMAL(5,2)
    opl:ac_staff a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range xsd:decimal ;
    	rdfs:label "Acstaff" .
    
    # ACENDATE DATE
    opl:ac_en_date a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range xsd:date ;
    	rdfs:label "Activity end date" .
    
    opl:project a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range opl:Project ;
    	rdfs:label "Project" .
    
    opl:activity a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range opl:Act ;
    	rdfs:label "Activity" .
    
    opl:employee_activity_collection a rdf:Property ;
    	rdfs:domain opl:ProjAct ;
    	rdfs:range opl:EmpProjAct ;
    	rdfs:label "Employee activity collection" .
    
    #####
    opl:Project a rdfs:Class ;
    	rdfs:isDefinedBy <http://localhost:8890/schemas/db2sample> ;
    	rdfs:label "Project" ;
    	rdfs:comment "Project" .
    
    # PROJNO VARCHAR(6) PRIMARY KEY 
    opl:proj_no a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range xsd:string ;
    	rdfs:label "Project number" .
    
    # PROJNAME VARCHAR(24)
    opl:proj_name a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range xsd:string ;
    	rdfs:label "Project name" .
    
    # DEPTNO CHAR(3)
    opl:is_project_of_department a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range opl:Department ;
    	rdfs:label "is project of department" .
    
    # RESPEMP VARCHAR(6)
    opl:resp_emp a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range opl:Employee ;
    	rdfs:label "Employee responsible" .
    
    # PRSTAFF DECIMAL(5,2)
    opl:pr_staff a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range xsd:decimal ;
    	rdfs:label "PrStaff" .
    
    # PRSTDATE DATE
    opl:pr_st_date a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range xsd:date ;
    	rdfs:label "Project start date" .
    
    # PRENDATE DATE
    opl:pr_en_date a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range xsd:date ;
    	rdfs:label "Project end date" .
    
    # MAJPROJ VARCHAR(6)
    opl:maj_proj a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range xsd:string ;
    	rdfs:label "MajProj" .
    
    opl:proj_activity_collection a rdf:Property ;
    	rdfs:domain opl:Project ;
    	rdfs:range opl:ProjAct ;
    	rdfs:label "Project activities" .
    
    ', '', 'http://localhost:8890/schemas/db2sample', 0);
    
    --------------------------
    
    sparql
    prefix opl: <http://localhost:8890/schemas/db2sample/>
    
    create iri class
    <http://localhost:8890/schemas/db2sample/act_iri>
    	"http://localhost:8890/db2sample/act/%d#this"
    	(
    	 in act_no integer not null
    	) .
    
    create iri class
    <http://localhost:8890/schemas/db2sample/department_iri>
    	"http://localhost:8890/db2sample/department/%s#this"
    	(
    	 in dept_no varchar not null
    	) .
    
    create iri class
    <http://localhost:8890/schemas/db2sample/employee_iri>
    	"http://localhost:8890/db2sample/employee/%s#this"
    	(
    	 in emp_no varchar not null
    	) .
    
    create iri class opl:emp_proj_act_iri using
    	function DB.DBA.EMP_PROJ_ACT_IRI (
    	 	in emp_no varchar,
    	 	in proj_no varchar,
    	 	in act_no integer,
    	 	in emp_start_date date 
    		) returns varchar,
    	function DB.DBA.EMP_PROJ_ACT_IRI_INV_1 (in emp_proj_act_iri varchar) 
    		returns varchar ,
    	function DB.DBA.EMP_PROJ_ACT_IRI_INV_2 (in emp_proj_act_iri varchar) 
    		returns varchar ,
    	function DB.DBA.EMP_PROJ_ACT_IRI_INV_3 (in emp_proj_act_iri varchar) 
    		returns integer , 
    	function DB.DBA.EMP_PROJ_ACT_IRI_INV_4 (in emp_proj_act_iri varchar) 
    		returns date
    	option (bijection, returns 
    	  "http://localhost:8890/db2sample/emp_proj_act/%s_%s_%s_%s#this")
    	.
    
    
    create iri class
    <http://localhost:8890/schemas/db2sample/employee_resume_iri>
    	"http://localhost:8890/db2sample/employee_resume/%s_%s#this"
    	(
    	 in emp_no varchar not null,
    	 in resume_format varchar not null
    	) .
    
    create iri class opl:proj_act_iri using
    	function DB.DBA.PROJ_ACT_IRI (
    		in proj_no varchar,
    		in act_no integer,
    		in ac_st_date date
    		) returns varchar,
    	function DB.DBA.PROJ_ACT_IRI_INV_1 (in proj_act_iri varchar) 
    		returns varchar ,
    	function DB.DBA.PROJ_ACT_IRI_INV_2 (in proj_act_iri varchar) 
    		returns integer ,
    	function DB.DBA.PROJ_ACT_IRI_INV_3 (in proj_act_iri varchar) 
    		returns date 
    	option (bijection, returns 
    		"http://localhost:8890/db2sample/proj_act/%s_%s_%s#this")
    	.
    
    create iri class
    <http://localhost:8890/schemas/db2sample/project_iri>
    	"http://localhost:8890/db2sample/project/%s#this"
    	(
    	 in proj_no varchar not null
    	) .
    ;
    
    sparql
    prefix opl: <http://localhost:8890/schemas/db2sample/>
    
    alter quad storage virtrdf:DefaultQuadStorage
    from DB.db2sample.ACT as act_tbl
    from DB.db2sample.DEPARTMENT as dept_tbl
    from DB.db2sample.EMPLOYEE as emp_tbl
    from DB.db2sample.EMPPROJACT as emp_proj_act_tbl
    from DB.db2sample.EMP_RESUME as emp_resume_tbl
    from DB.db2sample.PROJACT as proj_act_tbl
    from DB.db2sample.PROJECT as project_tbl
    {
    	create virtrdf:db2sample as
    		graph <http://localhost:8890/db2sample>
    	{
    	opl:act_iri(act_tbl.ACTNO) a opl:Act
    		as virtrdf:act_id ;
    	opl:act_no act_tbl.ACTNO
    		as virtrdf:act_act_no ;
    	opl:act_kwd act_tbl.ACTKWD
    		as virtrdf:act_act_kwd ;
    	opl:act_desc act_tbl.ACTDESC
    		as virtrdf:act_act_desc .
    
    	opl:department_iri(dept_tbl.DEPTNO) a opl:Department
    		as virtrdf:dept_id ;
    	opl:dept_no dept_tbl.DEPTNO
    		as virtrdf:dept_dept_no ;
    	opl:dept_name dept_tbl.DEPTNAME
    		as virtrdf:dept_dept_name ;
    	opl:dept_manager opl:employee_iri(dept_tbl.MGRNO)
    		as virtrdf:dept_mgr_no ;
    	opl:supervising_dept opl:department_iri(dept_tbl.ADMRDEPT)
    		as virtrdf:dept_supervising_dept ;
    	opl:location dept_tbl.LOCATION
    		as virtrdf:dept_location ;
    	opl:employee_collection opl:employee_iri(emp_tbl.EMPNO) 
    		where (^{emp_tbl.}^.WORKDEPT = ^{dept_tbl.}^.DEPTNO)
    		as virtrdf:dept_employee_collection ;
    	opl:dept_project_collection opl:project_iri(project_tbl.PROJNO) 
    		where (^{project_tbl.}^.DEPTNO = ^{dept_tbl.}^.DEPTNO)
    		as virtrdf:dept_project_collection .
    
    	opl:employee_iri(emp_tbl.EMPNO) a opl:Employee
    		as virtrdf:employee_id ;
    	opl:emp_no emp_tbl.EMPNO
    		as virtrdf:employee_emp_no ;
    	opl:first_name emp_tbl.FIRSTNME
    		as virtrdf:employee_first_name ;
    	opl:middle_initial emp_tbl.MIDINIT
    		as virtrdf:employee_middle_initial ;
    	opl:last_name emp_tbl.LASTNAME
    		as virtrdf:employee_last_name ;
    	opl:work_dept opl:department_iri(emp_tbl.WORKDEPT)
    		as virtrdf:employee_work_dept ;
    	opl:phone_no emp_tbl.PHONENO
    		as virtrdf:employee_phone_no ;
    	opl:hire_date emp_tbl.HIREDATE
    		as virtrdf:employee_hire_date ;
    	opl:job emp_tbl.JOB
    		as virtrdf:employee_job ;
    	opl:education_level emp_tbl.EDLEVEL
    		as virtrdf:employee_education_level ;
    	opl:gender emp_tbl.SEX
    		as virtrdf:employee_gender ;
    	opl:date_of_birth emp_tbl.BIRTHDATE
    		as virtrdf:employee_date_of_birth ;
    	opl:salary emp_tbl.SALARY
    		as virtrdf:employee_salary ;
    	opl:bonus emp_tbl.BONUS
    		as virtrdf:employee_bonus ;
    	opl:commission emp_tbl.COMM
    		as virtrdf:employee_commission ;
    	opl:resume_collection opl:employee_resume_iri(
    		emp_resume_tbl.EMPNO,
    		emp_resume_tbl.RESUME_FORMAT
    		) 
    		where (^{emp_tbl.}^.EMPNO = ^{emp_resume_tbl.}^.EMPNO)
    		as virtrdf:employee_resume_collection ;
    	opl:projects_responsible_for_collection
     		opl:project_iri(project_tbl.PROJNO) 
    		where (^{project_tbl.}^.RESPEMP = ^{emp_tbl.}^.EMPNO)
    		as virtrdf:employee_projects_responsible_for_collection ;
    	opl:activity_collection opl:emp_proj_act_iri(
    		emp_proj_act_tbl.EMPNO,
    		emp_proj_act_tbl.PROJNO,
    		emp_proj_act_tbl.ACTNO,
    		emp_proj_act_tbl.EMSTDATE
    		) 
    		where (^{emp_tbl.}^.EMPNO = ^{emp_proj_act_tbl.}^.EMPNO)
    		as virtrdf:employee_activity_collection .
    
    	opl:emp_proj_act_iri(
    		emp_proj_act_tbl.EMPNO,
    		emp_proj_act_tbl.PROJNO,
    		emp_proj_act_tbl.ACTNO,
    		emp_proj_act_tbl.EMSTDATE
    		) a opl:EmpProjAct
    		as virtrdf:empprojact_id ;
    	opl:epa_emp_no emp_proj_act_tbl.EMPNO
    		as virtrdf:empprojact_emp_no ;
    	opl:epa_proj_no emp_proj_act_tbl.PROJNO
    		as virtrdf:empprojact_proj_no ;
    	opl:epa_act_no emp_proj_act_tbl.ACTNO
    		as virtrdf:empprojact_act_no ;
    	opl:emp_start_date emp_proj_act_tbl.EMSTDATE
    		as virtrdf:empprojact_emp_start_date ;
    	opl:emp_time emp_proj_act_tbl.EMPTIME
    		as virtrdf:empprojact_emp_time ;
    	opl:emp_end_date emp_proj_act_tbl.EMENDATE
    		as virtrdf:empprojact_emp_end_date ;
    	opl:assigned_to opl:employee_iri(emp_proj_act_tbl.EMPNO)
    		as virtrdf:empprojact_assigned_to ;
    	opl:project_activity opl:proj_act_iri(
    		emp_proj_act_tbl.PROJNO,
    		emp_proj_act_tbl.ACTNO,
    		emp_proj_act_tbl.EMSTDATE
    		)
    		as virtrdf:empprojact_project_activity .
    
    	opl:employee_resume_iri(
    		emp_resume_tbl.EMPNO,
    		emp_resume_tbl.RESUME_FORMAT
    		) a opl:EmployeeResume
    		as virtrdf:employee_resume_id ;
    	opl:er_emp_no emp_resume_tbl.EMPNO
    		as virtrdf:employee_resume_emp_no ;
    	opl:resume_format emp_resume_tbl.RESUME_FORMAT
    		as virtrdf:employee_resume_resume_format ;
    	opl:resume emp_resume_tbl.RESUME 
    		as virtrdf:employee_resume_resume ;
    	opl:resume_of opl:employee_iri(emp_resume_tbl.EMPNO)
    		as virtrdf:employee_resume_resume_of .
    
    	opl:proj_act_iri(
    		proj_act_tbl.PROJNO,
    		proj_act_tbl.ACTNO,
    		proj_act_tbl.ACSTDATE
    		) a opl:ProjAct
    		as virtrdf:projact_id;
    	opl:pa_proj_no proj_act_tbl.PROJNO
    		as virtrdf:projact_proj_no ;
    	opl:pa_act_no proj_act_tbl.ACTNO
    		as virtrdf:projact_act_no ;
    	opl:ac_st_date proj_act_tbl.ACSTDATE
    		as virtrdf:projact_ac_st_date ;
    	opl:ac_staff proj_act_tbl.ACSTAFF
    		as virtrdf:projact_ac_staff ;
    	opl:ac_en_date proj_act_tbl.ACENDATE
    		as virtrdf:projact_ac_en_date ;
    	opl:project opl:project_iri(proj_act_tbl.PROJNO)
    		as virtrdf:projact_project ;
    	opl:activity opl:act_iri(proj_act_tbl.ACTNO)
    		as virtrdf:projact_activity ;
    	opl:employee_activity_collection opl:emp_proj_act_iri(
    		emp_proj_act_tbl.EMPNO,
    		emp_proj_act_tbl.PROJNO,
    		emp_proj_act_tbl.ACTNO,
    		emp_proj_act_tbl.EMSTDATE
    		)
    		where (
    		^{proj_act_tbl.}^.PROJNO = ^{emp_proj_act_tbl.}^.PROJNO AND
    	        ^{proj_act_tbl.}^.ACTNO = ^{emp_proj_act_tbl.}^.ACTNO AND
    	        ^{proj_act_tbl.}^.ACSTDATE = ^{emp_proj_act_tbl.}^.EMSTDATE
    	        )
    		as virtrdf:project_employee_activity_collection .
    
    	opl:project_iri(project_tbl.PROJNO) a opl:Project
    		as virtrdf:project_id ;
    	opl:proj_no project_tbl.PROJNO
    		as virtrdf:project_proj_no ;
    	opl:proj_name project_tbl.PROJNAME
    		as virtrdf:project_proj_name ;
    	opl:is_project_of_department opl:department_iri(project_tbl.DEPTNO)
    		as virtrdf:project_is_project_of_department ;
    	opl:resp_emp opl:employee_iri(project_tbl.RESPEMP)
    		as virtrdf:project_resp_emp ;
    	opl:pr_staff project_tbl.PRSTAFF
    		as virtrdf:project_pr_staff ;
    	opl:pr_st_date project_tbl.PRSTDATE
    		as virtrdf:project_pr_st_date ;
    	opl:pr_en_date project_tbl.PRENDATE
    		as virtrdf:project_pr_en_date ;
    	opl:maj_proj project_tbl.MAJPROJ
    		as virtrdf:project_maj_proj ;
    	opl:proj_activity_collection opl:proj_act_iri(
    		proj_act_tbl.PROJNO,
    		proj_act_tbl.ACTNO,
    		proj_act_tbl.ACSTDATE
    		)
    		where (^{project_tbl.}^.PROJNO = ^{proj_act_tbl.}^.PROJNO)
    		as virtrdf:project_activity_collection .
    	} .
    } .
    ;
    
    delete from db.dba.url_rewrite_rule_list where urrl_list like 'db2sample_rule%';
    delete from db.dba.url_rewrite_rule where urr_rule like 'db2sample_rule%';
    
    DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
        'db2sample_rule1',
        1,
        '(/[^#]*)',
        vector('path'),
        1,
        '/about/html/http://localhost:8890%s',
        vector('path'),
        null,
        '(text/html)|(\\*/\\*)',
        0,
        303
        );
    
    DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
        'db2sample_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/db2sample%%3E&format=%U',
    
        vector('path','path','*accept*'),
        null,
        '(text/rdf.n3)|(application/rdf.xml)',
        0,
        null
        );
    
    DB.DBA.URLREWRITE_CREATE_RULELIST (
        'db2sample_rule_list1',
        1,
        vector (
      	 	'db2sample_rule1',
      	 	'db2sample_rule2'
    	  ));
    
    
    -- ensure a VD for the IRIs which begins with /
    VHOST_REMOVE (lpath=>'/db2sample');
    
    VHOST_DEFINE (
    	lpath=>'/db2sample', 
    	ppath=>'/DAV/db2sample/', 
    	vsp_user=>'dba', 
        	is_dav=>1, 
    	is_brws=>0, 
    	opts=>vector ('url_rewrite', 'db2sample_rule_list1') 
    	);
    delete from db.dba.url_rewrite_rule_list where urrl_list like 'db2sample_schema_rule%';
    delete from db.dba.url_rewrite_rule where urr_rule like 'db2sample_schema_rule%';
    
    DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
        'db2sample_schema_rule1',
        1,
        '(/[^#]*)',
        vector('path'),
        1,
        '/about/html/http://localhost:8890%U',
        vector('path'),
        null,
        '(text/html)|(\\*/\\*)',
        0,
        303
        );
    
    DB.DBA.URLREWRITE_CREATE_REGEX_RULE (
        'db2sample_schema_rule2',
        1,
        '(/[^#]*)',
        vector('path'),
        1,
        '/sparql?query=CONSTRUCT+{+%%3Chttp%%3A//localhost%%3A8890%U%%3E+%%3Fp+%%3Fo+}%%0D%%0AFROM+%%3Chttp%%3A//localhost%%3A8890/schemas/db2sample%%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 (
        'db2sample_schema_rule_list1',
        1,
        vector (
      	 	'db2sample_schema_rule1',
      	 	'db2sample_schema_rule2'
    	  ));
    
    
    -- ensure a VD for the IRIs which begins with /
    VHOST_REMOVE (lpath=>'/schemas/db2sample');
    
    VHOST_DEFINE (
    	lpath=>'/schemas/db2sample', 
    	ppath=>'/DAV/schemas_db2sample/', 
    	vsp_user=>'dba', 
        	is_dav=>1, 
    	is_brws=>0, 
    	opts=>vector ('url_rewrite', 'db2sample_schema_rule_list1') 
    	);