【问题标题】:Difference in owl:hasValue and owl:oneOf support in Jena's OWLMicroReasoner?Jena 的 OWLMicroReasoner 中 owl:hasValue 和 owl:oneOf 支持的区别?
【发布时间】:2014-01-19 22:32:15
【问题描述】:

我正在使用值限制从其值信息中派生实例类型:

:SpaceMission rdf:type owl:Class .

:shuttleUsed rdf:type owl:ObjectProperty ;         
             rdfs:domain :SpaceMission .

:Apollo11 rdf:type owl:NamedIndividual .

:Mission11 rdf:type :SpaceMission , owl:NamedIndividual ;           
           :shuttleUsed :Apollo11 .

:ApolloMission rdf:type owl:Class ;               
               owl:equivalentClass [ rdf:type owl:Class ;
                                     owl:intersectionOf ( :SpaceMission
                                                          [ rdf:type owl:Restriction ;
                                                            owl:onProperty :shuttleUsed ;
                                                            owl:hasValue :Apollo11
                                                          ]
                                                        )
                                   ] .

单值限制 owl:hasValue 工作正常,:Mission11 类型的 SPARQL 按预期返回 :SpaceMission 和 :ApolloMission。然后我为类:ApolloMission的定义添加第二个值限制:

:Apollo13 rdf:type owl:NamedIndividual .

:ApolloMission rdf:type owl:Class ;
               owl:equivalentClass [ rdf:type owl:Class ;
                                     owl:intersectionOf ( :SpaceMission
                                                          [ rdf:type owl:Restriction ;
                                                            owl:onProperty :shuttleUsed ;
                                                            owl:someValuesFrom [ rdf:type owl:Class ;
                                                                                 owl:oneOf ( :Apollo11
                                                                                             :Apollo13
                                                                                           )
                                                                               ]
                                                          ]
                                                        )
                                   ] .

(限制类型已自动从owl:hasValue 更改为owl:someValuesFrom)。在这种情况下,个人:Mission11 的类型:ApolloMission 的预期推断不会返回,而只会返回:SpaceMission。我有什么问题吗?还是只有owl:hasValue 类型的值限制才能进行类型推断?

我正在使用 Jena 的 OWLMicroReasoner 并运行 SPARQL 查询 {<:Mission11> a ?type}。也许它无法从owl:someValuesFrom 限制中推断出来。正如我所说,owl:hasValue 限制确实适用于 Jena 的微推理器。 Jena 的内置推理器是否支持owl:someValuesFrom 限制?

【问题讨论】:

  • 您查询的怎么样?你在用推理机吗?如果是这样,什么理由?如果没有,你在做什么?
  • 我注意到您提到“单值限制 owl:hasValue 工作正常,并且 SPARQL 类型的 :Mission11 返回 :SpaceMission 和 :ApolloMission 符合预期。”,但您没有向我们展示任何SPARQL 查询,也没有提到您是针对在后台进行推理的商店运行它,还是尝试通过 SPARQL 查询进行一些 OWL 推理。这里没有足够的信息来说明问题是什么,除了它在 OWL 表示中 not ;使用 Protégé 和 Pellet,我已经证明了您在我的答案中寻找的推论。
  • 在对我的回答的评论中,您说“但是使用它的 owl_micro 推理器从耶拿客户端测试它并查询 {<:mission11> a ?type}。可能它无法推断来自 owl:someValuesFrom 限制。正如我所说,owl:hasValue 限制也适用于 jena 的微推理器。你知道 jena 的内置推理器支持 owl:someValuesFrom 限制吗?这是应该包含在原始问题中的非常重要的信息。 Jena 的规则推理器在逻辑上并不完整(这并不意味着它们没有完成,而是它是已知的并且
  • 按照设计,它们无法产生正确的 OWL 推论)。这是基于规则的方法的限制。在 Jena 的基于规则的推理器中,您可以实现一些不同级别的推理,例如,使用微推理器,或更昂贵但更强大的推理器。我会更新我的答案。
  • 你在这方面有什么进展吗?

标签: jena semantic-web owl ontology description-logic


【解决方案1】:

如果您能提供一个完整的本体供我们进行测试,通常会更有帮助。这个不是太大,所以重建起来并不难。无论如何,我已经复制了它,它包含在这个答案的末尾。

推理在 OWL 中有效

您正在寻找的推理在 OWL 中是有效的,我们可以通过使用逻辑上完整的 OWL 推理器(例如 Pellet)来看到这一点。我们将在 Protégé 中看到这一点(但您也可以将 Pellet 与 Jena 一起使用。)这是在 Protégé 中重新创建的本体的样子:

然后,当我们启用 Pellet 推理器并请求 ApolloMission 的实例时,我们得到 Mission11,正如预期的那样:

既然您说您要询问Mission11 的类型,也许您使用了类似询问{Mission11} 的超类的查询。这也会产生预期的类:

再现本体

@prefix :      <http://stackoverflow.com/q/21223545/1281433/space.owl#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix space: <http://stackoverflow.com/q/21223545/1281433/space.owl#> .

<http://stackoverflow.com/q/21223545/1281433/space.owl>
        a       owl:Ontology .

space:Mission11  a         owl:NamedIndividual , space:SpaceMission ;
        space:shuttleUsed  space:Apollo11 .

space:shuttleUsed  a  owl:ObjectProperty ;
        rdfs:domain  space:SpaceMission .

space:Apollo13  a  owl:Thing , owl:NamedIndividual .

space:ApolloMission  a       owl:Class ;
        owl:equivalentClass  [ a                   owl:Class ;
                               owl:intersectionOf  ( space:SpaceMission [ a                   owl:Restriction ;
                                                                          owl:onProperty      space:shuttleUsed ;
                                                                          owl:someValuesFrom  [ a          owl:Class ;
                                                                                                owl:oneOf  ( space:Apollo13 space:Apollo11 )
                                                                                              ]
                                                                        ] )
                             ] .

space:SpaceMission  a  owl:Class .

space:Apollo11  a  owl:Thing , owl:NamedIndividual .

为什么耶拿的推理器没有得到一些结果

耶拿的推理器并不完整。这并不意味着它们还没有完成。 Complete 是形式推理中的一个技术术语,描述推理器(或算法等),这意味着根据推理器不会产生的语言语义存在正确的推理。 Jena 的推理器不完整的原因与实施策略(使用基于规则的推理器)和效率考虑有关(我们可以接受在速度和我们可以获得的推理之间进行权衡)。

有关 Jena 推理器的更多信息,您应该查看文档中的 Reasoners and rule engines: Jena inference support。不过,正如它所说,它并不完全是最新的,例如:

超出 OWL/lite 且不受支持的关键结构 Jena OWL 推理器中的有complementOf 和oneOf。如上所述 对 unionOf 的支持是部分的(由于规则的限制 基于方法),但对于遍历类层次结构很有用。

但是正如下面的代码所示,有,事实上,在一些推理器中支持owl:oneOf,所以一些推理器可以做出你想要的ApolloMission推理。

Jena 提供了许多推理器,获取连接到它们的 OntModel 的最简单方法是使用在 OntModelSpec 中声明的静态 OntModelSpec。以下 Java 代码显示,使用您提供的最终本体,不同的推理器提供不同的结果。 (获取不同 OntModelSpecs 的反射代码有点骇人听闻,但举个简单的例子,这很好。)该代码为每个声明的以“OWL_”开头的规范构造一个 OntModel,并针对它们运行查询。

import java.lang.reflect.Field;

import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class JenaReasonersSpaceExample {
    private final static String QUERY =
            "PREFIX : <http://stackoverflow.com/q/21223545/1281433/space.owl#>\n" +
            "select ?type where {\n" +
            "  :Mission11 a ?type .\n" + 
            "}\n";

    private final static Model base =
            ModelFactory.createDefaultModel()
            .read( "file:///home/taylorj/tmp/ontologies/space/space.owl" );

    public static void main(final String[] args) throws IllegalArgumentException, IllegalAccessException {
        // Iterate through the fields of OntModelSpec and for each one whose name
        // begins with "OWL_", assume that it's a static field (so that getField
        // can accept null), and that its value is an OntModelSpec (so that we 
        // can cast and create an OntModel with it and the base model).
        // that begin with "OWL_", and assume t
        for ( final Field field : OntModelSpec.class.getFields() ) {
            if ( field.getName().startsWith("OWL_") ) {
                final OntModelSpec spec = (OntModelSpec) field.get(null);
                final OntModel model = ModelFactory.createOntologyModel( spec, base );

                // Run the query against the model (that will use the specified reasoner)
                // and show the field that we used and the results that we get.
                System.out.println( "\n=== "+field.getName()+" ===" );
                ResultSetFormatter.out(QueryExecutionFactory.create(QUERY, model).execSelect());
            }
        }
    }
}

输出如下。一些推理者可以推断 Mission11 是 ApolloMission。这些是规范使用的:OWL_MEM_RULE_INFOWL_MEM_MINI_RULE_INFOWL_DL_MEM_RULE_INFOWL_LITE_MEM_RULES_INF。看起来您可能想要坚持使用名称中包含 RULE 的推理器。

=== OWL_MEM ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
------------------------------------------------------------------------

=== OWL_MEM_RDFS_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                      |
------------------------------------------------------------------------

=== OWL_MEM_TRANS_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
------------------------------------------------------------------------

=== OWL_MEM_RULE_INF ===
-------------------------------------------------------------------------
| type                                                                  |
=========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission>  |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                       |
| <http://www.w3.org/2002/07/owl#Thing>                                 |
| _:b0                                                                  |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                       |
| _:b1                                                                  |
| <http://stackoverflow.com/q/21223545/1281433/space.owl#ApolloMission> |
-------------------------------------------------------------------------

=== OWL_MEM_MICRO_RULE_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
| <http://www.w3.org/2002/07/owl#Thing>                                |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                      |
------------------------------------------------------------------------

=== OWL_MEM_MINI_RULE_INF ===
-------------------------------------------------------------------------
| type                                                                  |
=========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission>  |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                       |
| <http://www.w3.org/2002/07/owl#Thing>                                 |
| _:b0                                                                  |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                       |
| _:b1                                                                  |
| <http://stackoverflow.com/q/21223545/1281433/space.owl#ApolloMission> |
-------------------------------------------------------------------------

=== OWL_DL_MEM ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
------------------------------------------------------------------------

=== OWL_DL_MEM_RDFS_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                      |
------------------------------------------------------------------------

=== OWL_DL_MEM_TRANS_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
------------------------------------------------------------------------

=== OWL_DL_MEM_RULE_INF ===
-------------------------------------------------------------------------
| type                                                                  |
=========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission>  |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                       |
| <http://www.w3.org/2002/07/owl#Thing>                                 |
| _:b0                                                                  |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                       |
| <http://stackoverflow.com/q/21223545/1281433/space.owl#ApolloMission> |
| _:b1                                                                  |
-------------------------------------------------------------------------

=== OWL_LITE_MEM ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
------------------------------------------------------------------------

=== OWL_LITE_MEM_TRANS_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
------------------------------------------------------------------------

=== OWL_LITE_MEM_RDFS_INF ===
------------------------------------------------------------------------
| type                                                                 |
========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission> |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                      |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                      |
------------------------------------------------------------------------

=== OWL_LITE_MEM_RULES_INF ===
-------------------------------------------------------------------------
| type                                                                  |
=========================================================================
| <http://stackoverflow.com/q/21223545/1281433/space.owl#SpaceMission>  |
| <http://www.w3.org/2002/07/owl#NamedIndividual>                       |
| <http://www.w3.org/2002/07/owl#Thing>                                 |
| _:b0                                                                  |
| <http://www.w3.org/2000/01/rdf-schema#Resource>                       |
| <http://stackoverflow.com/q/21223545/1281433/space.owl#ApolloMission> |
| _:b1                                                                  |
-------------------------------------------------------------------------

【讨论】:

  • 感谢您的检查,您的本体和我的一模一样。我现在正在学习 protege 并使用 protege 设计了本体,但使用它的 owl_micro 推理器从耶拿客户端对其进行了测试,并查询 {<:mission11> a ?type}。可能是它无法从 owl:someValuesFrom 限制中推断出来。正如我所说,owl:hasValue 限制也适用于耶拿的微推理器。你知道jena 的内置推理器支持 owl:someValuesFrom 限制吗?
  • &lt;:Mission11&gt; a ?type 不是正确的写法;我希望您实际上是在要求:Mission11 a ?type?这里关于 Jena 的信息也很重要,应该包含在问题中,因为这不是一个宽泛的 OWL 推理问题,而是一个关于 Jena 推理器的非常具体的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多