RDFS vs SKOS,什么时候用什么?
RDFS vs SKOS, when to use what?
在学习语义网和 sparql 时,感觉 RDFS 和 SKOS 似乎提供了非常相似的语义关系建模功能。例如,
- RDFS - rdfs:subClassOf、rdfs:superClassOf 可用于对层次结构建模
- SKOS - skos:narrower、skos:broader 可用于对层次结构建模
两者都提供双向传递性。
虽然
- SKOS 通过 skos:narrowerTransitive、skos:broaderTransitive、skos:related、skos:closeMatch 等[=27= 为传递性、相关关系和匹配建模提供了更明确的属性]
- 这个理解正确吗?
- 在建模时是否有任何指导来选择正确的模式?
- 如果我认为 skos 语义提供了上述优势,为什么 dbpedia 使用大量 rdfs 而不是 skos?
谢谢!
RDFS 和 SKOS 之间的主要区别在 SKOS 规范中概述:
https://www.w3.org/TR/skos-reference/#L1045
The elements of the SKOS data model are classes and properties, and the structure and integrity of the data model is defined by the logical characteristics of, and interdependencies between, those classes and properties. This is perhaps one of the most powerful and yet potentially confusing aspects of SKOS, because SKOS can, in more advanced applications, also be used side-by-side with OWL to express and exchange knowledge about a domain. However, SKOS is not a formal knowledge representation language.
不是正式的知识表示语言,推理没有标准化,与其他知识库的互操作性可能较低。
我不能代表 dbpedia 说出选择的原因,但这对我来说似乎是一个足够好的理由,所以如果这是其中的一部分我也不会感到惊讶。
RDFS 和 SKOS 可以很容易地并排使用,因为它们的侧重点有些不同。
RDFS 是直接从 RDF 数据模型及其序列化中出现的东西。它从 RDF inference/entailment 制度开始,该制度模拟了任何人都可以从三元组 a b c
中推断出的最基本的东西——b
是一个 属性,因此我们需要 rdf:type
和 rdf:Property
来表达这一事实(这就是为什么这两个不在 rdfs:
中)。更进一步,我们有再次从 rdf:type
开始的 RDFS(使其范围成为 class)和 rdf:Property
(推断它是 class,并允许描述子属性)。然后我们有 OWL 允许更大程度的推理,但也可以检测(或创建)矛盾。
RDFS 专注于推理;它的所有 classes 和属性都以它为中心:rdfs:domain
和 rdfs:range
是根据 rdf:type
的推论定义的; rdfs:subClassOf
和 rdfs:subPropertyOf
是根据任意属性的推断等定义的。当然(与 OWL 一起)也可以用它来描述词汇本身,使它成为一种元-RDF 语言(但是,不像 OWL,它可以描述自己)。
RDFS 类似于 classical 面向对象语言,但它也使得表达 classes 的 classes 等成为可能。“是"(rdf:type
) 的实例和"是"(rdfs:subClassOf
) 的子class。
SKOS 忽略了 RDF 看到的 classes 和属性,因为它源于我们人类在我们周围观察到的东西:我们通常不会谈论“class 汽车” ,我们谈论汽车。集合和 classes 留给逻辑学家和哲学家,我们留给 概念 。概念是我们在周围看到的事物,有些适用于广泛的事物(汽车、电动汽车),有些只适用于一件事(我邻居的车)。我们不需要高阶集合论来谈论它们,SKOS 也不需要,一切都被描述为一个单独的概念,比其他的更多 general/abstract。此外,从某种意义上说,根据概念不是概念方案的规则,SKOS 明确不允许进入更高阶。
SKOS 在理论上可能受到限制,但它仍然很强大。有时,用它来谈论模糊的概念更容易(“我邻居的车”是class还是个人?SKOS不关心),有时需要描述不符合的概念RDFS 层次结构(相关,close/exact 匹配),计算机不一定能理解,但人类肯定能理解。
SKOS的模型让我想起了JavaScript,这里没有传统的classes,而是使用原型来表达继承,类似于skos:broader
。在这方面,一个class是一个对象,一个对象是一个class;实例和子实例没有区别class.
希望您现在明白是使用一个还是另一个的答案是在各自的位置使用两者。你用RDFS/OWL来做词表或推理,当你需要严格定义时,你用SKOS来做concepts/taxonomies,当你需要模糊定义时,但有些地方两者都可以完美使用。
在学习语义网和 sparql 时,感觉 RDFS 和 SKOS 似乎提供了非常相似的语义关系建模功能。例如,
- RDFS - rdfs:subClassOf、rdfs:superClassOf 可用于对层次结构建模
- SKOS - skos:narrower、skos:broader 可用于对层次结构建模
两者都提供双向传递性。
虽然
- SKOS 通过 skos:narrowerTransitive、skos:broaderTransitive、skos:related、skos:closeMatch 等[=27= 为传递性、相关关系和匹配建模提供了更明确的属性]
- 这个理解正确吗?
- 在建模时是否有任何指导来选择正确的模式?
- 如果我认为 skos 语义提供了上述优势,为什么 dbpedia 使用大量 rdfs 而不是 skos?
谢谢!
RDFS 和 SKOS 之间的主要区别在 SKOS 规范中概述:
https://www.w3.org/TR/skos-reference/#L1045
The elements of the SKOS data model are classes and properties, and the structure and integrity of the data model is defined by the logical characteristics of, and interdependencies between, those classes and properties. This is perhaps one of the most powerful and yet potentially confusing aspects of SKOS, because SKOS can, in more advanced applications, also be used side-by-side with OWL to express and exchange knowledge about a domain. However, SKOS is not a formal knowledge representation language.
不是正式的知识表示语言,推理没有标准化,与其他知识库的互操作性可能较低。
我不能代表 dbpedia 说出选择的原因,但这对我来说似乎是一个足够好的理由,所以如果这是其中的一部分我也不会感到惊讶。
RDFS 和 SKOS 可以很容易地并排使用,因为它们的侧重点有些不同。
RDFS 是直接从 RDF 数据模型及其序列化中出现的东西。它从 RDF inference/entailment 制度开始,该制度模拟了任何人都可以从三元组 a b c
中推断出的最基本的东西——b
是一个 属性,因此我们需要 rdf:type
和 rdf:Property
来表达这一事实(这就是为什么这两个不在 rdfs:
中)。更进一步,我们有再次从 rdf:type
开始的 RDFS(使其范围成为 class)和 rdf:Property
(推断它是 class,并允许描述子属性)。然后我们有 OWL 允许更大程度的推理,但也可以检测(或创建)矛盾。
RDFS 专注于推理;它的所有 classes 和属性都以它为中心:rdfs:domain
和 rdfs:range
是根据 rdf:type
的推论定义的; rdfs:subClassOf
和 rdfs:subPropertyOf
是根据任意属性的推断等定义的。当然(与 OWL 一起)也可以用它来描述词汇本身,使它成为一种元-RDF 语言(但是,不像 OWL,它可以描述自己)。
RDFS 类似于 classical 面向对象语言,但它也使得表达 classes 的 classes 等成为可能。“是"(rdf:type
) 的实例和"是"(rdfs:subClassOf
) 的子class。
SKOS 忽略了 RDF 看到的 classes 和属性,因为它源于我们人类在我们周围观察到的东西:我们通常不会谈论“class 汽车” ,我们谈论汽车。集合和 classes 留给逻辑学家和哲学家,我们留给 概念 。概念是我们在周围看到的事物,有些适用于广泛的事物(汽车、电动汽车),有些只适用于一件事(我邻居的车)。我们不需要高阶集合论来谈论它们,SKOS 也不需要,一切都被描述为一个单独的概念,比其他的更多 general/abstract。此外,从某种意义上说,根据概念不是概念方案的规则,SKOS 明确不允许进入更高阶。
SKOS 在理论上可能受到限制,但它仍然很强大。有时,用它来谈论模糊的概念更容易(“我邻居的车”是class还是个人?SKOS不关心),有时需要描述不符合的概念RDFS 层次结构(相关,close/exact 匹配),计算机不一定能理解,但人类肯定能理解。
SKOS的模型让我想起了JavaScript,这里没有传统的classes,而是使用原型来表达继承,类似于skos:broader
。在这方面,一个class是一个对象,一个对象是一个class;实例和子实例没有区别class.
希望您现在明白是使用一个还是另一个的答案是在各自的位置使用两者。你用RDFS/OWL来做词表或推理,当你需要严格定义时,你用SKOS来做concepts/taxonomies,当你需要模糊定义时,但有些地方两者都可以完美使用。