4

是否有任何 RDF 序列化格式(如Notation 3)支持隐式具体化以便轻松表示关于语句的语句?

例如,假设我有声明“玛丽买了房子”,我将在 N3 中表示如下:

:Mary :bought-a :house .

现在假设我想添加有关此语句的元语句,例如“我从 Rob 那里听说的”。

直观地说,我希望能够通过编写如下内容来表示这一点:

:Mary :bought-a :house .
    :heard-by :me .
    :heard-from :Rob .

但是,我认为这将在 N3 中“正式”表示的方式类似于:

[ a rei:Statement;
  rei:subject [rei:uri :Mary];
  rei:predicate [rei:uri :bought-a];
  rei:object [rei:value :house]
] [
    :heard-by :me;
    :heard-from :Rob;
] .

这显然更复杂,更难阅读。如果我需要对关于陈述的陈述进行陈述,情况就会变得更加复杂。例如“我从 Rob 那里听到这个消息,而 Rob 正走在街上”。

以 RDF 序列化格式表示它的正确和最简单的方法是什么?

4

2 回答 2

3

如果可能的话,我会尽量避免隐式具体化,原因有很多,但更具体地说是因为:

  • 访问数据更难,
  • 随着每个三元组变成 4 个三元组,数据集的大小急剧增加,
  • 适用于非具体化数据集的 SPARQL 查询不适用于具体化数据集,
  • 推理者会搞砸事情或不起作用。

在为自己编写了许多语义 Web 应用程序之后,我对使用隐式具体化的那几次感到后悔。

在您的情况下,我将尝试通过使用 aBlank Node作为heard-byheard-from谓词的中间联合点来通过显式具体化对其进行建模。类似于(在 RDF/Turtle 中):

@prefix : <http://somedata.org/id/> .
:Mary :bought-a [ 
     a :House;
    :heard-by :me;
    :heard-from :Rob ] .

在普通的 RDF/ntriples 中,这与(用rapper转换)相同:

<http://somedata.org/id/Mary> <http://somedata.org/id/bought-a> _:genid1 .
_:genid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://somedata.org/id/House> .
_:genid1 <http://somedata.org/id/heard-by> <http://somedata.org/id/me> .
_:genid1 <http://somedata.org/id/heard-from> <http://somedata.org/id/Rob> .

如您所见,您Mary购买了一些东西,并且rdf:type House您听到了它。from RobYourself

我发现这个解决方案比隐式具体化更干净,成本更低。我希望这有帮助。

于 2011-03-07T17:46:33.967 回答
2

我会使用命名图,并且不会害怕将单个语句放入图中。您可以将原始语句放在图表中,然后元语句将与该图表有关,而不是其中的语句。这些可以放入一个或多个其他图表中,然后如果您需要一些疯狂的元元语句,那么您可以通过引用包含元语句的图表以与原始元语句相同的方式处理它。

稍后推理或使用图表时,您可能需要将所有叶/非元图表“折叠”成一个图表。这也是推理元数据的好方法,以便发现哪些图表可以“折叠”到您的可信语句中以进行实际推理。

于 2011-03-09T22:21:57.343 回答