2015-02-07 5 views
3

나는 내 RDF-저장소에 다음과 같은 상황이 :사용하여 하위 그래프와 그래프를 생성 SPARQL

명명 된 그래프, •

S1 P1 O1 

명명 된 그래프 : B

S2 P2 O1 

명명 된 그래프 : C

S3 P3 O1 
지금은 이름이 A + B + C

로 새로운 그래프의 모든 O1은 tripples에 그래프, 저장하는 3 그래프 +를 tripples을 찾는 SPARQL 쿼리를 정의 할

NEW 명명 된 그래프 : A + B + C 구조와

Named Graph: A 
    S1 P1 O1 
Named Graph: B 
    S2 P2 O1 
Named Graph: C 
    S3 P3 O1 

또는 난 단지 어떻게 그래프가 포함 된 그래프를 생성하지 bzw, tripples에서 그래프를 작성하는 방법을 발견에 삽입?

가능한 경우 가능합니까?

탱크 당신은

답변

4

당신은 할 수 없어 정확히 하위 그래프가 명시 적 방법으로 서로에 저장 할 수 없기 때문에 당신이 원하는 당신은 무엇을 설명하는 것 같다.

PREFIX : <http://example.org/> 
INSERT 
{ 
    # Output triples in the desired graph 
    GRAPH ?name { ?s ?p ?o } 
} 
WHERE 
{ 
    # Use a sub-query to find all relevant graphs and concatenate their names together 
    { 
    SELECT (GROUP_CONCAT(STR(?g)) AS ?strName) (URI(?strName) AS ?name) 
    WHERE 
    { 
     GRAPH ?g { ?s ?p :o1 } 
    } 
    GROUP BY ?g 
    } 
    # Join the name to all the relevant triples 
    GRAPH ?g 
    { 
    ?s ?p :o1 . 
    ?s ?p ?o . 
    } 
} 

그래서이 조금 해키하지만 당신이 원하는 약 수행해야하지만 당신은 충분히 입증 할 수있는 하나의 그래프에 모든 트리플을 넣을 수 있습니다. 하위 쿼리를 사용하여 관련 트리플이있는 모든 그래프를 찾고 이름을 연결하여이를 URI로 변환합니다. 이것은 매우 잘못된 URI를 생성 할 수 있으므로 쿼리의 이후 단계가 작동하지 않을 수 있음을 유의하십시오.

그런 다음 원하는 제목의 트리플을 포함하는 그래프에서 모든 그래프와 함께 그래프 이름을 조인합니다.

마지막으로 저장소에 따라 새로 만든 이름이있는 그래프로 출력됩니다. 이는 불법적 인 그래프 이름을 만들 가능성이 있기 때문에 작동하지 않을 수도 있습니다.

이것은 정확하게 원하는 것은 아니지만 잘하면 올바른 방향으로 당신을 가리킬 것입니다.

+0

그래서 제공 한 솔루션은 원하는 tripples을 그래프에 저장합니다. 그렇습니까? 하지만 새로 생성 된 그래프를 하위 그래프로 저장해야합니다. 그러나 이것이 가능하지 않다고 생각하십니까? – misterxyz

+1

RDF 사양에는 중첩 그래프 개념이 없습니다. 그래프의 모든 하위 집합은 "하위 그래프"로 생각할 수 있지만 특정 하위 그래프의 이름을 지정하거나 참조 할 수는 없다는 의미에서 하위 그래프를 가질 수 있습니다. – RobV