Логическая ошибка в этом запросе?
У меня два 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.