我想使用 RDF 推理推断具有相同属性值的对象之间的 owl:sameAs 关系。
IE
- object1 dc:title someTitle
- object2 dc:title someTitle
推断具有匹配标题的所有对象之间关系的代码是什么?
另外,当属性不同时我可以这样做吗?
IE
- object1 dc:title someTitle
- object2 rdf:title someTitle
问候
我想使用 RDF 推理推断具有相同属性值的对象之间的 owl:sameAs 关系。
IE
推断具有匹配标题的所有对象之间关系的代码是什么?
另外,当属性不同时我可以这样做吗?
IE
问候
RDF 没有内置大量语义,虽然 RDFS 提供了一些语义,但我认为这两者都不足以让您获得所需的推理。但是,由于您正在寻找创建 owl:sameAs 链接,您可能正在使用 OWL 推理器,在这种情况下,这并不太难,而且在 SPARQL 中也很容易。其余的答案涵盖了这两种情况。
您只需要声明手头的属性是反函数(对象)属性:
9.2.8 反函数对象属性
对象属性逆功能公理 InverseFunctionalObjectProperty(OPE) 表明对象属性表达式 OPE 是逆功能的——也就是说,对于每个单独的 x,最多可以有一个单独的 y,使得 y 通过 OPE 与 x 连接。
一个典型的例子是任何类型的唯一标识符,例如纳税人 ID 号。例如,
ex:hasSSN a owl:InverseFunctionalProperty .
:JohnDoe :hasSSN :ssnXXX-XX-XXXX .
:JDoe :hasSSN :ssnXXX-XX-XXXX .
从这些,我们可以用 OWL 推理推断出
:JohnDoe owl:sameAs :JDoe .
请注意,只有对象属性可以是反函数的(尽管我认为一些推理器会处理反函数数据类型属性);这意味着您可能必须像我上面所做的那样“包装”一些值,创建一个 IRI 个体 :ssnXXX-XX-XXX 而不是使用字符串“XXX-XX-XXXX”。请参阅 反函数数据类型属性有什么问题?关于为什么的一些讨论。
现在,如果您有两个不同的属性,那么您可以将它们都设为某个新属性的子属性,并使新属性反函数。例如
:hasSSN rdfs:subPropertyOf :hasTaxpayerIDOrSSN .
:hasTaxpayerID rdfs:subPropertyOf :hasTaxpayerIDOrSSN .
:hasTaxpayerIDOrSSN a owl:InverseFunctionalProperty .
然后从
:JohnDoe :hasSSN :ssnXXX-XX-XXXX .
:JDoe :hasSSN :ssnXXX-XX-XXXX .
你可以推断
:JohnDoe :hasTaxpayerIDOrSSN :ssnXXX-XX-XXXX .
:JDoe :hasTaxpayerIDOrSSN :ssnXXX-XX-XXXX .
从那,那
:JohnDoe owl:sameAs :JDoe .
在 SPARQL 中,这也很容易。首先,要查询的一些数据:
@prefix : <urn:ex:> .
:JohnDoe :hasSSN :ssnXXX-XX-XXX .
:JDoe :hasSSN :ssnXXX-XX-XXX .
然后我们可以定义一个简单的构造查询:
prefix : <urn:ex:>
prefix owl: <http://www.w3.org/2002/07/owl#>
construct { ?x owl:sameAs ?y }
where { ?z ^:hasSSN ?x, ?y }
@prefix : <urn:ex:> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:JDoe owl:sameAs :JohnDoe , :JDoe .
:JohnDoe owl:sameAs :JohnDoe , :JDoe .
如果你想使用多个属性,你可以在属性路径中使用一个替代。这是数据、查询和结果:
@prefix : <urn:ex:> .
:JohnDoe :hasSSN :ssnXXX-XX-XXX .
:JDoe :hasTaxpayerID :ssnXXX-XX-XXX .
prefix : <urn:ex:>
prefix owl: <http://www.w3.org/2002/07/owl#>
construct { ?x owl:sameAs ?y }
where { ?z ^(:hasSSN|:hasTaxpayerID) ?x, ?y }
@prefix : <urn:ex:> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:JDoe owl:sameAs :JDoe , :JohnDoe .
:JohnDoe owl:sameAs :JDoe , :JohnDoe .
您可以尝试使用 SILK 框架:http ://wifo5-03.informatik.uni-mannheim.de/bizer/silk/
我已经多次成功地使用它来查找来自不同数据集的实体之间的 owl:sameAs 关系(例如,如果您有一个包含省份的数据集,并且您想从 DBpedia 中查找哪些实体具有相同的省份名称)。据我所知,您也可以使用它来匹配来自同一数据集的元素。
使用 SILK 的优点是您有多种算法来比较具有相似值的实体(例如,someTitle、some Title、Sometitle 和 SOMETITLE 将被匹配)。您可以使用过滤器来获得所需的结果。唯一的缺点是,如果您降低距离值来比较 SILK 可能会匹配“some Title”和“som Title”之类的值,根据您的用例,这可能是错误的。