- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个包含类 Blood_Sugar 的本体该类包含 4 个子类:Normal_BS、High_BS、Low_BS 和 Dangerous_BS。我想在 Protege 3.4.8 上执行一个 SWRL 规则,该规则允许根据值将父类(super class) Blood_Sugar 的个体分类为子类。Blood_Pressure(?x) ∧ hasLevelvalue(?x, ?y) ∧ swrlb:greaterThan(?y, 126) ∧ swrlb:lessThan(?y, 500) → High_BS(?x)知道 hasLevelValue 是一个 DataType 属性,它的域是 Blood_Sugar 类,它的范围是 INT在 Blood_Sugar 类及其子类中,我创建了限制(hasLevelvalue only int)
我创建了一些具有不同值但未归入子类(High_BS、Low_BS...)的个体,swrl 规则没有给出错误但没有给出结果:(我不知道结果如何问题出在哪里?!!!!!!
最佳答案
您的问题有点不清楚,我不确定是否只是打印错误,或者是否存在真正的建模错误。您说您正在查看 Blood_Sugar 类和四个子类,但是您显示的规则以 Blood_Pressure 原子(pressure,而不是 sugar)开始,并且可能是那里的问题:
Blood_Pressure(?x) ∧ hasLevelvalue(?x, ?y) ∧ swrlb:greaterThan(?y, 126) ∧ swrlb:lessThan(?y, 500) → High_BS(?x)
但是,如果这只是问题中的一个错字,那么您可能会遇到数据类型问题。而不是使用 xsd:int
,您可能应该使用 xsd:integer
(这样您就不必担心溢出等问题)更不用说,如果您在数据中使用一个,但以不同的方式声明范围,您可能会在此处遇到不一致。
为了让您继续前进,我在 Protégé 4.x 中重构了您的本体的极小部分,并使用 Pellet 推理器展示了您正在寻找的结果:
我已经在这个答案的末尾包含了 N3 格式的本体。
现在,即使您可以使用 SWRL 规则执行此操作,您也可以使用简单的 OWL 限制类执行此操作,并且 可能 是一个更好的选择,因为它可能 与更多推理者合作。如果不出意外,它会减少一个依赖,因此它可能是一个更有吸引力的解决方案。诀窍是将 Blood_HS 定义为 equivalent 到 Blood_Sugar 与所需范围内的级别的事物的交集,或者您可以使用通用类公理。在这两种情况下,您都可以使用 Pellet 推理器获得所需的结果,并且不需要任何 SWRL 规则。
你可以简单地说(使用我在我的本体中使用的类名):
HighBloodSugar ≡ BloodSugar and (hasLevelValue some integer[>120,<600])
在 Protégé 中看起来有点不同,但非常接近:
现在,如果您不想让它成为等价的类公理,可以使用如下一般公理。
BloodSugar and (hasLevelValue some integer[>120,<600]) ⊑ HighBloodSugar
这只是在 Protégé 中看起来有点不同。这是最接近 SWRL 的版本,因为任何血糖水平在指定范围内的东西都将被归类为高血糖,但仍有可能存在其他高血糖。 (你不会用等效的类公理得到这个。)
@prefix : <http://stackoverflow.com/q/21243879/1281433/blood-pressure.owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix swrl: <http://www.w3.org/2003/11/swrl#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix swrlb: <http://www.w3.org/2003/11/swrlb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix blood-pressure: <http://stackoverflow.com/q/21243879/1281433/blood-pressure.owl#> .
<http://stackoverflow.com/q/21243879/1281433/blood-pressure.owl>
a owl:Ontology .
blood-pressure:HighBloodSugar
a owl:Class .
blood-pressure:bs1 a owl:NamedIndividual , blood-pressure:BloodSugar ;
blood-pressure:hasLevelValue 200 .
<urn:swrl#bp> a swrl:Variable .
<urn:swrl#bs> a swrl:Variable .
blood-pressure:BloodSugar
a owl:Class .
blood-pressure:hasLevelValue
a owl:DatatypeProperty ;
rdfs:domain blood-pressure:BloodSugar ;
rdfs:range xsd:integer .
[ a swrl:Imp ;
swrl:body [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#bs> ;
swrl:classPredicate blood-pressure:BloodSugar
] ;
rdf:rest [ a swrl:AtomList ;
rdf:first [ a swrl:DatavaluedPropertyAtom ;
swrl:argument1 <urn:swrl#bp> ;
swrl:argument2 <urn:swrl#level> ;
swrl:propertyPredicate blood-pressure:hasLevelValue
] ;
rdf:rest [ a swrl:AtomList ;
rdf:first [ a swrl:BuiltinAtom ;
swrl:arguments [ a rdf:List ;
rdf:first <urn:swrl#level> ;
rdf:rest [ a rdf:List ;
rdf:first 126 ;
rdf:rest ()
]
] ;
swrl:builtin swrlb:greaterThan
] ;
rdf:rest [ a swrl:AtomList ;
rdf:first [ a swrl:BuiltinAtom ;
swrl:arguments [ a rdf:List ;
rdf:first <urn:swrl#level> ;
rdf:rest [ a rdf:List ;
rdf:first 500 ;
rdf:rest ()
]
] ;
swrl:builtin swrlb:lessThan
] ;
rdf:rest ()
]
]
]
] ;
swrl:head [ a swrl:AtomList ;
rdf:first [ a swrl:ClassAtom ;
swrl:argument1 <urn:swrl#bs> ;
swrl:classPredicate blood-pressure:HighBloodSugar
] ;
rdf:rest ()
]
] .
<urn:swrl#level> a swrl:Variable .
关于owl - protege 3.4.8 中的 SWRL 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243879/
我正在尝试使用 SWRLAPI 和 OWLAPI 将 SWRL 规则添加到我的本体中。我正在尝试使用与 SWRLAPI 兼容的 OWLAPI 版本。但是,我在创建规则时仍然遇到错误。这似乎是依赖管理的
我正在写一篇关于天气如何影响人们健康(气象病)的毕业论文。本体如图所示:http://dl.dropbox.com/u/5322973/WeatherHealthcast1%20-%20Propert
任何人都可以解释 SWRL 规则的目的。据我了解,SWRL 规则与 SQL 中的存储过程相同。我制定了一些规则,但不知道如何通过查询在我的应用程序中使用它们。我不知道我是否以正确的方式思考 SWRL
我创建了这个本体,其中包含两个类:血糖和服务。 Blood-Sugar 有两个数据属性:hasValu(范围为 xsd:int)和 hasStatut(范围为 xsd:string)。对象属性trig
假设我们有以下规则: Course(?x), teacherOf(?y,?x), worksFor(?y,?z) => coursePresentedInUniversity(?x,?z) pelle
我需要在Protégé中实现一个OWL-ontology,它包含两个类:s1和s2,都是System的实例> 类。这两个类是通过连接类s1_s2 连接起来的,其中包含属性omega。该属性必须根据以下
我目前正在发现 Owlready 库的所有可能性。 现在我正在尝试处理一些 SWRL 规则,到目前为止一切顺利,但我有一点被卡住了。 我已经在我的本体中定义了一些规则,现在我想查看所有结果(因此,一切
protege SWRL选项卡在Protege 4版本中不可用,我已经尝试了protege 4.1和protege 4.2。据说用于在 protege 中编辑 SWRL 规则的 axiome 插件仅适
我正在对基于本体的上下文管理和基于流程的上下文管理进行性能分析。然而,为了创建与 PCM 案例研究类似的场景,我需要在推理过程中直接从 Jena SWRL 规则触发 Java 方法。我做了很多研究,但
我正在处理使用 Protégé 生成的 OWL 文件。我在 Java 代码中使用 OWL API。我有一组定义的类,例如: SpeciesA ⊑ Species ⊓ ∃hasPart.Fruit ⊓
我尝试在java owl-api 中使用swrl 和pellet。我看过: owl2 and swrl tutorial test of builtin swrl in pellet和 swrl de
我创建了一个包含类 Blood_Sugar 的本体该类包含 4 个子类:Normal_BS、High_BS、Low_BS 和 Dangerous_BS。我想在 Protege 3.4.8 上执行一个
我无法找到一些使用 SWRL 和 Jena 的简单代码示例佩莱,或者至少使用 SWRL?我研究了 Pellet 文档中的一些示例,但没有关于使用 SWRL 的示例。网络上的大多数示例都不完整且令人困惑
我已经使用 SWRLAPI 的 SWRLBuiltInBridge 组件完成了此任务: https://github.com/protegeproject/swrlapi/wiki/SWRLBuilt
我不想使用 Protégé 将规则添加到我的本体中,而是想使用 Java 或 pellet 将 SWRL 规则添加到本体中。 例如,这是我要导入到我的本体中的规则: [Course(?x),teach
我的问题是,如果我想检查实例是否在范围内,我使用以下规则: Rule1: Error(?d), TimeRelatedError(?c), TimeRelatedError_start_at(?c,
我正在尝试使用 Jena 框架来编辑使用 Protoge 4.2 构建的现有本体。即更改属性值或添加个人或类别,然后进行推理。假设在本体中我们有这样的规则:hasAge(?p,?age)^swrlb:
什么: 我面临着我所说的问题,但它可能不是。 为了满足某些需求,我通过 OWL API 创建一系列 swrl 规则,这些规则在序列化后将通过简单的文件上传添加到 stardog 存储库中。 出于示例目
我是一名优秀的程序员,十分优秀!