当前位置: 首页 > 知识库问答 >
问题:

具有Protege OWL API的隐士Resoner

张亦
2023-03-14

我使用的是Protege OWL API 4.3(OWL API 3.4.2)。它安装了HermiT Reasoner插件。

我的问题是,无论我对推理器有什么查询,都没有输出,它没有提供任何实例。

这就是我的本体的样子:

    <Ontology xmlns="http://www.w3.org/2002/07/owl#"
 xml:base="http://www.semanticweb.org/sabse/ontologies/2013/11/untitled-ontology-17"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:xml="http://www.w3.org/XML/1998/namespace"
 ontologyIRI="http://www.semanticweb.org/sabse/ontologies/2013/11/untitled-ontology-17">
<Prefix name="" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Declaration>
    <Class IRI="#Person"/>
</Declaration>
<Declaration>
    <Class IRI="#PersonWithPosition1"/>
</Declaration>
<Declaration>
    <DataProperty IRI="#position"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#mary"/>
</Declaration>
<Declaration>
    <NamedIndividual IRI="#peter"/>
</Declaration>
<EquivalentClasses>
    <Class IRI="#PersonWithPosition1"/>
    <ObjectIntersectionOf>
        <Class IRI="#Person"/>
        <DataHasValue>
            <DataProperty IRI="#position"/>
            <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#integer">1</Literal>
        </DataHasValue>
    </ObjectIntersectionOf>
</EquivalentClasses>
<SubClassOf>
    <Class IRI="#PersonWithPosition1"/>
    <Class IRI="#Person"/>
</SubClassOf>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#mary"/>
</ClassAssertion>
<ClassAssertion>
    <Class IRI="#Person"/>
    <NamedIndividual IRI="#peter"/>
</ClassAssertion>
<DataPropertyAssertion>
    <DataProperty IRI="#position"/>
    <NamedIndividual IRI="#mary"/>
    <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#int">1</Literal>
</DataPropertyAssertion>
<DataPropertyAssertion>
    <DataProperty IRI="#position"/>
    <NamedIndividual IRI="#peter"/>
    <Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#int">2</Literal>
</DataPropertyAssertion>
<DataPropertyDomain>
    <DataProperty IRI="#position"/>
    <Class IRI="#Person"/>
</DataPropertyDomain>
<DataPropertyRange>
    <DataProperty IRI="#position"/>
    <Datatype abbreviatedIRI="xsd:int"/>
</DataPropertyRange>
    public class OWLAPIDemoApplication {

public static void main(String[] args) {

    OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

    try {
        OWLOntology ontology;
        File file = new File("ontology.owl");
        ontology = manager.loadOntologyFromOntologyDocument(file);
        System.out.println("Loaded ontology: " + ontology);

        // Create an HermiT reasoner.

        Reasoner reasoner = new Reasoner(ontology);

        OWLDataFactory factory = manager.getOWLDataFactory();

        PrefixManager pm = new DefaultPrefixManager("#");

        // Get reference to the class PersonWithinPosition1
        OWLClass person = factory.getOWLClass(":Person", pm);

        OWLDataProperty position = factory.getOWLDataProperty(":position",
                pm);

        OWLClassExpression query = factory.getOWLObjectIntersectionOf(
                person,
                factory.getOWLDataHasValue(position,
                        factory.getOWLLiteral(1)));

        // Create a fresh name for the query.
        OWLClass newName = factory.getOWLClass(IRI.create("temp001"));

        // Make the query equivalent to the fresh class
        OWLAxiom definition = factory.getOWLEquivalentClassesAxiom(newName,
                query);
        manager.addAxiom(ontology, definition);

        manager.saveOntology(ontology, new SystemOutDocumentTarget());

        reasoner.flush();

        NodeSet<OWLNamedIndividual> w = reasoner
                .getInstances(newName, true);

        Set<OWLNamedIndividual> e;

        for (Node<OWLNamedIndividual> n : w) {

            for (OWLNamedIndividual i : n.getEntities()) {
                System.out.println(i.getIRI().toString());
            }

        }

        // After you are done with the query, you should remove the
        // definition
        manager.removeAxiom(ontology, definition);

        reasoner.dispose();

    } catch (OWLOntologyCreationException | OWLOntologyStorageException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

干杯,S。

共有1个答案

督德明
2023-03-14

您正在手动创建推理器,而不是通过它的工厂。这可能会使它不侦听本体上的更新,因此对reasoner.flush()的调用可能无法工作。尝试使用reasoner.reasonerFactory创建实例,看看这是否解决了您的问题。

另一种可能是代码中的IRI与本体中的IRI不匹配。通过打印出您的虹膜和ontology.getSignature()中的虹膜来确保它们这样做。

编辑:第二种可能性得到确认。我在一个测试中复制了你的本体片段和你的代码。本体中的类IRI有:

<http://www.semanticweb.org/sabse/ontologies/2013/11/untitled-ontology-17#Person>
<http://www.semanticweb.org/sabse/ontologies/2013/11/untitled-ontology-17#PersonWithPosition1>
<#Person>
 类似资料:
  • 如何使用HERMIT reasoner 1.3.8在Java中执行SPARQL查询?我使用的是owlapi 4.2,我使用以下方法加载了HERMIT reasoner: 不幸的是,我找不到任何关于如何使用此推理器执行SPARQL查询的解释?!这可能吗?如果没有,我使用owlapi和SPARQL还有什么其他的可能性(其他原因)? 编辑: 我现在知道我需要一个SPARQL引擎。这就是我这样使用SPAR

  • 我想创建新的推理器(隐士)。 2)使用构造函数:[org.semanticweb.hermit.reasoner]

  • 问题内容: 所以我有我的TagStatus模型。我正在尝试为此制作一个ModelForm。但是,我的表单要求使用{{tag.name}}填充隐藏的输入。我一直在浏览文档,但不知道如何使标记字段成为隐藏的输入。也许ModelForm不是要走的路? models.py: django views.py: 模板: 我将如何通过Django ModelForm进行隐藏输入,然后通过模板进行填充? 问题答案

  • 我通过Protege创建了以下本体。 本体: 我想运行HermiT reasoner获得推断的类层次结构及其解释。 1)[在Ontology中提供] 2)[在Ontology中提供] 我想像Protege一样获取数据。Protege分别显示推断出的公理及其解释。那么如何得到它们呢?(我添加了一些protege的截图供参考) 我的本体: 承担说明:

  • 我正在尝试使用隐式、密码和授权流使用Spring OAuth 2设置一个项目。 当我使用相同的令牌endpoint进行隐式验证和其他两种验证时,出现了我的问题,密码和授权需要基本的身份验证来进行客户端验证,而隐式验证不验证客户端机密,我想使用更加密的登录/密码身份验证来进行用户授权。 因此,根据配置,一个或两个流可以工作。拥有两个endpoint似乎是最简单的解决方案,但我找不到如何实现这一点。