Логическая ошибка в этом запросе?

У меня два where статьи.

PREFIX tourister: <PREFIX_VALUE> 
SELECT ?a 
WHERE { 
   {?a tourister:hasRating ?b .
     ?b ?c '5'@string } . 
   {?a tourister:hasFeature ?b . 
     ?b ?c 'Pool'@string }
}

Они работают нормально, когда выполняются самостоятельно, или если есть UNION Положение между ними, однако, я ищу пересечение. Из того, что я прочитал в Интернете, я узнал, что.может быть использован для пересечения. Однако с.Я получаю 0 результатов. Нет, синтаксическая ошибка, что-то не так с логикой.

И, пожалуйста, обратите внимание, чтоPREFIX_VALUEв приведенном выше запросе не ошибка, я намеренно опущен.

<!-- http://tourister.space/ontologies/tourism#TESTInd -->

    <owl:NamedIndividual rdf:about="http://tourister.space/ontologies/tourism#TESTInd">
        <rdf:type rdf:resource="http://tourister.space/ontologies/tourism#Hotel"/>
        <hasFeature rdf:resource="http://tourister.space/ontologies/tourism#TESTIndFeature"/>
        <hasRating rdf:resource="http://tourister.space/ontologies/tourism#TESTIndRating"/>
    </owl:NamedIndividual>
    


    <!-- http://tourister.space/ontologies/tourism#TESTIndFeature -->

    <owl:NamedIndividual rdf:about="http://tourister.space/ontologies/tourism#TESTIndFeature">
        <rdf:type rdf:resource="http://tourister.space/ontologies/tourism#Feature"/>
        <hasName xml:lang="string">Pool</hasName>
    </owl:NamedIndividual>
    


    <!-- http://tourister.space/ontologies/tourism#TESTIndRating -->

    <owl:NamedIndividual rdf:about="http://tourister.space/ontologies/tourism#TESTIndRating">
        <rdf:type rdf:resource="http://tourister.space/ontologies/tourism#Rating"/>
        <hasStarRating xml:lang="string">5</hasStarRating>
    </owl:NamedIndividual>

1 ответ

Многое неясно в отношении данных и запроса. Вот альтернатива в более читабельной и дружественной к SPARQL сериализации Turtle. Я также упростил модель, так как не ясно, что Rating а также Feature нужны классы (они могут быть и могут быть легко добавлены обратно):

@prefix tourister: <http://example.org/ex#> .

tourister:TESTInd
   rdf:type tourister:Hotel ;
   tourister:hasFeature "Pool"^^xsd:string ;
   tourister:hasStarRating 5 .
tourister:Hotel
   rdf:type owl:Class ;
   rdfs:subClassOf owl:Thing .
tourister:hasFeature
   rdf:type owl:DatatypeProperty ;
   rdfs:range xsd:string .
tourister:hasStarRating
   rdf:type owl:DatatypeProperty ;
   rdfs:range xsd:integer .

Исходя из этого, кажется, что SPARQL для поиска отелей со звездным рейтингом 5 и пула берется практически напрямую из первого набора троек:

SELECT ?hotel
WHERE {
   ?hotel tourister:hasFeature "Pool"^^xsd:string ;
          tourister:hasStarRating 5 .
}

Это только начало, и я не буду первым, кто предложит немного поработать над RDF и SPARQL, прежде чем продолжить. Я думаю, вы найдете этот путь более продуктивным для начала, чем частичные вопросы по SO.

Другие вопросы по тегам