我有两个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>
答案 0 :(得分:0)
很多关于数据和查询的事情都不清楚。这是一个更具可读性和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上的零碎问题更有效率。