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

Ani*_*ima 2 rdf owl protege description-logic swrl

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

\n\n

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

\n\n
\n

Blood_Sugar(?x) \xe2\x88\xa7 hasValue(?x, ?y) \xe2\x88\xa7 swrlb:greaterThan(?y, 126) \xe2\x88\xa7 swrlb:lessThan(?y, 500) \ xe2\x86\x92 hasStatut(?x, "高")

\n
\n\n

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

\n\n
\n

Blood_Sugar(?x) \xe2\x88\xa7 hasStatut(?x, "高") \xe2\x88\xa7 Service(?s) \xe2\x86\x92 triggerService(?x, ?s)

\n
\n\n

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

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

Jos*_*lor 5

\n

但是当我创建实例时,reasonner 并没有给出我想要的结果!

\n
\n\n

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

\n\n

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

\n\n
Blood_Sugar_1 triggerService Service_1\nBlood_Sugar_1 hasStatut "High"^^string\nBlood_Sugar_1 hasStatut "150"^^int\n
Run Code Online (Sandbox Code Playgroud)\n\n

血糖结果

\n\n

虽然 Pellet 能够计算所有这些推论,但 Prot\xc3\xa9g\xc3\xa9 默认情况下仅显示对象属性的推论;您必须进入 Reasoner > 配置\xe2\x80\xa6 菜单,并确保在“显示的单独推论”部分下选中“数据属性断言”选项。我在 Protégé-OWL / SWRL 中对本体属性定义的回答中更详细地描述了打开 Pellet 推理器并设置此选项。

\n\n

推理器配置选项

\n