2017-04-18 3 views
0

두 개의 그래프가 있으며, 하나의 리터럴에는 다른 태그가 지정되지 않습니다 (@de). 둘 사이에 조인이 필요합니다. 필터가있는 간단한 해결책은 매우 느리게 실행됩니다. 포석와 함께 작동다른 언어 코드로 리터럴을 검색하십시오.

개선 된 버전은 내가 ?lu :xx (str(?lem)) . 시도

WHERE { 
?tok nlp:lemma ?lem . 
Bind (str(?lem) as ?lems) . 
?lu :orthForm ?lems . 
... 

하지만이 오류로 판정을 받았습니다. 왜? 마찬가지로, value ?lems {str(?lem)}.

을 사용하면 바인딩이 많은 오버 헤드를 발생시키지 않는다는 것을 순진하게 가정하므로 위의 해결 방법은 아마도 o.k입니다.

언어 코드는 my previous question

+0

나는 첫 번째 예제를 얻지 못합니다. FILTER가 이상하게 보이거나 실제로 그 피사체와 물체를 동일하게하고 싶습니까? – AKSW

답변

1

트리플 패턴으로 허용되는 유일한 것은 다른 경우 검색에 대해 동일한 접근 작업 (객체) 변수, URI를, 리터럴 및 bnodes 있습니다겠습니까. 따라서 패턴 ?lu :xx (str(?lem)) 대신 BIND 또는 프로젝션을 사용하여 변수를 문자열로 변환해야합니다. 프로젝션을 사용하여,

WHERE { 
    ?lu :xx ?langLem . 
    BIND(str(?langLem) AS ?lem) 
} 

을 또는 : 첫 번째 예 복용

SELECT (str(?langLem) AS ?lem) 
WHERE { 
    ?lu :xx ?langLem . 
} 

나는 당신이 value ?lems {str(?lem)}VALUES 문을 사용하려고하는 가정합니다. VALUES는 통상 예컨대 :

VALUES ?lem { :Euclid :Gauss } 
?lem rdfs:label ?label . 

... 결과 집합을 반환하고 :Euclid:Gauss?lem에 결합되고 질의를 실행하고, 일련의 값에 변수를 결합하는데 사용된다. 나는. 그것은 다음과 같습니다 :

{ :Euclid rdfs:label ?label } 
UNION 
{ :Gauss rdfs:label ?label }