使用 SPARQL UPDATE 添加个人的推荐方法是什么?
What is the recommended way for adding individuals with SPARQL UPDATE?
我知道要将一个个体(class 的实例)添加到三重存储是使用以下插入语句:
PREFIX indv:<http://someexample.com/blah>
PREFIX ont:<http://someotherexample.com/blah/ontology#>
INSERT DATA
{
indv:individual_name rdf:type ont:SomeClassName.
}
我的问题是:这够了吗?
我问这个是因为我使用 protege 在 owl 文件中添加了一些人,我看到该文件又添加了一个三重:
indv:individual_name rdf:type owl:NamedIndividual.
这个三元组是否也需要插入到三元组存储中?
插入这个三元组有什么好处或有什么缺点?
My question is: is this enough?
在RDF中简单地添加一个class的实例,就足够了。在 RDF 中,资源可以是 classes 的成员,并且由具有 属性 rdf:type.
的三元组表示
I am asking this because I added some individuals to an owl file using
protege and I saw that the file had one more triple added:
indv:individual_name rdf:type owl:NamedIndividual.
Is it necessary to insert this triple into the triple store as well?
What are the benefits for inserting this triple or are there any
disadvantages?
OWL 比 RDF 有更多的结构。 OWL 实际上是一种基于公理和断言的逻辑语言。它仍然使用 IRI 作为标识符,并且设计者确保支持 序列化 OWL 本体到 RDF 中。因此,您实际上是在处理 RDF 中 OWL ontology 的序列化。一般来说,您可能会发现官方文档 OWL 2 Web Ontology Language Mapping to RDF Graphs 很有用。
您在 Protege 的输出中看到的实际上是 两个 OWL 公理的序列化。在 OWL 中,您可以声明一个个体而无需指定它所属的任何 classes。你用这样的公理来做到这一点(从上面链接的文档中复制):
Declaration( NamedIndividual( *:a ) )
这被翻译成 RDF 作为三元组:
T(*:a) rdf:type owl:NamedIndividual .
T(*:a) 符号只是意味着无论 *:a 的翻译是什么,它都是三元组的主题。所以 "x rdf:type owl:NamedIndividual" 三元组实际上负责声明“x 是一个个体。也就是说,要声明某物是一个个体,你只需要做:
INSERT DATA { indv:individual_name rdf:type owl:NamedIndivual }
那么如何添加另一种类型(如在原始 SPARQL 更新中那样)?在 OWL 中,你说 "a" 是某个 class 的成员,用 class 表达式表示 "CE",公理为:
ClassAssertion( CE a )
翻译成 RDF 为
T(a) rdf:type T(CE) .
T(a) 和 T(CE) 符号只是表明 "a" 和 "CE" 在 RDF 中的表示可能比简单的 IRI 或空白节点或文字更复杂。例如,class 表达式可能是一个 unionOf 或一个 intersectionOf 等。因此,如果您想添加一个 class 断言公理,您将使用 SPARQL 更新,例如:
INSERT DATA {
indv:individual_name rdf:type ont:SomeClassName.
}
当然,只有当您实际上也声明了个人时才应该这样做(尽管您会发现在实践中并不总是遵循这一点)。所以,总而言之,您可能想要这样的更新:
INSERT DATA {
indv:individual_name rdf:type ont:SomeClassName, owl:NamedIndividual
}
(i) 声明个人,并且 (ii) 断言个人是特定 class 的成员。
我知道要将一个个体(class 的实例)添加到三重存储是使用以下插入语句:
PREFIX indv:<http://someexample.com/blah>
PREFIX ont:<http://someotherexample.com/blah/ontology#>
INSERT DATA
{
indv:individual_name rdf:type ont:SomeClassName.
}
我的问题是:这够了吗?
我问这个是因为我使用 protege 在 owl 文件中添加了一些人,我看到该文件又添加了一个三重:
indv:individual_name rdf:type owl:NamedIndividual.
这个三元组是否也需要插入到三元组存储中? 插入这个三元组有什么好处或有什么缺点?
My question is: is this enough?
在RDF中简单地添加一个class的实例,就足够了。在 RDF 中,资源可以是 classes 的成员,并且由具有 属性 rdf:type.
的三元组表示I am asking this because I added some individuals to an owl file using protege and I saw that the file had one more triple added:
indv:individual_name rdf:type owl:NamedIndividual.
Is it necessary to insert this triple into the triple store as well? What are the benefits for inserting this triple or are there any disadvantages?
OWL 比 RDF 有更多的结构。 OWL 实际上是一种基于公理和断言的逻辑语言。它仍然使用 IRI 作为标识符,并且设计者确保支持 序列化 OWL 本体到 RDF 中。因此,您实际上是在处理 RDF 中 OWL ontology 的序列化。一般来说,您可能会发现官方文档 OWL 2 Web Ontology Language Mapping to RDF Graphs 很有用。
您在 Protege 的输出中看到的实际上是 两个 OWL 公理的序列化。在 OWL 中,您可以声明一个个体而无需指定它所属的任何 classes。你用这样的公理来做到这一点(从上面链接的文档中复制):
Declaration( NamedIndividual( *:a ) )
这被翻译成 RDF 作为三元组:
T(*:a) rdf:type owl:NamedIndividual .
T(*:a) 符号只是意味着无论 *:a 的翻译是什么,它都是三元组的主题。所以 "x rdf:type owl:NamedIndividual" 三元组实际上负责声明“x 是一个个体。也就是说,要声明某物是一个个体,你只需要做:
INSERT DATA { indv:individual_name rdf:type owl:NamedIndivual }
那么如何添加另一种类型(如在原始 SPARQL 更新中那样)?在 OWL 中,你说 "a" 是某个 class 的成员,用 class 表达式表示 "CE",公理为:
ClassAssertion( CE a )
翻译成 RDF 为
T(a) rdf:type T(CE) .
T(a) 和 T(CE) 符号只是表明 "a" 和 "CE" 在 RDF 中的表示可能比简单的 IRI 或空白节点或文字更复杂。例如,class 表达式可能是一个 unionOf 或一个 intersectionOf 等。因此,如果您想添加一个 class 断言公理,您将使用 SPARQL 更新,例如:
INSERT DATA {
indv:individual_name rdf:type ont:SomeClassName.
}
当然,只有当您实际上也声明了个人时才应该这样做(尽管您会发现在实践中并不总是遵循这一点)。所以,总而言之,您可能想要这样的更新:
INSERT DATA {
indv:individual_name rdf:type ont:SomeClassName, owl:NamedIndividual
}
(i) 声明个人,并且 (ii) 断言个人是特定 class 的成员。