RDFS 和 SKOS 可以很容易地并排使用,因为它们的侧重点有些不同。
RDFS 是直接从 RDF 数据模型及其序列化中产生的东西。它从 RDF 推理/蕴含机制开始,该机制模拟了任何人都可以从三元组中推断出的最基本的东西a b c
——这b
是一个属性,因此我们需要rdf:type
并rdf:Property
表达这个事实(这就是为什么这两个不在 中rdfs:
)。更进一步,我们有 RDFS,它再次从rdf:type
(使其范围成为一个类)和rdf:Property
(推断它是一个类,并允许描述子属性)开始。然后我们有 OWL,它允许更大程度的推理,但也可以检测(或创建)矛盾。
RDFS 专注于推理;它的所有类和属性都以它为中心:rdfs:domain
并根据;rdfs:range
的推断来定义 并且是根据任意属性的推断等定义的。当然(与 OWL 一起)也可以使用它来描述词汇表本身,使其成为一种元 RDF 语言(但是,与 OWL 不同,它可以描述自己) .rdf:type
rdfs:subClassOf
rdfs:subPropertyOf
RDFS 类似于经典的面向对象语言,但它也使得表达类的类等成为可能。“作为 () 的实例”rdf:type
和“作为 () 的子类”之间也存在区别rdfs:subClassOf
。
SKOS 忽略了 RDF 所看到的类和属性,因为它源于我们人类在我们周围观察到的东西:我们通常不谈论“汽车类”,而是谈论汽车。集合和类留给逻辑学家和哲学家,我们只剩下概念。概念是我们在我们周围看到的事物,有些适用于广泛的事物(汽车、电动汽车),有些仅适用于一件事(我邻居的车)。我们不需要高阶集合论来谈论它们,SKOS 也不需要,一切都被描述为一个单独的概念,有些比其他的更一般/抽象。此外,在某种意义上,SKOS 明确禁止进入更高阶,因为概念不是概念方案的规则。
SKOS 可能在理论上是有限的,但它仍然很强大。有时,用它来谈论模糊的概念更容易(“我的邻居的车”是一个阶级还是个人?SKOS 不在乎),有时需要描述不适合 RDFS 层次结构的概念全部(相关,紧密/精确匹配),不一定让计算机理解,但绝对适合人类。
SKOS 的模型让我想起了 JavaScript,没有传统的类,而是使用原型来表达继承,类似于skos:broader
. 对此,类是对象,对象是类;实例和子类之间没有区别。
希望您现在看到,是否使用其中一个的答案是在各自的位置同时使用两者。您将 RDFS/OWL 用于词汇或推理,当您需要严格定义时,您将 SKOS 用于概念/分类法,当您需要模糊定义时,但有些地方两者都可以完美使用。