我知道要将一个人(一个类的实例)添加到三元组商店,请使用以下insert语句:
PREFIX indv:<http://someexample.com/blah>
PREFIX ont:<http://someotherexample.com/blah/ontology#>
INSERT DATA
{
indv:individual_name rdf:type ont:SomeClassName.
}
我的问题是:这够了吗?
我问这个是因为我使用protege将一些个人添加到一个猫头鹰文件中,我看到该文件还添加了一个三个:
indv:individual_name rdf:type owl:NamedIndividual.
是否有必要将此三联插入三联商店? 插入这个三联系有什么好处,还是有任何缺点?
答案 0 :(得分:2)
我的问题是:这够了吗?
只需在RDF中添加一个类的实例即可。在RDF中,资源可以是类的成员,并且由具有 rdf:type 属性的三元组表示。
我问这个是因为我使用了一些个人添加到猫头鹰文件中 保护,我看到该文件还增加了三个:
indv:individual_name rdf:type owl:NamedIndividual.
是否有必要将此三联插入三联商店? 插入这个三联系有什么好处,或者有没有 缺点
OWL的结构比RDF更多。 OWL实际上是一种基于公理和断言的逻辑语言。它仍然使用IRI作为标识符,设计人员确保将序列化 OWL本体支持到RDF中。因此,您实际上正在使用RDF中的OWL本体的序列化。通常,您可以找到有用的官方文档OWL 2 Web Ontology Language Mapping to RDF Graphs。
你在Protege的输出中看到的实际上是两个 OWL公理的序列化。在OWL中,您可以声明个人而无需指定其所属的任何类。你可以用一个公理(从上面链接的文档中复制)来做到这一点:
声明(NamedIndividual(*:a))
它被转换为RDF作为三元组:
T(*:a)rdf:type owl:NamedIndividual。
T(*:a)符号只意味着无论*:a的翻译是什么,它都是三元组的主语。所以&#34; x rdf:type owl:NamedIndividual&#34;三重是实际负责说明&#34; x是个人。也就是说,要声明某事物是个人,你只需这样做:
INSERT DATA { indv:individual_name rdf:type owl:NamedIndivual }
那么添加另一种类型(如原始SPARQL更新)呢?在OWL中,你说&#34; a&#34;是一个类的成员,用类表达式表示&#34; CE&#34;,用这个公理:
ClassAssertion(CE a)
将其翻译为RDF
T(a)rdf:类型T(CE)。
T(a)和T(CE)表示法仅表示&#34; a&#34;和&#34; CE&#34;在RDF中可能比简单的IRI或空白节点或文字更复杂。例如,类表达式可能是unionOf,或者是intersectionOf等。因此,如果要添加类断言公理,则需要使用SPARQL更新,如:
INSERT DATA {
indv:individual_name rdf:type ont:SomeClassName.
}
当然,如果您实际上已经宣布了这个人,那么您应该这样做(尽管您会发现在实践中并不总是这样做)。所以,总而言之,你可能想要这样的更新:
INSERT DATA {
indv:individual_name rdf:type ont:SomeClassName, owl:NamedIndividual
}
(i)声明个人,以及(ii)声称该个人是特定类别的成员。