我們都知道,RDF只表示二元關(guān)系,但在實(shí)際應(yīng)用中,多元關(guān)系非常常見,如:小紅借給小明語文書,是個(gè)三元關(guān)系:?borrow(小紅,語文書,小明);?再如,小明的身高是170cm.也是個(gè)三元關(guān)系?length(小明,170,?cm).?推廣來說,n元關(guān)系如何在RDF和OWL中表示呢?
我們假設(shè)三元組為(a,b,c).?a,b.c?都是資源或Literal
1.?方法一
如果三元組中a是老大,即有個(gè)資源的地位是支配性的,如:小明的身高是170cm.
表示方法為?把老大提出來,再把三元關(guān)系分解為3個(gè)二元關(guān)系:
??R1(a,?a’)?,?R2(a’,b),??R3(a’,c)??//?R1(a,?a’)?用RDF三元組表示為?(a?,?R1?,?a’)
例如:小明的例子可以表示為
length(小明,length_obj_1);??//小明是老大,?length_obj_1?是一個(gè)身高對(duì)象?
value(length_obj_1,170);?????//值
unit(length_obj_1,cm);??????//單位
2.?方法二
如果三元組中沒有明顯的老大,如:?小紅借給小明語文書.
表示方法為提出一個(gè)對(duì)象,每個(gè)元素都和這個(gè)對(duì)象有關(guān)系:
R1(g,?a)?,?R2(g,b),??R3(g,?c)
例如:小紅借書的例子可以表示為
rdf:type?(borrow_obj_1,??BorrowRelation);?//?BorrowRelation?是一個(gè)表示借書關(guān)系的類
borrow_owner((borrow_obj_1,小紅);?
borrow_agent((borrow_obj_1,小明);?//借書的人
borrow_book((borrow_obj_1,?語文書);
3.?結(jié)論
1)?n-元關(guān)系有2exp(n-2)?種表示方法:?二元關(guān)系一種表示法,三元關(guān)系有如上二種表示法,由數(shù)學(xué)歸納法得證。
2)?如果用RDF對(duì)復(fù)雜系統(tǒng)建模,有必要引入一個(gè)中間的抽象層,用以表示N元關(guān)系,還有named?graph,?context?等。如引入rdfe:relation(a,b,c,d,….)表示n元關(guān)系?
3)?n-關(guān)系的表示對(duì)RDF數(shù)據(jù)的查詢和存儲(chǔ)優(yōu)化很有價(jià)值,因?yàn)閚-關(guān)系往往對(duì)應(yīng)了數(shù)據(jù)庫中的表。
注:大部分摘譯自:?
http://www.w3.org/2001/sw/BestPractices/OEP/n-aryRelations-20040623/
更為詳細(xì)的信息也參考它。
原文地址:http://bbs.w3china.org/dispbbs.asp?boardID=2&ID=8416