是否有任何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;
] .
显然有点复杂,难以阅读。如果我需要声明有关语句的语句,它会变得更加复杂。例如“我从罗布那里听到了这个消息,而罗布正走在街上”。
以RDF序列化格式表示这一点的正确和最简单的方法是什么?
答案 0 :(得分:3)
如果可能的话,我会尽量避免隐式的具体化,原因有很多,但更具体地说是因为:
在为自己编写了许多语义Web应用程序之后,我很少次使用隐式具体化,我后悔了。
在您的情况下,我会尝试使用Blank Node
作为heard-by
和heard-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
Rob
和Yourself
。
我发现这种解决方案更清洁,成本低于隐式具体化。我希望这会有所帮助。
答案 1 :(得分:2)
我会使用命名图表,并且不会害怕在图表中放置单个语句。您可以将原始语句放在图形中,然后元语句将是关于该图形而不是其中的语句。这些可以放入一个或多个其他图形中,然后如果您需要一些疯狂的元元声明,那么您可以通过引用包含元语句的图形以与原始元语句相同的方式处理它。 / p>
稍后推理或使用图表时,您可能需要将所有叶子/非元图形“折叠”为单个图形。这也是推理元数据的好方法,以便发现哪些图形“崩溃”到您的可信任语句中以进行实际推理。