在SPARQL中更改PREFIX

时间:2017-12-21 06:28:00

标签: sparql rdf owl allegrograph topbraid-composer

我创建了一个具有不同前缀的本体($(document).ready(function() { $("#selector").select2({ placeholder: 'Select an option', width: 'resolve', dropdownAutoWidth: 'true', allowClear: 'true' }); }); rdf:rdfs:owl:example:car:,... )。我用它们划分不同的域和例子。

小提取物

bike:

有没有办法更改car:Software rdf:type demo:CyberObject. car:Hardware rdf:type spdm:PhysicalObject. car:Software car:hasMaturity "ten". car:Hardware demo:isProducedIn loc:NorthPole. " PREFIX"例如," car:",并保持关系:

plane:

我仍然需要所有的关系。具有plane:Software rdf:type demo:CyberObject. plane:Hardware rdf:type spdm:PhysicalObject. plane:Software plane:hasMaturity "ten". plane:Hardware demo:isProducedIn loc:NorthPole. " PREFIX"的对象不必更换;使用新的car:创建新的并将旧对象保留在数据库中就足够了。

感谢您的任何建议!

1 个答案:

答案 0 :(得分: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®graph特定的解决方案。

<强>更新

  

我仍然需要所有关系,PREFIX“car”的对象不需要   必须被替换......

然后不要替换对象中的前缀。但是,请记住,一个三元组中的对象可以是另一个三元组中的主题。

  

...用它创建新的就足够了   新的PREFIX并将旧对象保留在数据库中。

“独立”URI不存储在triplestore中。