我有一张图表,在此图表中我有一个这样的列表:
:Michelangelo :representativeFor :Italy;
rdfs:label "Michelangelo di Ludovico Buonarroti Simoni";
:birthInfo [:date "1475-03-10"^^xsd:date; :place :Florence];
:sculptorOf [a rdf:List; rdf:first :Pieta; rdf:rest [a rdf:List; rdf:first :David; rdf:rest [a rdf:List; rdf:first :TheLastJudgement; rdf:rest rdf:nil]]];
:sculptorOf rdfs:domain :Sculptor; rdfs:range :Sculpture.
当我提出此查询时
select *
where {:David a ?z}
我希望获得资源和雕塑。 我不明白为什么不工作,我该怎么办?
答案 0 :(得分:3)
您的标题如何在rdf 中插入列表,但看起来您正在尝试查询查询中的值在数据列表中的位置。
如果我理解正确,你想根据以下内容找到大卫的类型:
:Michelangelo :sculptorOf [a rdf:List;
rdf:first :Pieta;
rdf:rest [a rdf:List;
rdf:first :David;
rdf:rest [a rdf:List;
rdf:first :TheLastJudgement;
rdf:rest rdf:nil]]];
以及域和范围公理:
:sculptorOf rdfs:domain :Sculptor; rdfs:range :Sculpture.
这不是RDF和OWL的工作方式。米开朗基罗没有雕刻出一系列东西,他雕刻了不同的东西。在RDF中,您将其表示为:
:Michelangelo :sculptorOf :Pieta, :David, :TheLastJudgement .
这是三个三元组的简写:
:Michelangelo :sculptorOf :Pieta .
:Michelangelo :sculptorOf :David .
:Michelangelo :sculptorOf :TheLastJudgement .
现在,如果您启用了OWL推理,您将能够推断出,因为 David 是 sculptorOf 断言的对象, David 必须具有 Sculpture 类型。如果RDF(S)推断可用,您还可以推断 David 是 rdfs:资源。