我正在尝试使用本体来实现基于eclipse的应用程序.(我的主题是语义标注).我需要向用户显示本体(作为树)并在本体类和某些模式之间建立链接.
因为我只有基本的编程技能,所以我现在有点不知所措,关于如何设计应用程序...... 1.问题:使用哪些API?我找到了OWL API和Jena API.在其中一篇文章中(是否有任何库可以轻松更改和更新OWL文件?)Michael说"OWLAPI超过Jena.Jena有OWL支持,但它不是为 OWL 设计的,这使得它使用起来有点麻烦."你怎么看?2.此外,还有ProtégéAPI.乍一看,它似乎更适合我,因为它已经提供了一些GUI工具等.但我有点困惑:当试图找到更多信息时,我发现这个http://protegewiki.stanford.edu/wiki/P4APIOverview.在那里它说"正在进行中",但该页面最后一次在2009年更改.如何理解这一点?有没有人与ProtégéAPI合作并可以分享他/她的经历?
非常感谢提前!
我一直在玩Neo4J,以了解使用相关数据是多么容易.到目前为止,我已经与Neo4J社区浏览器合作创建节点并在它们之间建立关系.
我开发了一个使用protege 链接的本体!现在,我有一个巨大的本体文件(.owl文件).我想将它上传到Neo4J来执行查询并找到节点之间的潜在关系.
如果我得到任何帮助,我会很高兴.
谢谢.
我在Protege 4.3.0中创建了一个本体,并存储在一个OWL文件中.为了使用OWL API加载此本体,我使用以下代码示例.
public class MySampleClass {
private final OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
private final OWLDataFactory df = manager.getOWLDataFactory();
private final OWLReasonerFactory rf = new StructuralReasonerFactory();
private final OWLOntology ontology;
private final OWLOntologyID id;
private final IRI iri;
private final PrefixManager pm;
private final OWLReasoner reasoner;
/**
*
* @param file
*/
public MySampleClass(File file) {
try {
ontology = manager.loadOntologyFromOntologyDocument(file);
} catch (OWLOntologyInputSourceException | OWLOntologyCreationException ex) {
// throw custom exception
}
id = ontology.getOntologyID();
iri = …Run Code Online (Sandbox Code Playgroud) 我有一个本体文件,我可以获取其中的所有类(我正在使用 OWL-API)。好吧,我应该检索我的文件 .owl 中存在的每个类、数据属性和对象属性,有什么方法可以使用 OWL-API 获取它们吗?
我可以获得 OWLClass 并访问信息。类和个人都带有前缀。
有什么方法可以去掉前缀吗?
例如:
OWLClass cls = factory.getOWLClass(":Person", pm);
for (OWLIndividual indiv : cls.getIndividuals(onto)) {
System.out.println(indiv.toString());
}
Run Code Online (Sandbox Code Playgroud)
打印:
<http://www.co-ode.org/ontologies/ont.owl#Mon>
<http://www.co-ode.org/ontologies/ont.owl#Dad>
我想要的只是Mon Dad
更新:
谢谢伊格纳齐奥。
我发现关键是getIRI()方法。
for (OWLIndividual indiv : owlclass.getIndividuals(onto)) {
System.out.println(indiv.asOWLNamedIndividual().getIRI().getFragment());
}
for (OWLClassExpression expre : owlclass.getSubClasses(onto)) {
System.out.println(expre.asOWLClass().getIRI().getFragment());
}
Run Code Online (Sandbox Code Playgroud) 我有本体论,其中有另一个本体论.我想知道如何OWLOntologyManager的loadOntologyFromOntologyDocument(OWLOntologyDocumentSource documentSource, OWLOntologyLoaderConfiguration config)内部工作原理.我已经使用OWLOntologyLoaderConfiguration类来处理Missing Imports(想知道在MissingImportListener类的帮助下哪个导入失败).
我能听到丢失的进口.但是,如果我的任何本体文件导入了WEB资源,则上面的方法从其位置获取它.有什么方法可以限制对WEB资源的调用,并要求加载我在系统中的副本吗?
例如,如果BBC的运动本体加载方法在内部加载本体:
就像在Protege中打开BBC的运动本体一样.
在链接的当前文档示例中:https: //github.com/owlcs/owlapi/blob/version5/contract/src/test/java/org/semanticweb/owlapi/examples/Examples.java 没有示例如何从本地文件加载本体.只有一种方法可以从字符串加载它.
在过去,当我使用owl-api版本3时,以下代码完美地运行:
OWLOntologyManager manager =OWLManager.createOWLOntologyManager();
File file = new File (path);
OWLOntology ont = manager.loadOntologyFromOntologyDocument(IRI.create(file));
Run Code Online (Sandbox Code Playgroud)
但是,在此版本中,前一代码的最后一行:
manager.loadOntologyFromOntologyDocument(IRI.create(file));
Run Code Online (Sandbox Code Playgroud)
返回此错误:
Exception in thread "main" java.lang.NoSuchMethodError:
org.semanticweb.owlapi.util.SAXParsers.initParserWithOWLAPIStandards(Lorg/xml/sax/ext/DeclHandler;)Ljavax/xml/parsers/SAXParser;
at
org.semanticweb.owlapi.rdf.rdfxml.parser.RDFParser.parse(RDFParser.java:148)
at org.semanticweb.owlapi.rdf.rdfxml.parser.RDFXMLParser.parse(RDFXMLParser.java:62)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyFactoryImpl.loadOWLOntology(OWLOntologyFactoryImpl.java:173)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.load(OWLOntologyManagerImpl.java:954)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:918)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:859)
at glass.main.ontology_Test_main2.readOntology(ontology_Test_main2.java:49)
at glass.main.ontology_Test_main2.main(ontology_Test_main2.java:38)
Run Code Online (Sandbox Code Playgroud)
请注意附件,一个小测试java项目,链接:
dropbox.com/s/3787a3gsk2bwc26/test.tar.gz?dl=0
请问我做错了什么,我确定这个代码
请您提供正确的方法,并将其添加到链接https://github.com/owlcs/owlapi/blob/version5/contract/src/test/java/org/semanticweb/中的教程示例中owlapi /示例/ Examples.java
非常感谢你花时间陪伴.真诚的问候
根据OWL DL的原始OWL定义,我们不能给一个类和一个人赋予相同的名称(这是OWL DL和OWL Full之间的明显区别)."Punning"在OWL 2中引入并删除了此限制.所以我可以为一个类和一个人(以及一个属性)赋予相同的名称.
OWL是否在语义上将它们视为相同或不同?(两者都有相同的名称,因此它们在语法上是相同的.)这些实体(具有相同的IRI)是同一个吗?[与OWL一样,一切都只与IRI有关]
我使用OWLAPI 4.0.1作为IntelliJ中Maven的全局库.我在网上看到很多关于如何获取类注释的例子(例如这个相关问题中的注释),但IntelliJ告诉我没有这样的getAnnotations()方法.其他API代码工作正常,我能够在本体中找到类和属性.OWLAPI有变化,还是我遗失了什么?
有没有办法让使用推理器的特定班级的所有人?推理因为我想获得该类的所有推断和认定的个体.我正在使用JFact推理器,我正在尝试循环和if语句.我想找到班级的人,例如"人".但我无法看到这些人.有关下面的代码的任何想法或有任何方法为此目的?
for (OWLClass c : myPizza.getClassesInSignature()) {
NodeSet<OWLNamedIndividual> instances = reasoner.getInstances(c, true);
System.out.println(c.getIRI().getFragment());
if (c.getIRI().getFragment().equals("Person")){
for (OWLNamedIndividual i : instances.getFlattened()) {
System.out.println(i.getIRI().getFragment());
}
}
else {
continue;
}
break;
}
Run Code Online (Sandbox Code Playgroud)
谢谢