2017-03-12 12 views
0

로컬 온톨로지에 10 개의 무작위 책을 채우려고합니다. 테스트 용 목록에 2 권의 알려진 도서를 포함시키고 싶습니다 .i 중 10 권에서 2 권의 책 이름을 지정하고 나머지 8 권은 임의로 지정할 수 있습니다.LIMIT를 사용하는 동안 DBPEDIA SPARQL에 원하는 값을 포함하도록 쿼리하는 방법

필자는 FILTER와 LIMIT를 함께 결합하는 법을 모릅니다.

나는 8 권의 무작위 책과 함께 2 권의 책을 원한다.

FILTER (str(?name) IN ("Panther in the Basement", "Endless Night")) 

내 코드

SELECT ?book ?date 
WHERE { 
?book rdf:type dbo:Book . 
?book foaf:name ?name . 
    ?book dbp:releaseDate ?date . 

} 
limit 10 
+0

RDF 온톨로지는 SQL 테이블이 행으로 채워지는 것과 같은 방식으로 인스턴스 데이터에 의해 "채워진다". sparqlwrapper와의 연결은 무엇입니까? 이 숙제가 있니? 우리가 당신의 일을하는 것이 장기적으로 당신에게 많은 도움이되지는 않습니다. – TallTed

답변

1

그것은 당신이 이렇게 할 이유는 분명하지 않다, 그러나 그것은의 UNION

    1. 의 데이터입니다 좀 더 복잡한 쿼리하여 수행 할 수 있습니다 8 권의 다른 서적
    2. 두 책의 데이터
    ,210
    SELECT DISTINCT ?book ?date 
    WHERE 
        { { SELECT DISTINCT ?book ?date 
         WHERE 
          { ?book rdf:type   dbo:Book ; 
            foaf:name  ?name ; 
            dbp:releaseDate ?date 
          FILTER (?book NOT IN (dbr:Panther_in_the_Basement, dbr:Endless_Night)) 
          } 
         LIMIT 8 
         } 
        UNION 
         { VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night } 
         ?book rdf:type   dbo:Book ; 
           foaf:name  ?name ; 
           dbp:releaseDate ?date 
         } 
        } 
    

    참고 DBpedia 데이터 세트가 깨끗하지이며,이 쿼리가 중복 된 책을 반환 할 수 있습니다 releaseDate에 대해 여러 값에 책을 가지고 있기 때문에. 이 문제를 극복하기 위해, 당신은 내가,이 쿼리의 컴팩트 버전도 작동해야한다고 생각 것 사실 GROUP BY + SAMPLE (또는 GROUP_CONCAT)

    를 사용해야하지만 DBpedia에 어떤 결과를 반환하지 않습니다

    SELECT DISTINCT ?book ?date 
    WHERE 
        { ?book foaf:name  ?name ; 
          dbp:releaseDate ?date 
         { { SELECT ?book 
          WHERE 
          { ?book rdf:type dbo:Book } 
          LIMIT 8 
         } 
         } 
        UNION 
         { VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night } } 
        }