Narzędzia użytkownika

Narzędzia witryny


laboratorium-ost

Oracle Semantic Technologies

Celem ćwiczenia jest zapoznanie studentów z narzędziem Oracle Semantic Technologies oraz przedstawienie sposobów zapisywania danych semantycznych za pomocą silnika relacyjnej bazy danych i ich przetwarzania za pomocą języka SQL. W pierwszej części ćwiczenia studenci poznają sposób składowania danych semantycznych w bazie danych oraz ćwiczą definiowanie ontologii za pomocą języków RDFS i OWL. Druga część ćwiczenia obrazuje sposób definiowania nowych własności, efekt budowania bazy reguł, a także możliwość wzbogacenia istniejących danych relacyjnych za pomocą dołączonej ontologii.

Dostęp do bazy danych za pomocą narzędzia iSQLPlus (identyfikator połączenia: dblab11g)

1. Utwórz tabelę do fizycznego przechowywania danych semantycznych, a następnie utwórz model, który będzie stanowił logiczny kontener dla danych semantycznych. UWAGA: nazwa modelu musi być unikalna (wykorzystaj numer użytkownika)

CREATE TABLE emp_rdf (
       id NUMBER,
       triple SDO_RDF_TRIPLE_S);
 
BEGIN
  SEM_APIS.CREATE_RDF_MODEL(
      'Employees',                        
      'emp_rdf',                           
      'triple');                            
END;

2. Zapoznaj się z sygnaturą typów obiektowych SDO_RDF_TRIPLE i SDO_RDF_TRIPLE_S

DESCRIBE SDO_RDF_TRIPLE
 
DESCRIBE SDO_RDF_TRIPLE

3. Wstaw do bazy danych kilka przykładowych faktów

-- King jest menadżerem Blake’a
INSERT INTO emp_rdf VALUES (1, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/King',
  'http://semantic.cs.put.poznan.pl/emp/managerOf',
  'http://semantic.cs.put.poznan.pl/emp/Blake'));
 
-- Allen pracuje jako Salesman
INSERT INTO emp_rdf VALUES (2, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Allen',
  'http://www.w3.org/1999/02/22-rdf-syntax-ns#type',
  'http://semantic.cs.put.poznan.pl/emp/Salesman'));
 
-- Ford zarabia 3000
INSERT INTO emp_rdf VALUES (3, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Ford',
  'http://semantic.cs.put.poznan.pl/emp/salary',
  '"3000"^^xsd:decimal'));
 
-- departament Accounting znajduje się w Nowym Jorku
INSERT INTO emp_rdf VALUES (4, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Accounting',
  'http://semantic.cs.put.poznan.pl/emp/locatedIn',
  'http://semantic.cs.put.poznan.pl/emp/NewYork'));

4. Odczytaj wstawione do bazy danych informacje wykorzystując interfejs typu obiektowego SDO_RDF_TRIPLE_S

SELECT e.triple.get_subject() AS subject,
            e.triple.get_property() AS property,
            e.triple.get_object() AS object
     FROM emp_rdf e;

5. Wydaj przykładowe zapytanie wykorzystując język SPARQL i funkcję SEM_MATCH

SELECT m, n
     FROM TABLE( 
       SEM_MATCH('(?m :managerOf ?n)',
       SEM_MODELS('Employees'),
       NULL,
       SEM_ALIASES(
         SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),
       NULL));
 
SELECT m, s
     FROM TABLE( 
       SEM_MATCH('(?m :salary ?s)',
       SEM_MODELS('Employees'),
       NULL,
       SEM_ALIASES(
         SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),
       NULL))
     WHERE s > 2500;

6. Zwróć uwagę na możliwość wykorzystywania domyślnych przestrzeni nazw w funkcji SEM_MATCH:

7. Usuń poprzednio stworzony zbiór reguł (ten krok nie jest wymagany w przypadku pierwszego uruchomienia) i utwórz nowy zbiór reguł. UWAGA: zbiór reguł musi mieć unikalną nazwę (posłuż się numerem indeksu)

BEGIN
  SEM_APIS.DROP_ENTAILMENT('owl_rix_employees');
END;
/
 
BEGIN
  SEM_APIS.CREATE_ENTAILMENT('owl_rix_employees',
    SEM_MODELS('Employees'),
    SEM_RULEBASES('OWLPRIME'));
END;

8. Dodaj informację o tym, że nazwisko Kinga to “King” oraz że Blake jest menadżerem Jonesa. Następnie, dodaj informację o tym, że bycie przełożoną(ym) jest relacją przechodnią. Aby można było powiedzieć cokolwiek na temat bycia przełożoną(ym) należy uprzednio poinformować bazę danych, że „managerOf” jest cechą o której można formułować sądy.

-- King ma nazwisko "King"
INSERT INTO emp_rdf VALUES (5, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/King',
  'http://semantic.cs.put.poznan.pl/emp/hasName',
  '"King"^^xsd:string')
);
 
-- Blake jest menadżerem Jonesa
INSERT INTO emp_rdf VALUES (6, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Blake',
  'http://semantic.cs.put.poznan.pl/emp/managerOf',
  'http://semantic.cs.put.poznan.pl/emp/Jones')
);
 
-- bycie przełożoną(ym) jest cechą
INSERT INTO emp_rdf VALUES (7, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/managerOf',
  'rdf:type',
  'rdf:Property')
);
 
INSERT INTO emp_rdf VALUES (8, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/managerOf',
  'rdf:type',
  'owl:TransitiveProperty')
);

9. Wyświetl wszystkich podwładnych Kinga. Sprawdź, jaki wpływ na wynik zapytania ma włączenie wnioskowania w bazie danych. Przed wydaniem zapytania wykonaj kroki z pkt. 7 aby przebudować indeks reguł.

SELECT n
  FROM TABLE( SEM_MATCH('(?m :managerOf ?n) (?m :hasName "King")',
    SEM_MODELS('Employees'), NULL,
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),NULL));
 
SELECT n
  FROM TABLE( SEM_MATCH('(?m :managerOf ?n) (?m :hasName "King")',
    SEM_MODELS('Employees'), SDO_RDF_RULEBASES('OWLPRIME'),
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),NULL));

10. Dodaj do bazy danych informacje o tym, że Blake zna Scotta oraz że relacja znajomości jest symetryczna.

-- Blake zna Scotta
INSERT INTO emp_rdf VALUES (9, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Blake',
  'http://semantic.cs.put.poznan.pl/emp/knows',
  'http://semantic.cs.put.poznan.pl/emp/Scott'));
 
-- knows jest cechą symetryczną
INSERT INTO emp_rdf VALUES (10, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/knows',
  'rdf:type',
  'owl:SymmetricProperty'));

11. Wyświetl pary pracowników, którzy się nawzajem znają. Przed wydaniem zapytania wykonaj kroki z pkt. 7 aby przebudować indeks reguł.

-- znajdź pary pracowników postaci X zna Y
SELECT m,n
  FROM TABLE( SEM_MATCH('(?m :knows ?n)',
    SEM_MODELS('Employees'),SDO_RDF_RULEBASES('OWLPRIME'),
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),NULL));

12. Dodaj do bazy danych informację o tym, że Allen zarabia 5000. Wykorzystaj do tego predykat „pay”. Zauważ, że w bazie danych występują teraz dwa różne predykaty o tym samym znaczeniu: „salary” i „pay”. Dodaj informację o tym, że są to cechy równoważne.

-- Allen zarabia 5000
INSERT INTO emp_rdf VALUES (11, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Allen',
  'http://semantic.cs.put.poznan.pl/emp/pay',
  '"5000"^^xsd:decimal'));
 
-- "pay" i "salary" to równoważne własności
INSERT INTO emp_rdf VALUES (12, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/salary',
  'owl:equivalentProperty',
  'http://semantic.cs.put.poznan.pl/emp/pay'));

13. Wyświetl pracowników, którzy zarabiają powyżej 2000. Przed wydaniem zapytania wykonaj kroki z pkt. 7 aby przebudować indeks reguł

SELECT e, s
  FROM TABLE( SEM_MATCH('(?e :salary ?s)',
    SEM_MODELS('Employees'), SDO_RDF_RULEBASES('OWLPRIME'),
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),
    NULL, NULL))
  WHERE s > 2000;

14. Dodaj do bazy danych nową cechę „subordinateOf” która będzie odwrotnością cechy „managerOf”. Wykorzystując nowo dodaną cechę wyświetl wszystkich podwładnych Kinga. Przed wydaniem zapytania wykonaj kroki z pkt. 7 aby przebudować indeks reguł. Zauważ, że w bazie danych nie ma ani jednego jawnie wyspecyfikowanego faktu w postaci X subordinateOf Y.

-- bycie podwładną(ym) jest odwrotnością bycia przełożoną(ym)
INSERT INTO emp_rdf VALUES (13, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/subordinateOf',
  'owl:inverseOf',
  'http://semantic.cs.put.poznan.pl/emp/managerOf'));
 
-- przebuduj indeks reguł
 
SELECT m, n
  FROM TABLE(SEM_MATCH('(?m :subordinateOf ?n)(?n :hasName "King")',
    SEM_MODELS('Employees'), SDO_RDF_RULEBASES('OWLPRIME'),
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),
    NULL, NULL));

15. Dodaj do bazy danych klasy reprezentujące pracowników i menadżerów. Zdefiniuj menadżerów jako podzbiór pracowników. Przypisz Allena do pracowników, a Kinga do menadżerów.

-- Employee i Manager to klasy
INSERT INTO emp_rdf VALUES (14, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Employee',
  'rdf:type',
  'rdfs:Class'));
 
INSERT INTO emp_rdf VALUES (15, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Manager',
  'rdf:type',
  'rdfs:Class'));
 
-- menadżerowie są podzbiorem pracowników
INSERT INTO emp_rdf VALUES (16, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Manager',
  'rdfs:subClassOf',
  'http://semantic.cs.put.poznan.pl/emp/Employee'));
 
-- King jest menadżerem a Allen pracownikiem
INSERT INTO emp_rdf VALUES (17, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/King',
  'rdf:type',
  'http://semantic.cs.put.poznan.pl/emp/Manager'));
 
INSERT INTO emp_rdf VALUES (18, SDO_RDF_TRIPLE_S('Employees',
  'http://semantic.cs.put.poznan.pl/emp/Allen',
  'rdf:type',
  'http://semantic.cs.put.poznan.pl/emp/Employee'));

16. Wyświetl wszystkich pracowników. Przed wydaniem zapytania wykonaj kroki z pkt. 7 aby przebudować indeks reguł. Następnie wyświetl wszystkich menadżerów i porównaj uzyskane wyniki.

SELECT m
  FROM TABLE(SEM_MATCH('(?m rdf:type :Employee)',
    SEM_MODELS('Employees'), SDO_RDF_RULEBASES('OWLPRIME'),
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),
    NULL, NULL));
 
SELECT m
  FROM TABLE(SEM_MATCH('(?m rdf:type :Manager)',
    SEM_MODELS('Employees'), SDO_RDF_RULEBASES('OWLPRIME'),
    SEM_ALIASES(
      SEM_ALIAS('','http://semantic.cs.put.poznan.pl/emp/')),
    NULL, NULL));

Dla osób zainteresowanych dostępna jest także rozszerzona wersja tutorialu

laboratorium-ost.txt · ostatnio zmienione: 2016/07/12 14:16 (edycja zewnętrzna)