我正在尝试阅读RDF规范。我知道什么是类,属性和所有类。
但是规范似乎没有提供一种方式让我说,例如,Person类型的对象应该有一个名字,姓氏等。规范似乎表明它超出了RDF的范围。
然而,当我查看FOAF数据库中的Person时,他们列出了一个人应该拥有的所有这些属性。这是怎么回事?他们如何将这些属性与他们的Person类相关联?这只是自然语言吗?
答案 0 :(得分:4)
RDF规范不对类的实例必须具有的属性强制执行任何约束。 RDFS包括“声明”域名和属性范围的方法。换一种说法。它允许指定,如果给定资源具有给定属性,则它具有某种类型:
foaf:knows a rdf:Property ;
rdfs:domain foaf:Person .
<enridaga> foaf:knows <alexdma> .
从上面可以推断出:
<enridaga> rdf:type foaf:Person .
OWL指定了更细粒度的方法来表达类和属性的特征。但是,所有这些规范都涉及“指定”功能的方法。具体程序可以利用它们,实现可证实的三元组或最终执行约束检查。
您引用的FOAF documentation列出了声明foaf的属性:Person作为关系的域类。
答案 1 :(得分:3)
enridaga's answer点击了这一点。还有一些评论。
当我查看Person in the FOAF database时, 它列出了所有这些 一个人应该拥有的属性。
不,它没有。它列出了一堆具有foaf的属性:Person(或foaf的子类:Person)作为域。这意味着如果这些属性与某些资源一起用作主题,那么该主题就是一个人:。例如,来自
<https://stackoverflow.com/users/1281433/> foaf:lastName "Taylor"@en
我们可以推断用户(我!)是一个foaf:Person。 enridaga的回答也描述了这一点。在列出具有域Person的一堆属性之前,FOAF文档说属性包括:可能是有益的。
怎么回事?他们怎么样 将这些属性与其Person类相关联?它只是 自然语言?
不,这是rdfs:domain属性。 RDFS没有指定任何方式来说某些资源必须具有某个属性的值(除了实际断言关于该资源和属性的三元组)。在OWL中,你可以拥有表格的公理(首先是DL语法,然后是曼彻斯特语法):
人⊑⊑knows.Person)
人 SubClassOf (知道某些人)
这表示每个人至少知道一个人。但是,这是逻辑公理,而不是数据验证规则。这意味着如果你知道某个人是某个人,那么你知道某个地方有某个人知道某个人。它没有说它是什么,并没有说它必须在某处明确断言。也就是说,如果给定的知识库没有告诉你某个人知道什么,那就不是逻辑上的不一致。