2017-11-27 4 views
1

blank node skolemizationを反復処理なしでSPARQLに実装できますか? skolemization用SPARQL更新操作のみ、空白ノードオブジェクトなしのトリプルにおける被験者として表示され、空白のノードから開始することができます反復なしのSPARQLでの空白ノードのスカレン化

@prefix : <http://example.com/> . 

[ a :A ; 
    :p1 [ 
    a :B 
    ] 
] . 

:のような、その反復は、空白ノードのチェーンをskolemizeするために必要とされるように思える

DELETE { 
    ?b1 ?outP ?outO . 
    ?inS ?inP ?b1 . 
} 
INSERT { 
    ?iri ?outP ?outO . 
    ?inS ?inP ?iri . 
} 
WHERE { 
    { 
    SELECT ?b1 (uuid() AS ?iri) 
    WHERE { 
     { 
     SELECT DISTINCT ?b1 
     WHERE { 
      ?b1 ?p1 [] . 
      FILTER isBlank(?b1) 
      FILTER NOT EXISTS { 
      ?b1 ?p2 ?b2 . 
      FILTER isBlank(?b2) 
      } 
     } 
     } 
    } 
    } 
    ?b1 ?outP ?outO . 
    OPTIONAL { 
    ?inS ?inP ?b1 . 
    } 
} 

空白ノードがデータに見つからなくなるまでこの操作を繰り返すことができます。

ASK { 
    ?bnode ?p [] . 
    FILTER isBlank(?bnode) 
} 

は、それが反復してimplemを回避することができます単一のSPARQL Updateオペレーションでブランクノードのスカレ

(また、このアプローチは全く「オーファン」空白ノード(唯一のオブジェクトとして表示され、すなわち空白ノード)が存在しない前提。)

答えて

1

Iは、2段階の溶液を別々サブジェクトとオブジェクトをskolemisingブランクを格納見出さ中間データとしてのノードエイリアス(ブランクノードとIRI間のリンク:owl:sameAs)を

PREFIX : <http://example.com/> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 

#################### 
# Rewrite subjects # 
#################### 

DELETE { 
    ?bnode ?p ?o . 
} 
INSERT { 
    ?iri ?p ?o . 
    GRAPH :aliases { 
    ?bnode owl:sameAs ?iri . 
    } 
} 
WHERE { 
    { 
    SELECT ?bnode (uuid() AS ?iri) 
    WHERE { 
     { 
     SELECT DISTINCT ?bnode 
     WHERE { 
      ?bnode ?p [] . 
      FILTER isBlank(?bnode) 
     } 
     } 
    } 
    } 
    ?bnode ?p ?o . 
} 
; 

################### 
# Rewrite objects # 
################### 

DELETE { 
    ?s ?p ?bnode . 
} 
INSERT { 
    ?s ?p ?iri . 
} 
WHERE { 
    { 
    SELECT ?bnode ?iri 
    WHERE { 
     { 
     SELECT DISTINCT ?bnode 
     WHERE { 
      [] ?p ?bnode . 
      FILTER isBlank(?bnode) 
     } 
     } 
     OPTIONAL { 
     GRAPH :aliases { 
      ?bnode owl:sameAs ?_iri . 
     } 
     } 
     BIND (coalesce(?_iri, uuid()) AS ?iri) 
    } 
    } 
    ?s ?p ?bnode . 
} 
; 

############################ 
# Clear blank node aliases # 
############################ 

CLEAR GRAPH :aliases 
関連する問題