2

当我学习语义网和 sparql 时,感觉到 RDFS 和 SKOS 似乎提供了非常相似的语义关系建模功能。例如,

  • RDFS - rdfs:subClassOf, rdfs:superClassOf 可用于对层次结构进行建模
  • SKOS - skos:narrower, skos:broader 可用于对层次结构进行建模

两者都提供双向传递。

尽管

  • SKOS 通过 skos:narrowerTransitive、skos:broaderTransitive、skos:related、skos:closeMatch 等提供更明确的属性来建模传递性、相关关系和匹配
  1. 这是正确的理解吗?
  2. 建模时是否有任何指导来选择正确的模式?
  3. 如果我认为 skos 语义提供了上述优势,为什么 dbpedia 使用很多 rdfs vs skos?

谢谢!

4

2 回答 2

3

RDFS 和 SKOS 之间的主要区别在 SKOS 规范中进行了概述:

https://www.w3.org/TR/skos-reference/#L1045

SKOS 数据模型的元素是类和属性,数据模型的结构和完整性由这些类和属性的逻辑特征和相互依赖关系定义。这可能是 SKOS 最强大但可能令人困惑的方面之一,因为在更高级的应用程序中,SKOS 还可以与 OWL 一起使用,以表达和交换有关领域的知识。然而,SKOS并不是一种正式的知识表示语言。

作为一种正式的知识表示语言,推理没有标准化,与其他知识库的互操作性可能会降低。

对于选择的原因,我不能代表 dbpedia 发言,但这对我来说似乎是一个足够好的理由,所以如果这是其中的一部分,我不会感到惊讶。

于 2021-11-28T21:36:58.110 回答
2

RDFS 和 SKOS 可以很容易地并排使用,因为它们的侧重点有些不同。

RDFS 是直接从 RDF 数据模型及其序列化中产生的东西。它从 RDF 推理/蕴含机制开始,该机制模拟了任何人都可以从三元组中推断出的最基本的东西a b c——这b是一个属性,因此我们需要rdf:typerdf:Property表达这个事实(这就是为什么这两个不在 中rdfs:)。更进一步,我们有 RDFS,它再次从rdf:type(使其范围成为一个类)和rdf:Property(推断它是一个类,并允许描述子属性)开始。然后我们有 OWL,它允许更大程度的推理,但也可以检测(或创建)矛盾。

RDFS 专注于推理;它的所有类和属性都以它为中心:rdfs:domain并根据;rdfs:range的推断来定义 并且是根据任意属性的推断等定义的。当然(与 OWL 一起)也可以使用它来描述词汇表本身,使其成为一种元 RDF 语言(但是,与 OWL 不同,它可以描述自己) .rdf:typerdfs:subClassOfrdfs:subPropertyOf

RDFS 类似于经典的面向对象语言,但它也使得表达类的类等成为可能。“作为 () 的实例”rdf:type和“作为 () 的子类”之间也存在区别rdfs:subClassOf

SKOS 忽略了 RDF 所看到的类和属性,因为它源于我们人类在我们周围观察到的东西:我们通常不谈论“汽车类”,而是谈论汽车。集合和类留给逻辑学家和哲学家,我们只剩下概念。概念是我们在我们周围看到的事物,有些适用于广泛的事物(汽车、电动汽车),有些仅适用于一件事(我邻居的车)。我们不需要高阶集合论来谈论它们,SKOS 也不需要,一切都被描述为一个单独的概念,有些比其他的更一般/抽象。此外,在某种意义上,SKOS 明确禁止进入更高阶,因为概念不是概念方案的规则。

SKOS 可能在理论上是有限的,但它仍然很强大。有时,用它来谈论模糊的概念更容易(“我的邻居的车”是一个阶级还是个人?SKOS 不在乎),有时需要描述不适合 RDFS 层次结构的概念全部(相关,紧密/精确匹配),不一定让计算机理解,但绝对适合人类。

SKOS 的模型让我想起了 JavaScript,没有传统的类,而是使用原型来表达继承,类似于skos:broader. 对此,类是对象,对象是类;实例和子类之间没有区别。

希望您现在看到,是否使用其中一个的答案是在各自的位置同时使用两者。您将 RDFS/OWL 用于词汇或推理,当您需要严格定义时,您将 SKOS 用于概念/分类法,当您需要模糊定义时,但有些地方两者都可以完美使用。

于 2021-12-02T12:38:00.823 回答