我正在研究 OWL,并尝试使用 Protege 构建本体。
我找到了一个名为 Protege 的选项Equivalent To
。
请问这个选项是做什么用的?是为了划分实例空间吗?或者是设置类可以具有的对象属性?
我对 GitHub 上 Matthew Horridge 的 owlexplanation 项目有疑问。
在README文件中有以下代码:
import org.semanticweb.owl.explanation.api.*;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
OWLReasonerFactory rf = ; // Get hold of a reasoner factory
OWLOntology ont = ; // Reference to an OWLOntology
// Create the explanation generator factory which uses reasoners provided by the specified
// reasoner factory
ExplanationGeneratorFactory<OWLAxiom> genFac = ExplanationManager.createExplanationGeneratorFactory(rf);
// Now create the actual explanation generator for our ontology
ExplanationGenerator<OWLAxiom> gen = genFac.createExplanationGenerator(ont);
// Ask for explanations for some entailment
OWLAxiom entailment ; // …
Run Code Online (Sandbox Code Playgroud) 这个问题是关于本体的,我正在实现一个关于无线传感器作为设备的潜在物理攻击的本体。
我创建了Modification_Attack类,意思是在传感器本身中进行修改的攻击。我创建了Programming_Modification作为此类的实例,这符合逻辑吗?是子类更好还是既不是实例也不是子类更好?
我创建了一个具有不同前缀的本体(rdf、rdfs、owl、example、car、bike……)。我用它们来划分不同的领域和示例。
如何查询所有带有前缀“car”的对象?
先感谢您!
在OWL 2 QL 的 W3C 解释中提到:
特别是,此配置文件(即 OWL 2 QL)包含 RDFS 和 OWL 2 DL 的交集。
这句话让我很困惑,我想知道是否有人可以澄清它。这是否意味着 OWL 2 QL 是 RDFS 的子集?或者这是否意味着它是 RDFS 的更受限制的版本(因此有更多的公理来表达这些限制)。
假设我有一个知识库,其中仅使用以下公理:rdfs:domain、rdfs:range、rdfs:subclassOF、rdf:type、owl:ObjectProperty 和 owl:DatatypeProperty。关于本知识库的语言我能说些什么?我可以说它是用 RDFS、OWL 2 QL 或两者来表达的吗?
是这样的情况吗,如果我看到一个资源既是某个东西的实例(rdf:type)又是一个类,我会说它是 RDFS,如果没有既是实例又是类的资源,我会说它是 RDFS OWL 2 QL 里也有吗?
我有这个java代码,使用apache jena api,查询比萨本体
String queryStr =
"prefix pizza: <" + PIZZA_NS + "> " +
"prefix rdfs: <" + RDFS.getURI() + "> " +
"prefix owl: <" + OWL.getURI() + "> " +
"select ?pizza where {?pizza a owl:Class ; " +
"rdfs:subClassOf ?restriction. " +
"?restriction owl:onProperty pizza:hasTopping ;" +
"owl:someValuesFrom pizza:PeperoniSausageTopping" +
"}";
Query query = QueryFactory.create(queryStr);
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet rs = qe.execSelect();
ArrayList rsList = (ArrayList)ResultSetFormatter.toList(rs);
for(int i=0;i<rsList.size();i++){
out.println(rsList.get(i).toString());
}
Run Code Online (Sandbox Code Playgroud)
它返回:
( ?pizza = …
Run Code Online (Sandbox Code Playgroud) 我创建了一个包含两个类的本体,第一个是命名的Father
,第二个是一个名为的子类Son
.我想使用Jena为类父设置以下条件
只有儿子.
有一些儿子.
然后我会在课堂上做同样的事情Son
:
有一些父亲.
我的第二个问题是我不知道如何使用Jena Son
将类的实例与类相关联Father
.我知道使用Protégé操纵我的课程是可能的,但我想探索耶拿.
我使用隐士推理器和Java加载了Neo4j和Pizza.owl文件.当我通过一个简单的查询:
match (n) where n="name:Pizza" return n;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Don't know how to compare that. Left: Node[1]{name:"owl:Thing"} (NodeProxy); Right: "name:Pizza" (String)
Run Code Online (Sandbox Code Playgroud)
NodeProxy是数据类型吗?我怎样才能让他们两个进行比较.我可以在查询时进行投射吗?是否有任何查询来更改整个图节点的数据类型?如何检查节点的类型?
我正在检查如果实例具有特定谓词的值,则将该值绑定到特定变量,否则,将该变量绑定到整数类型的值1.这是我的代码
select ?boosted where {
:r1 a ?x
optional
{
?item rs:boostedBy ?boostedOptional
bind (if(bound(?boostedOptional), ?boostedOptional, "1"^^xsd:integer) as ?boosted)
}
}
Run Code Online (Sandbox Code Playgroud)
提升的价值总是空的,请看
告诉我为什么?
我认为你不需要数据来测试我的代码无法正常工作的原因,因为对我来说这听起来像是使用绑定的一般错误.但是,如果你想要数据,我会给你数据.
从第一个位置开始没有rs:boostedBy谓词,所以我希望始终保持默认值,在这种情况下,它是1的整数类型.