0

我有一个图表,在这个图表中我有一个这样的列表:

: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}

我希望得到资源和雕塑。我不明白为什么不工作,我该怎么办?

4

1 回答 1

3

您的标题是如何在 rdf 中插入列表,但看起来您正在尝试查询查询中的值在数据列表中的位置。

如果我对您的理解正确,您希望根据以下内容找到 David 的类型:

: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 推理,您将能够推断出,由于DavidsculptorOf断言的对象,因此David必须具有Sculpture类型。如果 RDF(S) 推断可用,您还可以推断David是一个rdfs:Resource

于 2016-05-23T22:24:29.393 回答