2017-09-17 6 views
-1

스마트 폰 데이터로 내 RDF 기반에서 리터럴 장치 이름을 가져 오는 데 어려움을 겪고 있습니다. 예 데이터 :RDF에서 SPARQL의 기준에 따라 문자 그대로 가져 오기

쿼리
<rdf:Description rdf:about="https://lukasgorny.pro/devices#GioneeX1"> 
    <feature:device-name>Gionee X1</feature:device-name> 
    <feature:screen-size>big</feature:screen-size> 
    <feature:internal-memory-size>small</feature:internal-memory-size> 
</rdf:Description> 
<rdf:Description rdf:about="https://lukasgorny.pro/devices#SharpAquosS3"> 
    <feature:device-name>Sharp Aquos S3</feature:device-name> 
    <feature:screen-size>big</feature:screen-size> 
    <feature:internal-memory-size>big</feature:internal-memory-size> 
</rdf:Description> 

:

나는 화면 크기가 "큰"내부 메모리 크기는 "작은"입니다 모든 장치 이름을 추출 할
PREFIX feature: <https://lukasgorny.pro/devices#> 

SELECT ?device WHERE 
{ 
    ?device feature:device-name ?deviceName . 
    OPTIONAL { ?x feature:screen-size ?screenSize . } 
    OPTIONAL { ?y feature:internal-memory-size ?memorySize . } 
} 

(그가에 매개 변수화되어 내 응용 프로그램,하지만 여기에 예제를 제공). 친절하게도 저를 올바른 방향으로 가르쳐 주시겠습니까? 솔루션을 찾을 수없는 것 같습니다.

+0

의 사용 가능한 복제 (https://stackoverflow.com/questions/2591719/exact-matching -of-strings-in-sparql) –

+2

'OPTIONAL' 조항의 목적은 무엇입니까? 그것들은 외부 트리플 패턴의 변수에 연결되지 않습니다. – AKSW

답변

1

당신은과 같이, 이것에 대한 FILTER 조건을 사용할 수 있습니다 : [? SPARQL 문자열의 정확한 일치]

WHERE 
{ 
    ?x feature:screen-size ?screenSize . 
    FILTER(str(?screenSize) = "big") 
} 
+0

잘 작동하지만 멀티 필터는 어떨까요? 여기 내 코드가 작동하지 않는 것 같습니다 : https://pastebin.com/2J0vEVBB 항상 나를 93 항목을 반환합니다. –

+2

초기 쿼리에서'OPTIONAL' 절과 동일합니다. 왜 다른 변수'? x'와'? y'를 사용합니까? @AKSW가 제안한 바와 같이 트리플 패턴은 공유 변수 – AKSW

+0

@ ŁukaszovPietriejGornyov에 의해 "연결"되어야합니다. 쿼리의'? x' 및'? y' 변수를'? device'로 변경해야합니다. 요점은 결국 동일한 주제의 세 가지 속성을 쿼리한다는 것입니다. 또한 : OPTIONAL 절을 제거하십시오. –