10.3 Example: Using an RDF View Graph with Direct Mapping

This section shows an example of using an RDF view graph with direct mapping.

Perform the following steps for creating and using an RDF view graph with direct mapping.

  1. Create two relational tables, EMP and DEPT, in the TESTUSER schema and grant READ privilege on these two tables to RDFUSER.
    -- Use the following relational tables.
    CREATE TABLE TESTUSER.dept (
      deptno NUMBER CONSTRAINT pk_DeptTab_deptno PRIMARY KEY,
      dname VARCHAR2(30),
      loc VARCHAR2(30)
    );
     
    CREATE TABLE TESTUSER.emp ( 
      empno NUMBER PRIMARY KEY,
      ename VARCHAR2(30),
      job VARCHAR2(20),
      deptno NUMBER REFERENCES dept (deptno)
    );
    
    GRANT READ ON TESTUSER.dept TO RDFUSER;
    
    GRANT READ ON TESTUSER.emp TO RDFUSER;
  2. Insert data into the tables.
    -- Insert some data.
     
    INSERT INTO TESTUSER.dept (deptno, dname, loc)
      VALUES (1, 'Sales', 'Boston');
    INSERT INTO TESTUSER.dept (deptno, dname, loc)
      VALUES (2, 'Manufacturing', 'Chicago');
    INSERT INTO TESTUSER.dept (deptno, dname, loc)
      VALUES (3, 'Marketing', 'Boston');
     
    INSERT INTO TESTUSER.emp (empno, ename, job, deptno)
      VALUES (1, 'Alvarez', 'SalesRep', 1);
    INSERT INTO TESTUSER.emp (empno, ename, job, deptno)
      VALUES (2, 'Baxter', 'Supervisor', 2);
    INSERT INTO TESTUSER.emp (empno, ename, job, deptno)
      VALUES (3, 'Chen', 'Writer', 3);
    INSERT INTO TESTUSER.emp (empno, ename, job, deptno)
      VALUES (4, 'Davis', 'Technician', 2);
  3. Connect as RDFUSER and create an RDF view graph, empdb_model, using direct mapping of the two tables created and populated in the preceding steps.
    -- Create an RDF view graph using direct mapping of two tables, EMP and DEPT, 
    -- with a base prefix of http://empdb/.
    -- Specify KEY_BASED_REF_PROPERTY=T for the options parameter.
    
    
    BEGIN
      sem_apis.create_rdfview_graph(
        rdf_graph_name => 'empdb_model',
        tables => SYS.ODCIVarchar2List('"TESTUSER"."EMP"', '"TESTUSER"."DEPT"'),
        prefix => 'http://empdb/',
        options => 'KEY_BASED_REF_PROPERTY=T'
        network_owner=>'RDFUSER',
        network_name=>'NET1'
      );
    END;
    /
  4. Query the newly created RDF view graph using a SEM_MATCH-based SQL query.
    SELECT emp
      FROM TABLE(SEM_MATCH(
        'PREFIX dept: <http://empdb/TESTUSER.DEPT#>
         PREFIX emp: <http://empdb/TESTUSER.EMP#>
         SELECT ?emp {?emp emp:ref-DEPTNO ?dept . ?dept dept:LOC "Boston"}',
        SEM_Models('empdb_model'),
        NULL,
        NULL,
        NULL, NULL,NULL, NULL,NULL, 'RDFUSER', 'NET1'));
    
    EMP
    --------------------------------------------------------------------------------
    http://empdb/TESTUSER.EMP/EMPNO=1
    http://empdb/TESTUSER.EMP/EMPNO=3

    The query shown in this step is functionally comparable to:

    SQL> SELECT e.empno FROM emp e, dept d WHERE e.deptno = d.deptno AND d.loc = 'Boston';
    
         EMPNO
    ----------
             1
             3