gpt4 book ai didi

rdf - SWRL 规则不会推断新的对象和数据属性断言

转载 作者:行者123 更新时间:2023-12-03 09:25:55 27 4
gpt4 key购买 nike

我创建了这个本体,其中包含两个类:血糖服务Blood-Sugar 有两个数据属性:hasValu(范围为 xsd:int)和 hasStatut(范围为 xsd:string)。对象属性triggerServiceBlood-Sugar为域,以Service为范围。

我想用这个规则推断数据属性断言:

Blood_Sugar(?x) ∧ hasValue(?x, ?y) ∧ swrlb:greaterThan(?y, 126) ∧ swrlb:lessThan(?y, 500) → hasStatut(?x, "High")

然后我想用这个规则推断一个新的对象属性:

Blood_Sugar(?x) ∧ hasStatut(?x, "High") ∧ Service(?s) → triggerService(?x, ?s)

但是,当我创建应应用规则的个体时,推理器并没有给出我想要的结果。这是演示此行为的本体:

<?xml version="1.0"?>


<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY swrl "http://www.w3.org/2003/11/swrl#" >
<!ENTITY swrlb "http://www.w3.org/2003/11/swrlb#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY protege "http://protege.stanford.edu/plugins/owl/protege#" >
<!ENTITY xsp "http://www.owl-ontologies.com/2005/08/07/xsp.owl#" >
<!ENTITY swrla "http://swrl.stanford.edu/ontologies/3.3/swrla.owl#" >
<!ENTITY sqwrl "http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl#" >
]>


<rdf:RDF xmlns="http://www.owl-ontologies.com/Ontology1391620136.owl#"
xml:base="http://www.owl-ontologies.com/Ontology1391620136.owl"
xmlns:swrla="http://swrl.stanford.edu/ontologies/3.3/swrla.owl#"
xmlns:sqwrl="http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#"
xmlns:swrl="http://www.w3.org/2003/11/swrl#"
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<owl:Ontology rdf:about="">
<owl:imports rdf:resource="http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl"/>
<owl:imports rdf:resource="http://swrl.stanford.edu/ontologies/3.3/swrla.owl"/>
</owl:Ontology>
<swrl:Variable rdf:ID="s"/>
<swrl:Variable rdf:ID="x"/>
<swrl:Variable rdf:ID="y"/>
<owl:Class rdf:ID="Blood_Sugar"/>
<swrl:Imp rdf:ID="Rule-2">
<swrl:body>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;ClassAtom"/>
<swrl:argument1>
<rdf:Description rdf:about="#x"/>
</swrl:argument1>
<swrl:classPredicate rdf:resource="#Blood_Sugar"/>
</rdf:Description>
</rdf:first>
<rdf:rest>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;DatavaluedPropertyAtom"/>
<swrl:argument2 rdf:datatype="&xsd;string">High</swrl:argument2>
<swrl:argument1>
<rdf:Description rdf:about="#x"/>
</swrl:argument1>
<swrl:propertyPredicate rdf:resource="#hasStatut"/>
</rdf:Description>
</rdf:first>
<rdf:rest>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;ClassAtom"/>
<swrl:argument1>
<rdf:Description rdf:about="#s"/>
</swrl:argument1>
<swrl:classPredicate rdf:resource="#Service"/>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</swrl:AtomList>
</rdf:rest>
</swrl:AtomList>
</rdf:rest>
</swrl:AtomList>
</swrl:body>
<swrl:head>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;IndividualPropertyAtom"/>
<swrl:argument2>
<rdf:Description rdf:about="#s"/>
</swrl:argument2>
<swrl:argument1>
<rdf:Description rdf:about="#x"/>
</swrl:argument1>
<swrl:propertyPredicate rdf:resource="#triggerService"/>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</swrl:AtomList>
</swrl:head>
</swrl:Imp>
<swrl:Imp rdf:ID="Rule-1">
<swrl:body>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;ClassAtom"/>
<swrl:argument1>
<rdf:Description rdf:about="#x"/>
</swrl:argument1>
<swrl:classPredicate rdf:resource="#Blood_Sugar"/>
</rdf:Description>
</rdf:first>
<rdf:rest>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;DatavaluedPropertyAtom"/>
<swrl:argument2>
<rdf:Description rdf:about="#y"/>
</swrl:argument2>
<swrl:argument1>
<rdf:Description rdf:about="#x"/>
</swrl:argument1>
<swrl:propertyPredicate rdf:resource="#hasValue"/>
</rdf:Description>
</rdf:first>
<rdf:rest>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;BuiltinAtom"/>
<swrl:arguments>
<rdf:List>
<rdf:first>
<rdf:Description rdf:about="#y"/>
</rdf:first>
<rdf:rest>
<rdf:List>
<rdf:first rdf:datatype="&xsd;long">126</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</rdf:List>
</rdf:rest>
</rdf:List>
</swrl:arguments>
<swrl:builtin>
<rdf:Description rdf:about="&swrlb;greaterThan"/>
</swrl:builtin>
</rdf:Description>
</rdf:first>
<rdf:rest>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;BuiltinAtom"/>
<swrl:arguments>
<rdf:List>
<rdf:first>
<rdf:Description rdf:about="#y"/>
</rdf:first>
<rdf:rest>
<rdf:List>
<rdf:first rdf:datatype="&xsd;long">500</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</rdf:List>
</rdf:rest>
</rdf:List>
</swrl:arguments>
<swrl:builtin>
<rdf:Description rdf:about="&swrlb;lessThan"/>
</swrl:builtin>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</swrl:AtomList>
</rdf:rest>
</swrl:AtomList>
</rdf:rest>
</swrl:AtomList>
</rdf:rest>
</swrl:AtomList>
</swrl:body>
<swrl:head>
<swrl:AtomList>
<rdf:first>
<rdf:Description>
<rdf:type rdf:resource="&swrl;DatavaluedPropertyAtom"/>
<swrl:argument2 rdf:datatype="&xsd;string">High</swrl:argument2>
<swrl:argument1>
<rdf:Description rdf:about="#x"/>
</swrl:argument1>
<swrl:propertyPredicate rdf:resource="#hasStatut"/>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="&rdf;nil"/>
</swrl:AtomList>
</swrl:head>
</swrl:Imp>
<Blood_Sugar rdf:ID="Blood_Sugar_1">
<hasValue rdf:datatype="&xsd;int">150</hasValue>
</Blood_Sugar>
<owl:DatatypeProperty rdf:ID="hasStatut">
<rdfs:domain rdf:resource="#Blood_Sugar"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="hasValue">
<rdfs:domain rdf:resource="#Blood_Sugar"/>
<rdfs:range rdf:resource="&xsd;int"/>
</owl:DatatypeProperty>
<owl:Class rdf:ID="Service"/>
<Service rdf:ID="Service_1"/>
<owl:ObjectProperty rdf:ID="triggerService">
<rdfs:domain rdf:resource="#Blood_Sugar"/>
<rdfs:range rdf:resource="#Service"/>
</owl:ObjectProperty>
</rdf:RDF>

最佳答案

But the reasonner does not give me the result that i want when I creat instances !!!

这里提供更多详细信息会有所帮助。您如何知道推理器(顺便问一下,您使用的是哪个推理器?)没有推断出所需的属性?你启用推理机了吗?您是否运行查询来检查推论是否存在?您是否在 Protégé 中设置了配置来显示所有适当的推论?

无论如何,感谢您提供本体来重现您的结果。我能够将其加载到 Protégé 中,运行 Pellet 推理机,我可以得到以下推论:

Blood_Sugar_1 triggerService Service_1
Blood_Sugar_1 hasStatut "High"^^string
Blood_Sugar_1 hasStatut "150"^^int

blood sugar results

虽然 Pellet 能够计算所有这些推论,但 Protégé 默认情况下仅显示对象属性的推论;您必须进入 Reasoner > 配置... 菜单,并确保在“显示的单独推理”部分下选中“数据属性断言”选项。 my answer 中更详细地描述了打开 Pellet Reasoner 并设置此选项。至Ontology property definition in Protégé-OWL / SWRL .

reasoner configuration option

关于rdf - SWRL 规则不会推断新的对象和数据属性断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com