考慮下面的本體論,其中PERSON
,NAME
,SURNAME
和IDENTIFICATION
是類。 NAME
和SURNAME
是IDENTIFICATION
的子類。 hasSurname
和hasName
是功能對象屬性。 hasValue
是一個帶有域IDENTIFICATION
和Range字符串的DataTypeProperty。如何讓一個人與耶拿的Objectproperty相匹配?
讓我們用做與耶拿2人這種模式的自動instanciation,PERSON1是「亨利·福特」和PERSON2是「哈里森·福特」。
爲了處理這種重複,希望根據下面的模式自動實例化本體,其中個體name1
同時用於person1和person2。
String NS = .... // the name space
OntModel model = .... // Jena model to use
// creating all the individuals with random uri
Individual person1 = model.createIndividual(NS + "PERSON" + Math.random());
Individual name1 = model.createIndividual(NS + "NAME" + Math.random());
Individual surname1 = model.createIndividual(NS + "SURNAME" + Math.random());
Individual person2 = model.createIndividual(NS + "PERSON" + Math.random());
Individual name2 = model.createIndividual(NS + "NAME" + Math.random());
Individual surname2 = model.createIndividual(NS + "SURNAME" + Math.random());
// asserting that ...
// person1 _hasName_ (name1 _hasValue_ "Ford")
// person1 _hasSurname (surname1 _hasValue_ "Henry")
name1.addProperty(model.getOntProperty(NS + "hasValue"), Resourcefactory.createLiteral("Ford"));
surname1.addProperty(model.getOntProperty(NS + "hasValue"), Resourcefactory.createLiteral("Henry"));
model.add(person1, model.getOntProperty(NS + "hasName"), name1);
model.add(person1, model.getOntProperty(NS + "hasSurname"), surname1);
name1 = null; // loosing reference to name1
// asserting that ...
// person2 _hasName_ name1
// person2 _hasSurname (surname2 _hasValue_ "Harrison")
如何找到NAME
類的單個哪個屬性hasvalue
是「福特」,以正確地完成instanciation?
感謝您的回覆。
謝謝@Ian_Dickinson的回覆。爲了回答你的問題,我會說我想建立一個福特姓氏可以被許多人共享的圖表。這是爲了減少生產的貓頭鷹文件的大小。問題是如何確定我的耶拿模型中是否已經有一個姓氏,我可以將一個新人連接到?因此找到他的財產有價值匹配'福特'的姓氏的個人。如果沒有,我會創建新的姓氏,否則我會將新人鏈接到這個姓氏。在你的答案中看起來像SPARQL可以提供幫助(如何?) –
如果仔細看看我建議的OWL代碼,你會發現只有一個節點用於福特姓氏,其中包括URI:ns:ford。在Jena模型中,如果調用'getResource()',它將在模型中創建一個新資源(如果尚未存在的話),或者如果存在,則重新使用相同的資源。所以你不需要使用SPARQL--只要你使用相同的URI即可。如果您使用添加了隨機數的URI,這顯然不起作用。 –
就我而言,我沒有這個資源的URI。這是由於這個資源已經在自動本體實例代碼中的某些循環之前被實例化了。我對資源的唯一信息是它具有給定的屬性值「Ford」。所以我對一個具有給定財產價值的個體感興趣。 –