다른 키워드를 제외하고 동시에 특정 키워드에 대한 SPARQL 쿼리를 필터링하고 싶습니다. 나는 이것이 FILTER (regex(str(?var),"includedKeyword","i") && !regex(str(?var),"excludedKeyword","i"))
으로 쉽게 달성 될 수 있다고 생각했다. "!"없이 작동합니다. 조건, 그러나 아닙니다. 또한 FILTER 문을 분리했지만 사용하지는 않습니다. SPARQL : 정규식 필터 결합 및 제외
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX edm: <http://www.europeana.eu/schemas/edm/>
PREFIX ore: <http://www.openarchives.org/ore/terms/>
SELECT DISTINCT ?CHO
WHERE {
?proxy dc:subject ?subject .
FILTER (regex(str(?subject),"gemälde","i") && !regex(str(?subject),"Fotografie","i"))
?proxy edm:type "IMAGE" .
?proxy ore:proxyFor ?CHO.
?agg edm:aggregatedCHO ?CHO; edm:country "germany".
}
그러나 나는 항상 직류이있는 제목 "Gemäldegalerie"와 첫 번째 행에 결과를 얻을 : "Fotografie"의 주제를 (내가 원하는 일을 제외됨). 문제는 Europeana 데이터베이스의 한 객체가 둘 이상의 dc : subject 속성을 가질 수 있다는 사실에 있다고 생각합니다. 다른 속성을 무시하면서 이러한 속성 중 하나만 찾습니다.
아이디어가 있으십니까? 매우 감사 할 것입니다!
감사합니다. 지금이 상황이 나에게 분명해 보입니다.이 내용에 더 익숙해 져야합니다. 나는 또한 정규식없이 정확한 문자열을 사용하는 것에 대해 생각했지만 문제는 Europeana가 자신의 dc : subject 이름을 사용하는 많은 다른 공급자의 메타 데이터를 집계하는 것이므로 "사진"뿐만 아니라 "사진" "또는"사진 ". 이것은 regex가 편리하게 사용되는 곳입니다. 아니면 SPARQL에서 비 특이 리터럴을 찾는 방법이 있을까요? –
전체 텍스트 검색 확장에 대한 제안을 통해 Lucene 쿼리가 그 일을 잘 수행한다는 것을 알게되었습니다. 나는 다음과 같은 것을 사용할 수 있습니다 : luceneQuery "foto *"(처음에는 PREFIX를 정의하면서 : ), 이것은 제가 원했던 것입니다. 위대한 답변을 주셔서 다시 한 번 감사드립니다. –