2017-12-21 18 views
0

に変更PREFIX(rdf:rdfs:owl:example:car:bike:、...)。私はそれらを使用して、異なるドメインと例を画定します。私は異なるプレフィックスを使ってオントロジーを作成したSPARQL

小さなエキス:

plane:Software rdf:type demo:CyberObject. 
plane:Hardware rdf:type spdm:PhysicalObject. 
plane:Software plane:hasMaturity "ten". 
plane:Hardware demo:isProducedIn loc:NorthPole. 

car:Software rdf:type demo:CyberObject. 
car:Hardware rdf:type spdm:PhysicalObject. 
car:Software car:hasMaturity "ten". 
car:Hardware demo:isProducedIn loc:NorthPole. 

は、例えば、 "plane:" にPREFIX "car:" に変更し、関係を維持する方法はあります私はまだすべての関係が必要です。 PREFIX "car:"のオブジェクトは置き換える必要はありません。新しいPREFIXで新しいものを作成し、古いオブジェクトをデータベースに保存するだけで十分です。

ありがとうございました!

+0

SPARQL 1.1更新クエリが機能しません。古いURIを新しいURIで置き換えるか、または正確にここに問題があるのでしょうか? – AKSW

+0

オントロジはすでにオントロジエディタ/トリプルストアに存在します。既存のノードのプレフィックスを変更したいだけです。@AKSW – Boris

+0

あなたは何をしたいのか分かります。しかし、私はあなたがこれまでに試したことは見ません...しかし、それは問題ではないことを知っています。下記の@StanislavKralinの完璧な答えをご覧ください。 – AKSW

答えて

2

件名、述語およびオブジェクトの接頭辞を順番に置き換えます。

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix car: <http://example.com/car/> 
prefix demo: <http://example.com/demo/> 
prefix spdm: <http://example.com/spdm/> 
prefix loc: <http://example.com/loc/> 
prefix plane: <http://example.com/plane/> 

DELETE {?s ?p1 ?o} INSERT {?s ?p2 ?o} WHERE 
{ 
?s ?p1 ?o . 
FILTER (strstarts(str(?p1), str(car:))) 
BIND (IRI(replace(str(?p1), str(car:), str(plane:))) AS ?p2) 
} ; 

DELETE {?s1 ?p ?o} INSERT {?s2 ?p ?o} WHERE 
{ 
?s1 ?p ?o . 
FILTER (strstarts(str(?s1), str(car:))) 
BIND (IRI(replace(str(?s1), str(car:), str(plane:))) AS ?s2) 
} ; 

DELETE {?s ?p ?o1} INSERT {?s ?p ?o2} WHERE 
{ 
?s ?p ?o1 . 
FILTER (strstarts(str(?o1), str(car:)) && isIRI(?o1)) 
BIND (IRI(replace(str(?o1), str(car:), str(plane:))) AS ?o2) 
} ; 

Allegrographではテストされておらず、おそらくAllegr®グラフ固有のソリューションが存在します。

更新

私はまだPREFIX「車」を持つオブジェクトが を交換する必要はありませんすべての関係を、必要...

は、次にオブジェクト内の接頭辞を交換しないでください。ただし、1つのトリプル内のオブジェクトは、別のトリプル内のサブジェクトである可能性があることに注意してください。

... 新しいPREFIXで新しいものを作成し、古いオブジェクトをデータベースに保持するだけで十分です。

"スタンドアロン"のURIはtriplestoreに格納されません。

関連する問題