Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://sp.cs.msu.ru/datalog/levshin-swps.pdf
Äàòà èçìåíåíèÿ: Wed May 23 22:22:57 2007
Äàòà èíäåêñèðîâàíèÿ: Mon Oct 1 20:12:07 2012
Êîäèðîâêà:

Ïîèñêîâûå ñëîâà: http www.sai.msu.su megera
PostgreSQL
, . .. E-mail: levshin@nicevt.ru, markov@nicevt.ru


PostgreSQL . , , , .

1
PostgreSQL [1] - () - . [2] -. 90- XX , 1998 . 1999 (W3C). : , . (World Wide Web), , . . , , . (RDF, RDFS, OWL SWRL) . , . PostgreSQL,

1


, , . , PostgreSQL , . , SQL , , PostgreSQL. , PostgreSQL, . PostgreSQL . PostgreSQL, .

1.1
. , , . 2004 . W3C RDF [3] (Resource Description Framework, ). : , . RDF () « () ­ () ­ ( )». , , URI (Uniform Resource Identifier). , , UNICODE. RDF Semantic Web, . RDF. RDF - RDF Schema (RDFS) [4] - 2


, , , . . OWL (Web Ontology Language) [5] , . SWRL (Semantic Web Rule Language) [6] OWL, - . () (), . : parentOf(?x,?y) & Man(?x) fatherOf(?x,?y) parentOf(?x,?y) & brotherOf(?x,?z) uncleOf(?z,?x)

2
ProtÈgÈ [7] ­ , TopBraid Composer [8], , Oracle.

2.1 ProtÈgÈ TopBraid Composer
ProtÈgÈ , . TopBraid Composer RDF, RDFS, OWL, SWRL SPARQL [9] W3C . , ProtÈgÈ TopBraid Composer, . RDF, RDFS, OWL, SWRL SPARQL . , , , . OWL. TopBraid Composer Jena. SPARQL , 3


, . SPARQL RDF , . . , ProtÈgÈ , TopBraid Composer ­ . , TopBraid Composer ( ), ProtÈgÈ. , ProtÈgÈ , TopBraid Composer . , TopBraid Composer OWL DL Pellet , ProtÈgÈ Racer. TopBraid Composer Eclipse , UML . , ProtÈgÈ 10 , API RDFS OWL. TopBraid Composer,, . ProtÈgÈ [10]. ProtÈgÈ 2 : . ProtÈgÈ ­ . ProtÈgÈ . . ProtÈgÈ , , - . ProtÈgÈ Java API. ProtÈgÈ , , , UML OWL. OWL ProtÈgÈ, RDFS, OWL Lite, OWL DL OWL Full. 1, OWL ProtÈgÈ Java API OWL . API , , OWL API Java , OWL. API .

4


API , OWL, , SWRL.

1

OWL API OWL Jena. Jena , OWL ProtÈgÈ. Jena , . , ProtÈgÈ, Jena . Jena , Jena , , . Jena OWL . , ProtÈgÈ TopBraid Composer, Jena [11] ­ java . Jena RDF, RDFS, OWL SPARQL, . RDF OWL API, RDF RDF/XML, N3 N-Triples, , SPARQL.

5


, Jena, [12]. Jena1 , , 2. , , . URI . , ­ URI RDF . , URI . Jena , .

2

Jena2 ( Jena) , URI , , . URI, , . URI. 3. Jena , . RDF . -, , . , , 6


. . -, URI . , , ­ .

3

Jena1 . Jena2 , , . , Jena2 , , . , .. , . , , , . .

2.2 Oracle
[13] . , RDF, RDF , : 1) SQL , , 2) SQL . , SQL, . 7


SQL , RDF RDF_MATCH : RDF , , RDFS . RDF_MATCH : RDF_MATCH ( Pattern VARCHAR, Models RDFModels, RuleBases RDFRules, Aliases RDFAliases, ) RETURNS AnyDataSet; . SPARQL, `?'. , . , . ( ). NULL , . ( ). NULL , , , rdf:, . RDF_MATCH , . ( `?' ), AnyDataSet. , , , . , . RDF SQL RDF , RDF_MATCH. SQL, WHERE, ORDER BY . SQL , . 8


. B- -. RDF : IdTriples ( ) UriMap ( URI ). Jena1. UriMap . - , UriMap. IdTriples. , URI ( ) . , . (, 123 12.3E+1), . . UriMap, . , , (, ). UriMap . RDF_MATCH . B- IdTriples UriMap. RDFS , . : : , , . : , . , . 9


RDF_MATCH IdTriples SQL , . IdTriples , . : SELECT ... FROM ( -- (?x ChairpersonOf ?c) => (?x ReviewerOf ?c) SELECT t1.SubjectID, 14 PropertyID, t1.ObjectID FROM IdTriples t1 WHERE t1.PropertyID = 56 UNION -- ReviewerOf SELECT t1.SubjectID, t1.PropertyID, t1.ObjectID FROM IdTriples t1 WHERE t1.PropertyID = 14 ) t1; , , . . (, START WITH CONNECT BY NOCYCLE Oracle). , RDFS RDFS: rdfs:subClassOf ( rdfs11) rdfs:subPropertyOf ( rdfs5). , . , , RDFS, , SQL .

2.3
, , API. , , , SQL. , , Oracle, , , B-. RDF RDFS, . , , 10


, URI . , , , URI, . .

3 PostgreSQL
PostgreSQL, . , ­ . RDF , . C .

3.1
, , . ( , ) (, , ) INSERT, UPDATE DELETE , ( , ) SQL ( ). , . . CREATE TRIGGER. . C.

3.2
. (INSERT, UPDATE DELETE, 11


SELECT) . . -, WHERE ( SELECT). -, , - SQL NOTHING ( ). . . , . , ( SQL , ), , . , ( INSTEAD) , NOTHING. , ( cond) rule_cond, : cond and not rule_cond , cond and rule_cond . , , , . - , SQL . , , . - , . . CREATE RULE, - CREATE VIEW. , , , , . , , . , r1 T1 ­ T2, r2, , T2 T1, 12


. , , . . ­

3.3
PostgreSQL CREATE FUNCTION. , SQL, C, . , , , , , . "" PostgreSQL . C, , C PostgreSQL. PostgreSQL : PL/pgSQL, PL/Tcl ( Tcl), PL/Perl ( Perl, ) PL/Python ( Python). . PL/pgSQL - PostgreSQL, : SQL , /, , C , PL/pgSQL. , . CREATE LANGUAGE createlang shell. - , , - . 13


3.4 . GiST (Generalized Search Tree)
. , , , , , . , , , , . . PostgreSQL, B-, R- , GiST [14] (Generalized Search Tree, ), . GiST , ( ), . , . , GiST , , . GiST .

3.5
, Oracle, . PostgreSQL . ­ , ( ). , , , WHERE . , , SELECT, JOIN WHERE , . , , , , record.

14


, , .

4
4.1
, , PostgreSQL. , . , . OWL SWRL . RDFS , , rdfs1 ­ rdfs13 [15]. pg_rdf_triples (subject_id, property_id, object_id, isinferenced). , URI . isinferenced 0, , 0, . , pg_rdf_values (value_id, text_value, value_type, literal_type), value_id ­ , , text_value ­ , value_type , literal_type ­ ( NULL, ). pg_rdf_triples, , , , , . , URI , rdf:, rdfs:, owl:, swrl:, dc: .., . pg_rdf_values . . , , "+1" "1" , 15


. , . pg_rdf_type (typname, typinput, typoutput), typname ­ , typinput, typoutput . pg_rdf_valtypes (value_id, value_type, type_description). RDF RDF_QUERY, , RDF . `?', . , . , RDF SPARQL. RDF , ­ . , RDF . RDF_QUERY : SELECT * FROM RDF_QUERY('(?a hasFather ?b) (?b married Ann)') AS res (a text, b text); RDF SWRL . , .

4.2
, , pg_rdf_triples. , P(?x,?y) R(?x,?y), : CREATE RULE AS ON INSERT TO pg_rdf_triples WHERE NEW.property_id = get_id(`P') DO INSERT INTO pg_rdf_inferenced SELECT NEW.subject_id, get_id(`R'), NEW.object_id; 16


, pg_rdf_inferenced (subject_id, property_id, object_id, mark). , PostgreSQL , , . , pg_rdf_inferenced , , , pg_rdf_triples, pg_rdf_inferenced, . , : 1. , mark 1 2. mark 1 ( 0) 3. , 4. pg_rdf_triples 5. , 1, pg_rdf_triples . , mark , , , pg_rdf_triples. , : , . , : , , , , (, ), . , .

17


4.3
. . : , , .

4.3.1
RDF P(x,y), , . , RDF , . , SWRL R(?x,?y) P(?x,?y), , , R. P , R. , , . , , , . P, . , , , P, , . , , . , , . : Q(a,b) R(?x,?y) P(?x,?y) Q(?u,?v) R(?u,?v), `(?v1 P ?v2)'. , 18


P, , . , P(a,b). pg_rdf_oldprop (property_id, arg1_id, arg2_id) pg_rdf_newprop (property_id, arg1_id, arg2_id). pg_rdf_oldprop , , . RDF : arg1_id, - property_id, - arg2_id - , NULL URI , pg_rdf_values '(?a hasFather ?b)(?b married Ann)' . , t1 t2, : 1) 2) () t1 NULL (, ) t2. , , . pg_rdf_newprop, . . , pg_rdf_oldpop , . , pg_rdf_oldpop. pg_rdf_oldpop , () . , pg_rdf_oldprop , . , , tn pg_rdf_oldprop, 19


, tn, () () tn («» , NULL, ), () . N, N pg_rdf_oldprop, tn , , tn () NULL. . , rdf:type, : , .. . , - , . rdf:type, , , NULL , . , , , , , . , . L, pg_rdf_oldprop, NULL . pg_rdf_oldprop , . : 1. R(?x,?y) P(?x,?y) : CREATE RULE AS ON INSERT TO pg_rdf_oldprop WHERE NEW.property_id = get_id(`P') DO INSERT INTO pg_rdf_newprop SELECT get_id(`R'), NEW.arg1_id, NEW.arg2_id; , , . , , , , . 20


, . , . R(?x,a) P(b,?x) : CREATE RULE AS ON INSERT TO pg_rdf_oldprop WHERE NEW.property_id = get_id(`P') AND (NEW.arg1_id = get_id(`b') OR NEW.arg1_id IS NULL) DO INSERT INTO pg_rdf_newprop SELECT get_id(`R'), NEW.arg2_id, get_id(`a'); 2. pg_rdf_depend, . , R(?x,?y) P(?x,?y) , , . pg_rdf_oldprop , pg_rdf_depend , , . , pg_rdf_newprop. , pg_rdf_oldprop , pg_rdf_newprop . , , . , . , , , . , , pg_rdf_oldprop, L N. rdf:type N. O(C N + M L N), M ­ , rdf:type, , C ­ , . , RDF , RDF_QUERY : , rdf:type . 21


4.3.2
pg_rdf_tasks. SWRL pg_rdf_tasks. , P(?x,?y) R(?x,?y), : CREATE RULE AS ON INSERT TO pg_rdf_tasks WHERE NEW.property_id = get_id(`R') DO INSERT INTO pg_rdf_inferenced SELECT tr.subject_id, get_id(`R'), tr.object_id FROM pg_rdf_triples tr WHERE property_id = get_id(`P'); , , pg_rdf_tasks , . property_id, P, , P. , : 1. pg_rdf_tasks , 2. , . , pg_rdf_inferenced (subject_id, property_id, object_id) pg_rdf_triples pg_rdf_inferenced 1, ­ 3 3. pg_rdf_inferenced , . , , , , 2: , , , , .

22


4.3.3
: , . , . , , , . , . , clearinf(). pg_rdf_usedid iter_num, , 1. , pg_rdf_triples isinferenced , . , . , R(?x,?y) P(?x,?y) : CREATE RULE AS ON INSERT TO pg_rdf_tasks WHERE NEW.property_id = get_id(`R') DO INSERT INTO pg_rdf_inferenced SELECT tr.subject_id, get_id(`R'), tr.object_id FROM pg_rdf_triples tr, pg_rdf_usedid ui WHERE tr.property_id = get_id(`P') AND tr.isinferenced >= ui.iter_num; `>=' `=', , isinferenced , , . . , . , P R(?x,?y) P(?x,?y), R (.. 23


), . , . . pg_rdf_depend , . pg_rdf_oldprop . key_id. , pg_rdf_taskdep(anc_id, con_id). t1 t2 pg_rdf_oldprop pg_rdf_taskdep , pg_rdf_depend , , t2, , t1. pg_rdf_oldprop oldhasinf newhasinf. pg_rdf_oldprop newhasinf FALSE. pg_rdf_inferenced , , newhasinf TRUE. pg_rdf_oldprop : oldhasinf t1 TRUE, pg_rdf_taskdep td , td.con_id = t1.key_id t2 pg_rdf_oldprop , t2.key_id = td.anc_id t2.newhasinf IS TRUE. , oldhasinf TRUE, , - , , , . pg_rdf_oldprop oldhasinf FALSE. oldhasinf TRUE . pg_rdf_tasks pg_rdf_oldprop, odlhasinf TRUE, , .

24


5 PostgreSQL
5.1
C. C, PostgreSQL libpq PostgreSQL , C. , . RDF_QUERY PL/Perl, c Perl . , RDF . pg_rdf_newprop, , . RDF_QUERY PL/pgSQL inference. PL/pgSQL , SQL . 4 , PostgreSQL . pg_rdf_triples RDF , pg_rdf_typetrip rdf:type pg_rdf_disjoint ­ owl:disjointWith. . , , , , , . , , rdf:type , (owl:differentFrom) owl:disjointWith. , pg_rdf_tr, UNION . . 25


pg_rdf_triples, . RDF pg_rdf_tr pg_rdf_view.

4

pg_rdf_prophar . , (property_id), binmask: binmask & 1 = 1, & 2 = 2 ­ (owl:TransitiveProperty), binmask

(owl:SymmetricProperty), binmask & 4 = 4 ­ (owl:FunctionalProperty), binmask & 8 = 8 ­ (owl:InverseFunctionalProperty). pg_rdf_oldprop , () istran (issym, ) TRUE. , . 26


oldhasinf TRUE , , newhasinf TRUE. flag , (rdfs:subPropertyOf) (owl:inverseOf). pg_rdf_tasks . , pg_rdf_depend. , pg_rdf_propdep, , . , , pg_rdf_taskdep. pg_rdf_AllDifferent owl:AllDifferent, key_id. , owl:differentFrom, t1, t2 key_id pg_rdf_triples , , t1.mem_id t2.mem_id. pg_rdf_docs, base , pg_rdf_imports, (doc_id) (import_id). , . , . 5 . , , , PostgreSQL SQL rdf_analyze.sql. , RDF , : 1. createdb. : $ createdb rdf_analyzeDB 2. PL/Perl PL/pgSQL: $ createlang plperl rdf_analyzeDB $ createlang plpgsql rdf_analyzeDB 27


3. , SQL , psql. : $ psql rdf_analyzeDB
5

, make. shell rdf_analyze , , , . , .

5.2
, SWRL , [16]. , SWRL OWL. 6 , . « » (hasChild) , « » (hasConsort) ­ ; . , , (hasSex Male), 28


­ (hasSex Female). , hasParent (« »), , , 6. name («»), , F01 Mary, .

6

hasSibling (« », Q1), hasSon (« », Q2) hasDaughter (« », Q3), hasFather (« », Q4) hasMother (« », Q5), hasDescendent (« », Q6), hasBrother (« », Q7) hasSister (« », Q8), hasAunt (« », Q9) hasUncle(« », Q10). , Q4 : SELECT n1,n2 FROM RDF_QUERY( '(?s http://a.com/ontology#hasFather ?m) (?s http://a.com/ontology#name ?n1) (?m http://a.com/ontology#name ?n2)') AS res (s text, m text,n1 text,n2 text); : 1. , 2. isinferenced ,

29


3. isinferenced , 4. clearinf (.. ) . 1 2 3 4 () (%) 1 2 3 4 () (%)
1

Q1 4548,089 4027,332 1955,127 1890,977 14 100 Q7 4518,293 3833,515 1668,277 665,792 7 100

Q2 4586,605 3837,798 1706,378 641,051 14 100 Q8 4573,696 3841,377 1691,868 654,797 7 100

Q3 4590,082 3841,228 1692,431 658,196 10 100 Q9 4617,119 3817,312 1680,943 656,510 10 100

Q4 4649,636 3873,910 1792,438 646,781 12 100 Q10 4541,548 3847,415 1692,480 653,717 4 100

Q5 4631,810 3836,865 1674,307 642,206 12 100 4654,665 3881,758 1735,765 800,293 100

Q6 5289,772 4060,827 1803,400 892,902 54 100

1 () , ­ . Pentium IV 2.6 , 512 RAM Mandrake Linux 10.1, PostgreSQL 8.2.1. , . , , 9 . , , . , , . , SQL, API, - RDF SQL. , : RDF . , , , hasDescendent: SELECT count(*) FROM RDF_QUERY(' (?s http://a.com/ontology#hasDescendent ?m) 30


(?s http://a.com/ontology#name ?n1) (?m http://a.com/ontology#name ?n2)') AS res (s text,m text,n1 text,n2 text); RDF , , - , WHERE .

7

7 . emp (emp_name, dep_id), , . RDF_QUERY , . emp 7, ­ . RDF . , , hasSibling, : SELECT n1,n2 FROM ( SELECT * FROM RDF_QUERY( '(?s http://a.com/ontology#hasBrother ?m) (?s http://a.com/ontology#name ?n1) (?m http://a.com/ontology#name ?n2)' ) AS res (s text,m text,n1 text,n2 text) UNION 31


SELECT * FROM RDF_QUERY( '(?s http://a.com/ontology#hasSister ?m) (?s http://a.com/ontology#name ?n1) (?m http://a.com/ontology#name ?n2)' ) AS res (s text,m text,n1 text,n2 text)) AS foo; , RDF_QUERY .





, , , SWRL OWL, RDF SQL.

5.3
, API. , , SQL . SQL , RDF SQL. RDF , SQL, , Oracle. RDF, RDFS , Oracle, OWL SWRL.

6 .
, , API. SQL . PostgreSQL , , , , . , . . , , 32


. , , , . , . PostgreSQL , . , ­ RDF, RDFS, OWL SWRL, RDF SQL. . , , .


1. PostgreSQL: The world's most advanced open source database [HTML] (http://www.postgresql.org/) 2. T. Berners-Lee, J. Handler, O. Lassila. The Semantic Web. Scientific American, May 2001, pp. 34­43 3. F. Manola, E. Miller, eds RDF Primer W3C Recommendation 10 February 2004 [HTML] (http://www.w3.org/TR/2004/REC-rdf-primer-20040210/) 4. D. Brickley, R.V. Guha, B. McBride RDF Vocabulary Description Language 1.0: RDF Schema W3C Recommendation 10 February 2004 [HTML] (http://www.w3.org/TR/2004/REC-rdf-schema-20040210/) 5. M. K. Smith, C. Welty, D. L. McGuinness OWL Web Ontology Language Guide W3C Recommendation 10 February 2004 [HTML] (http://www.w3.org/TR/2004/REC-owl-guide20040210/) 6. I. Horrocks, P. F. Patel-Schneider, H. Boley, S. Tabet, B. Grosof, M. Dean SWRL: A Semantic Web Rule Language Combining OWL and RuleML W3C Member Submission 21 May 2004 [HTML] (http://www.w3.org/Submission/2004/SUBM-SWRL-20040521/) 7. The ProtÈgÈ Ontology Editor and Knowledge Acquisition System [HTML] (http://protege.stanford.edu/) 8. TopBraid Composer [HTML] (http://www.topbraidcomposer.com/)

33


9. E. Prud'hommeaux, A. Seaborne SPARQL Query Language for RDF W3C Working Draft 26 March 2007 [HTML] (http://www.w3.org/TR/2007/WD-rdf-sparql-query-20070326/) 10. H. Knublauch, R. W. Fergerson, N. F. Noy, M. A. Musen. The ProtÈgÈ OWL Plugin: An Open Development Environment for Semantic Web Applications. In Proceedings of the 3rd International Semantic Web Conference (ISWC), 2004 11. Jena Semantic Web Framework [HTML] (http://jena.sourceforge.net/) 12. K. Wilkinson, C. Sayers, H. Kuno, D. Reynolds Efficient RDF Storage and Retrieval in Jena2, First International Workshop on Semantic Web and Databases, pp. 131-151, 2003 13. E. I. Chong, S. Das, G. Eadon, J. Srinivasan An Efficient SQL-based RDF Querying Scheme. In Proceedings of the 31st International Conference on Very Large Data Bases, 2005, pp. 1216 ­ 1227 14. . , . PostgreSQL GiST [HTML] (http://www.sai.msu.su/~megera/postgres/talks/gist_tutorial.html) 15. P. Hayes, B. McBride RDF Semantics W3C Recommendation 10 February 2004 [HTML] (http://www.w3.org/TR/2004/REC-rdf-mt-20040210/) 16. ProtÈgÈ Ontologies Library [HTML] (http://protege.cim3.net/cgibin/wiki.pl?ProtegeOntologiesLibrary)

34