Warm tip: This article is reproduced from serverfault.com, please click

rdf-如何使用 foaf 指定类属性

(rdf - How to specify a class property using foaf)

发布于 2021-02-11 20:47:13

我想创建一个本体来描述社交网络中用户之间的交互,并且我想将其导入到 GraphDB 中。我决定使用词汇foaf来利用其中已经定义的资源。我正在创建本体的模式,并且我正在将User开发foaf:Person类型,每个用户都有一个字符串名称,所以我想使用foaf:name属性在用户类中添加这个关系

我的问题是,由于这不是用户的实例,我应该在谓词foaf:name旁边的类描述中使用什么对象

@prefix : <http://xmlns.com/swp/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/TR/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# BASE INFORMATION

:User a foaf:Person ;
    rdfs:label "User" ;
    rdfs:comment "A person who has got an account" ;
    foaf:name ??? ;
    foaf:title :EducationalQualification .

编辑 我认为也许正确的对象可能是xsd:string

:User a foaf:Person ;
    rdfs:label "User" ;
    rdfs:comment "A person who has got an account" ;
    foaf:name xsd:string ;
    foaf:title :EducationalQualification .
Questioner
M.Morris
Viewed
0
IS4 2021-02-12 22:35:51

我建议学习RDF Schema以获取如何编写自己的基本词汇表的说明。不需要使用其中任何一个,但对于想要使用或理解你的自定义词汇表的任何人来说,它肯定很有用。

现在让我们考虑问题域。你有具有姓名和职位的用户。你希望你的名字是纯字符串,你的标题是:EducationalQualification. 让我们尝试表达这一点,不是使用而是扩展FOAF。

首先,你要表示every :Userfoaf:Person. 写作:User a foaf:Person是不正确的,因为这意味着由 标识的资源:User是一个人的特定实例,它不是——它是一个类!

:User a rdfs:Class ;
  rdfs:subClassOf foaf:Person .

这是你的新类的一个很好的定义——从这个有人可以推断出你数据集中的用户可以被视为 FOAF 人。

对于人名,我认为rdf:langString(即语言标记的字符串)对于人名来说是一个更好的类,特别是如果你使用foaf:name,所以我会使用它(但无论如何在用法上没有区别)。

:name a rdf:Property ;
  rdfs:domain :User ;
  rdfs:range rdf:langString ;
  rdfs:subPropertyOf foaf:name .

这又很简单::name是一个可以(必须)附加到 a:User并且具有(必须)值为 的属性rdf:langString如果任何两个资源通过此属性链接,则意味着它们也链接在一起foaf:name(由于子属性)。

标题相同:

:title a rdf:Property ;
  rdfs:domain :User ;
  rdfs:range :EducationalQualification ;
  rdfs:subPropertyOf foaf:title .

你的初衷是表示通过foaf:titlea附加的任何内容:User都是:EducationalQualification这也可以表达,但你需要比 RDFS 更强大的东西,比如 OWL:

@prefix owl: <http://www.w3.org/2002/07/owl#> .

[ a owl:Restriction ;
  owl:onProperty [ owl:inverseOf foaf:title ] ;
  owl:someValuesFrom :User
] rdfs:subClassOf :EducationalQualification .

然而,我认为这不是一个好主意,因为它foaf:title以一种意想不到的方式进行了修改如果你有专门的含义,最好使用专门的属性。