RDF中具体化的简单示例

RDF中具体化的简单示例,rdf,reification,Rdf,Reification,谁能给我举一个RDF中具体化的简单例子?我想看看我是否理解正确 例如,我提出以下情况 Tolkien -> wrote -> Lord of the rings /|\ | Wikipedia said that 有物化和无物化(即,作为一个简单的RDF语句,不需要物化)时,您会如何编写它?“托尔金写的指环王”可以表示为一个简单语句(主语、谓语、宾语),如下所示: :Tolkien :wrote :LordOfTheRi

谁能给我举一个RDF中具体化的简单例子?我想看看我是否理解正确

例如,我提出以下情况

Tolkien -> wrote -> Lord of the rings
           /|\
            |
        Wikipedia said that
有物化和无物化(即,作为一个简单的RDF语句,不需要物化)时,您会如何编写它?

“托尔金写的指环王”可以表示为一个简单语句(主语、谓语、宾语),如下所示:

:Tolkien :wrote :LordOfTheRings .
顺便说一下,这是使用RDF的表示法。在线上有很多方法可以将其转换为RDF/XML

使用,您可以有一个单独的资源来表示一条语句,这样您就可以声明关于该语句本身的其他内容,如“Wikipedia说:

@前缀rdf:。
_:x rdf:type rdf:Statement。
_:x rdf:主题:托尔金。
_:x rdf:谓词:已写入。
_:x rdf:object:领主。
_:x:said:Wikipedia。

在现实生活中,您可能希望使用共享词汇表,以便使用RDF的任何人或任何人都知道您在谈论托尔金和LOTR:




更好的方法是使用singleton属性方法

例如,您可以创建一个singleton属性,将此语句表示为:

Tolkien wrote#1 "Lord of the rings" .

wrote#1 rdf:singletonPropertyOf wrote .

wrote#1 asserted_by Wikipedia .

您可能想在“不喜欢RDF具体化?使用singleton属性对语句进行陈述”一文或其幻灯片中了解更多信息。不幸的是,到目前为止,关系实例,也就是W3C文档所称的关系扩展元素,或者在数学上称之为对,这是关系的要素,不被视为一等公民

语义网络生态系统宣称AAA口号,任何人都可以说任何事。但这不是真的,如果这里的第一个“任何东西”是图的一条边。甚至,如果RDF本身能够表达关于单个边缘的知识,W3C RDF语义文档也会尽其所能,而不是支持这种表达能力

基本上,有4种方法可以描述边缘:

  • 不受欢迎的、膨胀的松散耦合RDF语句
  • 财产单例
  • 名为graphs的单个语句(四元结构中的第四个元素是图形ID)
  • 关联节点(类似于UML关联类)
属性单例无疑是解决这个问题的最简单的方法,因为它们没有添加任何内容——您只是为了避免一次又一次地对实例边缘使用类级属性标识符。其他建模生态系统对元建模(如MOF)有着清晰的理解,因此不太容易犯这样的错误。类级边连接类级节点,实例级边连接实例级节点。就这样

如果你做对了(正如Vinh和他的同事所建议的那样),你就走上了冲突之路wrt推理机,它是沿着W3CRDF语义文档硬编码的

您可以通过制造另一个设计缺陷并将您的属性单例实现为类级属性的子pertyof-s[而不是使它们成为它的实例],暂时避免这种情况(只要W3C尚未标准化属性单例)。 然后,现在的RDFS推理者将从

:my_label_0815 rdfs:subPropertyOf rdfs:label .
:some_node :my_label_0815 "some_string" .

这是一项肮脏的工作,因为它打破了元级别的清晰分离


我们有这么多设计糟糕的模型,只是因为我们没有一个简单的方法来描述引用(实例级边缘)

从2020年起,您可以按如下方式使用RDF*:

>:说:维基百科

2020年,许多领先的三联店实施了这一方法。还有一些工具可以将标准物化转换为RDF*以减少三重膨胀。正如Ontotext的GraphDB Triple store和其他一些方法所报告的那样,这种方法在三元组的数量和加载数据的速度方面是有效的


您可以在此处阅读此方法的起源

谢谢您的回答。如果我理解正确的话,当你执行物化时,你必须同时提供这两个,或者仅仅物化就足以表达物化的陈述了?(显然应该,但从技术上讲,什么是最佳实践?)声明的具体化版本并不意味着原始声明。这在上面链接的RDF语义文档的具体化部分进行了解释。这只是合乎逻辑的:从“维基百科说托尔金写了LOTR”来看,这并不意味着“托尔金写了LOTR”。在实践中,如果你存储所有语句的具体化版本,你最终会将必须存储的三元组数相乘。如果您只需要记录语句的出处,您可能需要考虑命名图/四舍五入作为替代。我不相信这种方法在查询方面很好(如同标准化RDF化方法())一样。我建议保留RDF中的谓词部分,并扩展RDF数据模型以允许语句标识符(另请参见,例如),从查询方面看,这不是什么大问题。我们总是可以优化查询处理(创建辅助索引、视图等)。我认为更具挑战性的是,如何在RDF的形式语义中表示语句标识符?我认为,singleton属性的问题在于,您只将元数据与谓词相关联(如果我没有弄错的话)。这并不是在所有情况下都很“语义”。考虑一下SsiMeNe:“死亡”830。我们确切地知道,这个人物死了,但是我们假设Historian B说它是“830”。然后我想把元数据联系起来(历史学家B说……)到目前为止,这是这里的宾语,而不是谓语。有时甚至相反:我们知道,有人死于830年,但我们不知道是谁。历史学家C说,这是人物角色。在这里,元数据应该与
:my_label_0815 rdfs:subPropertyOf rdfs:label .
:some_node :my_label_0815 "some_string" .
:some_node rdfs:label "some_string" .