Ani*_*ima 2 rdf owl protege description-logic swrl
我创建了这个本体,其中包含两个类:血糖和服务。Blood-Sugar有两个数据属性:范围为 xsd:int 的hasValu和范围为 xsd:string 的hasStatut 。对象属性triggerService以“血糖”为域,以“服务”为范围。
\n\n我想用这个规则推断数据属性断言:
\n\n\n\n\nBlood_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\nBlood_Sugar(?x) \xe2\x88\xa7 hasStatut(?x, "高") \xe2\x88\xa7 Service(?s) \xe2\x86\x92 triggerService(?x, ?s)
\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
\n\n\n但是当我创建实例时,reasonner 并没有给出我想要的结果!
\n
在这里提供更多细节会有所帮助。您如何知道推理器(顺便问一下,您使用的是哪个推理器?)没有推断出所需的属性?你启用推理机了吗?您是否运行查询来检查推论是否存在?您是否在 Prot\xc3\xa9g\xc3\xa9 中设置了配置以显示所有适当的推论?
\n\n无论如何,感谢您提供本体来重现您的结果。我能够将其加载到 Prot\xc3\xa9g\xc3\xa9 中,运行 Pellet 推理机,我可以得到以下推论:
\n\nBlood_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虽然 Pellet 能够计算所有这些推论,但 Prot\xc3\xa9g\xc3\xa9 默认情况下仅显示对象属性的推论;您必须进入 Reasoner > 配置\xe2\x80\xa6 菜单,并确保在“显示的单独推论”部分下选中“数据属性断言”选项。我在 Protégé-OWL / SWRL 中对本体属性定义的回答中更详细地描述了打开 Pellet 推理器并设置此选项。
\n\n