我想推断一个owl:sameAs使用RDF推理对属性具有相同值的对象之间的关系。
即
推断具有匹配标题的所有对象之间的关系的代码是什么?
另外,当属性不相同时,我可以这样做吗?
即
此致
答案 0 :(得分:0)
您只需声明手头的属性是inverse functional (object) property:
9.2.8 Inverse-Functional Object Properties
对象属性反函数公理 InverseFunctionalObjectProperty(OPE)声明了object属性 表达式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 .
请注意,只有对象属性可以是反函数的(尽管我认为某些reasoners会处理反函数数据类型属性);这意味着你可能需要包装"我上面做的一些值,创建一个IRI个人:ssnXXX-XX-XXX而不是使用字符串" XXX-XX-XXXX"。看到 What's the problem with inverse-functional datatype properties?对于为什么进行了一些讨论。
现在,如果您有两个不同的属性,那么您可以将它们作为某些新属性的子属性,并使新属性反向起作用。例如
: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 .
答案 1 :(得分:0)
您可以尝试使用SILK框架:http://wifo5-03.informatik.uni-mannheim.de/bizer/silk/
我已多次成功使用它来查找owl:sameAs来自不同数据集的实体之间的关系(例如,如果您有一个包含省份的数据集,并且您想要查找来自DBpedia的哪些实体具有相同的省名称)。据我所知,您也可以使用它来匹配同一数据集中的元素。
使用SILK的优点是你有几种算法来比较具有相似值的实体(例如,someTitle,some Title,Sometitle和SOMETITLE将匹配)。您可以使用过滤器来获得所需的结果。唯一的缺点是,如果你降低距离值来比较SILK可以匹配像“some Title”和“som Title”这样的值,这可能是错误的,具体取决于你的用例。