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 是根据rdf:type 的推断定义的; rdfs:subClassOf 和 rdfs:subPropertyOf 是根据任意属性的推断等定义的。当然(与 OWL 一起)也可以使用它来描述词汇表本身,使其成为一种元 RDF 语言(但是,不像 OWL ,它可以描述自己)。
RDFS 类似于经典的面向对象语言,但它也可以表示类的类等。“作为一个实例”(rdf:type)和“作为一个子类”之间也有区别(rdfs:subClassOf)。
SKOS 忽略了 RDF 所看到的类和属性,因为它源于我们人类在我们周围观察到的情况:我们通常不谈论“汽车类别”,而是谈论汽车。集合和类留给逻辑学家和哲学家,而我们只剩下概念。概念是我们在我们周围看到的事物,有些适用于广泛的事物(汽车、电动汽车),有些仅适用于一件事(我邻居的车)。我们不需要高阶集合论来谈论它们,SKOS 也不需要,一切都被描述为一个单独的概念,有些比其他的更一般/抽象。此外,从某种意义上说,SKOS 明确禁止进入更高阶,因为概念不是概念方案的规则。
SKOS 可能在理论上受到限制,但它仍然很强大。有时,用它来谈论模糊的概念更容易(“我的邻居的车”是一个阶级还是个人?SKOS 不在乎),有时需要描述不适合 RDFS 层次结构的概念全部(相关、紧密/精确匹配),不一定让计算机理解,但绝对适合人类。
SKOS 的模型让我想起了 JavaScript,你没有传统的类,而是使用原型来表达继承,类似于 skos:broader。对此,类是对象,对象是类;实例和子类没有区别。
希望您现在看到是否使用一个或另一个的答案是在各自的位置使用 both。您将 RDFS/OWL 用于词汇或推理,当您需要严格的定义时,您将 SKOS 用于概念/分类法,当您需要模糊的定义时,但有些地方两者都可以完美使用。