如何编写SPARQL查询获取指定RDF类属性及实例数据?
对应需求的SPARQL查询方案
你的RDF存储三元组
模式
ex:animal rdf:type rdf:Class; rdfs:subClassof ex:Package_animal. ex:height rdf:type rdf:Property; rdfs:label "height"; rdfs:domain ex:animal. ex:age rdf:type rdf:Property; rdfs:label "age"; rdfs:domain ex:animal. ex:NumberOfLegs rdf:type rdf:Property; rdfs:label "NumberOfLegs"; rdfs:domain ex:animal.
实例
ex:dog rdf:type ex:animal; ex:height "10"; ex:age "2"; ex:NumberOfLegs "4". ex:cat rdf:type ex:animal; ex:height "10"; ex:age "3"; ex:NumberOfLegs "4".
需求1:获取类ex:animal的属性
正确SPARQL查询:
SELECT ?property WHERE { ?property rdf:type rdf:Property; rdfs:domain ex:animal. }
该查询筛选出所有rdfs:domain指向ex:animal的属性,返回结果与预期完全匹配。
需求2:获取实例ex:dog的所有属性三元组
若要直接返回完整的三元组形式,推荐使用CONSTRUCT查询:
CONSTRUCT { ex:dog ?p ?o } WHERE { ex:dog ?p ?o. }
执行后会返回ex:dog对应的全部三元组,和你预期的结果一致。
如果使用SELECT查询,可写成:
SELECT ?p ?o WHERE { ex:dog ?p ?o. }
将结果按ex:dog ?p ?o格式组合即可得到预期输出。
需求3:修正你编写的SPARQL查询
你原查询存在两处问题:
?s rdf:type ex:dog错误,ex:dog是实例而非类,需直接指定s为ex:dog- 仅查询
?s无法获取属性和对应值,需返回?p和?o字段
修正后的查询(以返回完整属性信息为例):
SELECT ?p ?o WHERE { ex:dog ?p ?o. }
若要直接得到预期的三元组格式,使用需求2中的CONSTRUCT查询更合适。
内容的提问来源于stack exchange,提问作者user20297975
相关产品推荐
相关产品推荐

