如何使用 foaf 指定 class 属性
How to specify a class property using foaf
我想创建一个 ontology 来描述社交网络中用户之间的交互,我想将其导入 GraphDB。
我决定使用词汇表 foaf 来利用其中已经定义的资源。
我正在创建 ontology 的架构,并且正在开发 User class 作为 foaf:Person[=28= 的类型], 每个用户都有一个字符串 name 所以我想在用户 class 中使用 foaf:name [=41] 添加这个关系=].
我的问题是,由于这不是用户的实例,我应该在谓词 foaf:name 旁边的 class 描述中使用什么对象?
@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 .
我建议学习 RDF Schema 以了解如何编写自己的基本词汇表。您不需要使用其中的任何一个,但对于任何想要使用或理解您的自定义词汇表的人来说,它肯定是有用的。
现在让我们考虑一下问题域。您有具有姓名和职务的用户。你希望你的名字是纯字符串,你的标题是 :EducationalQualification
的实例。让我们试着表达一下,不是使用而是 extending FOAF.
首先,您想表达每个 :User
是一个foaf:Person
。写 :User a foaf:Person
是不正确的,因为它意味着 :User
标识的资源是一个人的特定实例,但它不是 – 它是 class!
:User a rdfs:Class ;
rdfs:subClassOf foaf:Person .
这是对您的新定义的一个很好的定义 class – 从这里有人可以推断出您数据集中的用户可以被视为 FOAF 人。
对于人名,我认为 rdf:langString
(即 language-tagged 字符串)对于人名来说更好 class,尤其是如果您使用 foaf:name
,所以我会用那个(但无论如何在用法上没有区别)。
:name a rdf:Property ;
rdfs:domain :User ;
rdfs:range rdf:langString ;
rdfs:subPropertyOf foaf:name .
这又很简单::name
是一个 属性,可以(必须)附加到 :User
并且具有(必须具有)值 rdf:langString
.如果任何两个资源通过此 属性 链接,则意味着它们也与 foaf:name
链接(由于 sub-property)。
标题相同:
:title a rdf:Property ;
rdfs:domain :User ;
rdfs:range :EducationalQualification ;
rdfs:subPropertyOf foaf:title .
您的初衷是表达通过 foaf:title
附加到 :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
。如果您有专门的含义,最好使用专门的 属性。
我想创建一个 ontology 来描述社交网络中用户之间的交互,我想将其导入 GraphDB。 我决定使用词汇表 foaf 来利用其中已经定义的资源。 我正在创建 ontology 的架构,并且正在开发 User class 作为 foaf:Person[=28= 的类型], 每个用户都有一个字符串 name 所以我想在用户 class 中使用 foaf:name [=41] 添加这个关系=].
我的问题是,由于这不是用户的实例,我应该在谓词 foaf:name 旁边的 class 描述中使用什么对象?
@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 .
我建议学习 RDF Schema 以了解如何编写自己的基本词汇表。您不需要使用其中的任何一个,但对于任何想要使用或理解您的自定义词汇表的人来说,它肯定是有用的。
现在让我们考虑一下问题域。您有具有姓名和职务的用户。你希望你的名字是纯字符串,你的标题是 :EducationalQualification
的实例。让我们试着表达一下,不是使用而是 extending FOAF.
首先,您想表达每个 :User
是一个foaf:Person
。写 :User a foaf:Person
是不正确的,因为它意味着 :User
标识的资源是一个人的特定实例,但它不是 – 它是 class!
:User a rdfs:Class ;
rdfs:subClassOf foaf:Person .
这是对您的新定义的一个很好的定义 class – 从这里有人可以推断出您数据集中的用户可以被视为 FOAF 人。
对于人名,我认为 rdf:langString
(即 language-tagged 字符串)对于人名来说更好 class,尤其是如果您使用 foaf:name
,所以我会用那个(但无论如何在用法上没有区别)。
:name a rdf:Property ;
rdfs:domain :User ;
rdfs:range rdf:langString ;
rdfs:subPropertyOf foaf:name .
这又很简单::name
是一个 属性,可以(必须)附加到 :User
并且具有(必须具有)值 rdf:langString
.如果任何两个资源通过此 属性 链接,则意味着它们也与 foaf:name
链接(由于 sub-property)。
标题相同:
:title a rdf:Property ;
rdfs:domain :User ;
rdfs:range :EducationalQualification ;
rdfs:subPropertyOf foaf:title .
您的初衷是表达通过 foaf:title
附加到 :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
。如果您有专门的含义,最好使用专门的 属性。