Разница в поддержке owl:hasValue и owl:oneOf в OWLMicroReasoner от Jena?

Я играю с получением типа экземпляра из информации о его значении, используя ограничения значения:

: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 работает нормально, и SPARQL для типа :Mission11 возвращает :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). В этом случае ожидаемый вывод типа :ApolloMission для отдельного :Mission11 не возвращается, а возвращается только :SpaceMission. У меня что-то не так? Или вывод типа возможен только с ограничением значения типа owl:hasValue?

Я использую OWLMicroReasoner< от Jena. /a> и выполнить запрос SPARQL для {<:Mission11> a ?type}. Возможно, он не может сделать вывод из ограничения owl:someValuesFrom. Как я уже сказал, ограничение owl:hasValue действительно работало с микрорассуждениями Джены. Поддерживает ли встроенный в Jena механизм рассуждений ограничение owl:someValuesFrom?


person igorbr    schedule 19.01.2014    source источник
comment
Как вы спрашиваете? Вы используете резонатор? Если да, то какой резонатор? Если нет, то что вы делаете?   -  person Joshua Taylor    schedule 20.01.2014
comment
Я заметил, что вы упоминаете, что ограничение на одно значение owl:hasValue работает нормально, и SPARQL для типа: Mission11 возвращает: SpaceMission и: ApolloMission, как и ожидалось, но вы не показали нам ни одного запроса SPARQL и не упомянули, работаете ли вы это против хранилища, которое имеет вывод в фоновом режиме, или если вы пытаетесь сделать вывод OWL с помощью запросов SPARQL. Здесь еще недостаточно информации, чтобы сказать, в чем проблема, за исключением того, что она не в представлении OWL; используя Protégé и Pellet, я продемонстрировал вывод, который вы ищете в моем ответе.   -  person Joshua Taylor    schedule 20.01.2014
comment
В комментарии к моему ответу вы сказали, но проверили его на клиенте jena, используя его аргументацию owl_micro и запросив {‹:Mission11› a ?type}. Возможно, он не может сделать вывод из ограничения owl:someValuesFrom. Как я уже сказал, ограничение owl:hasValue также работало с микро-резонером jena. Знаете ли вы, какой встроенный механизм рассуждений jena поддерживает ограничение owl:someValuesFrom? Это очень важная информация, которую следовало включить в исходный вопрос. Аргументы по правилам Йены не являются логически завершенными (это не означает, что они не завершены, а скорее известно и   -  person Joshua Taylor    schedule 20.01.2014
comment
по замыслу, что существуют правильные выводы OWL, которые они не смогут произвести). Это ограничение подхода, основанного на правилах. В алгоритмах рассуждений Jena, основанных на правилах, есть несколько различных уровней вывода, которых вы можете достичь, например, используя микрорассуждения или более дорогие, но более мощные алгоритмы рассуждений. Я обновлю свой ответ.   -  person Joshua Taylor    schedule 20.01.2014
comment
Вы добились каких-либо успехов в этом?   -  person Joshua Taylor    schedule 07.02.2014


Ответы (1)


Как правило, более полезно, если вы можете предоставить полную онтологию, с которой мы можем работать для тестирования. Этот не слишком большой, так что воссоздать его было несложно. Во всяком случае, я воспроизвел его, и он включен в конец этого ответа.

Вывод действителен в OWL

Вывод, который вы ищете, действителен в OWL, и мы можем убедиться в этом, используя логически завершенный аргументатор OWL, например, Pellet. Мы увидим это в Protégé (но вы могли бы использовать Pellet и с Jena тоже). Вот как выглядит онтология, воссозданная в Protégé:

важная аксиома класса в Protege

аксиома важного свойства объекта в Protege

Затем, когда мы включаем Pellet Reasoner и запрашиваем экземпляры ApolloMission, мы получаем Mission11, как и ожидалось:

ApolloMission использует Mission11 в качестве экземпляра

Поскольку вы сказали, что запрашиваете типы 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 .

Почему вы не получаете результатов с рассуждениями Йены

Аргументы Джены не являются полными. Это не значит, что они не закончены; полный — это технический термин в формальных рассуждениях, описывающий рассудок (или алгоритм и т. д.), который означает наличие правильных выводов в соответствии с семантикой языка, которые рассудок не произведет. Причина того, что алгоритмы рассуждений Йены неполны, связана со стратегией реализации (использование алгоритма рассуждений на основе правил) и соображениями эффективности (мы можем согласиться на компромисс между скоростью и выводами, которые мы можем получить).

Подробнее о механизмах рассуждений Jena см. в статье Рассуждения и механизмы правил: поддержка выводов Jena от документация. Однако он не совсем актуален, как, например, говорится:

Важнейшие конструкции, выходящие за рамки OWL/lite и не поддерживаемые в ракурсе Jena OWL, — это комплементарность и одна из. Как отмечалось выше, поддержка unionOf является частичной (из-за ограничений подхода, основанного на правилах), но полезна для обхода иерархий классов.

но, как показано в следующем коде, на самом деле имеется поддержка owl:oneOf в некоторых модулях рассуждений, поэтому некоторые из них могут сделать вывод ApolloMission, который вам нужен.

Jena предоставляет ряд аргументов, и самый простой способ получить подключенную к ним OntModel — использовать статические OntModelSpecs, объявленные в OntModelSpec. Следующий код Java показывает, что с предоставленной вами окончательной онтологией разные механизмы рассуждений дают разные результаты. (Рефлексивный код для получения различных спецификаций OntModelSpec немного хакерский, но для быстрого примера он вполне подойдет.) Код создает OntModel для каждой из объявленных спецификаций, начинающихся с «OWL_», и выполняет запрос к ним.

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());
            }
        }
    }
}

Вывод следует. Некоторые рассуждающие могут сделать вывод, что Миссия 11 — это Миссия Аполлона. Это те, которые используются спецификациями: OWL_MEM_RULE_INF, OWL_MEM_MINI_RULE_INF, OWL_DL_MEM_RULE_INF и OWL_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                                                                  |
-------------------------------------------------------------------------
person Joshua Taylor    schedule 19.01.2014
comment
Спасибо за проверку, ваша онтология точно такая же, как моя. Сейчас я изучаю protege и спроектировал онтологию с помощью protege, но протестировал ее на клиенте jena, используя его резонер owl_micro и запрос {‹:Mission11› a ?type}. Возможно, он не может сделать вывод из ограничения owl:someValuesFrom. Как я уже сказал, ограничение owl:hasValue также работало с микро-резонером jena. Знаете ли вы, какой встроенный механизм рассуждений jena поддерживает ограничение owl:someValuesFrom? - person igorbr; 20.01.2014
comment
<:Mission11> a ?type было бы неправильно писать это; Надеюсь, вы на самом деле спрашиваете :Mission11 a ?type? Информация о Йене здесь также очень важна, она должна была быть включена в вопрос, потому что это не широкий вопрос о рассуждениях OWL, а на самом деле очень конкретный вопрос о рассуждениях Йены. - person Joshua Taylor; 20.01.2014