此查询中的逻辑错误?

时间:2016-05-14 16:06:18

标签: sparql

我有两个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 个答案:

答案 0 :(得分:0)

很多关于数据和查询的事情都不清楚。这是一个更具可读性和SPARQL友好的Turtle文本序列化的替代方案。我还简化了模型,因为不清楚需要RatingFeature类(它们可以,并且可以很容易地重新添加):

@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上的零碎问题更有效率。