Re: OWL Full reasoning

Hi, Hans

I looked a bit to your interesting case and did a simple test
The N3 [1] that follows can be automatically converted to RDF/XML using 
cwm [2]
and cwm is also used as reasoner as well as euler [3] (as Danny mentioned 
:))

The input of the test is the following

##########################################################
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix iso: <http://www.tc184-sc4.org/iso15926/part2/2003-12#> .
@prefix : <hans#>.


### input

:flange_on_pump_P-101 a iso:PhysicalObject.
:flange_on_pipe_A-265-h a iso:PhysicalObject.

:direct_connection a iso:DirectConnection, :R1, :R2;
    :side1 :flange_on_pump_P-101;
    :side2 :flange_on_pipe_A-265-h.

:R1 a owl:Restriction;
    owl:onProperty :side1;
    owl:allValuesFrom iso:PossibleIndividual.

:R2 a owl:Restriction;
    owl:onProperty :side2;
    owl:allValuesFrom iso:PossibleIndividual.


### RDF plus OWL rules
# extending http://eulersharp.sourceforge.net/2003/03swap/rpo-rules.n3

rdfs:subClassOf rdfs:domain rdfs:Class; rdfs:range rdfs:Class; a 
owl:TransitiveProperty.
rdfs:subPropertyOf rdfs:domain rdf:Property; rdfs:range rdf:Property; a 
owl:TransitiveProperty.
owl:inverseOf rdfs:domain owl:ObjectProperty; rdfs:range 
owl:ObjectProperty; a owl:SymmetricProperty.
owl:differentFrom rdfs:domain owl:Thing; rdfs:range owl:Thing; a 
owl:SymmetricProperty.
owl:distinctMembers rdfs:domain owl:AllDifferent; rdfs:range rdf:List.
rdf:first rdfs:domain rdf:List; rdfs:range rdfs:Resource; a 
owl:FunctionalProperty.
rdf:rest rdfs:domain rdf:List; rdfs:range rdf:List; a 
owl:FunctionalProperty.

{?P rdfs:domain ?C. ?S ?P ?O} => {?S a ?C}.
{?P rdfs:range ?C. ?S ?P ?O} => {?O a ?C}.
{?A rdfs:subClassOf ?B. ?S a ?A} => {?S a ?B}.
{?P rdfs:subPropertyOf ?R. ?S ?P ?O} => {?S ?R ?O}.
{?P owl:inverseOf ?Q. ?S ?P ?O} => {?O ?Q ?S}.
{?P a owl:SymmetricProperty. ?S ?P ?O} => {?O ?P ?S}.
{?P a owl:TransitiveProperty. ?X ?P ?O. ?S ?P ?X} => {?S ?P ?O}.
{?P a owl:FunctionalProperty. ?S ?P ?X. ?S ?P ?Y} => {?X = ?Y}.
{?P a owl:InverseFunctionalProperty. ?X ?P ?O. ?Y ?P ?O} => {?X = ?Y}.
{?L rdf:rest ?M. ?A owl:distinctMembers ?L} => {?A owl:distinctMembers 
?M}.
{?L rdf:first ?X; rdf:rest ?M. ?M :item ?Y. ?A owl:distinctMembers ?L} => 
{?X owl:differentFrom ?Y}.
{?C owl:oneOf ?L. ?L :item ?X} => {?X a ?C}.
{?R a owl:Restriction; owl:onProperty ?P; owl:allValuesFrom ?A. ?X ?P ?Y; 
a ?R} => {?Y a ?A}.

{?L rdf:first ?I; a rdf:List} => {?L :item ?I}.
{?L rdf:rest ?R; a rdf:List. ?R :item ?I} => {?L :item ?I}.
##########################################################


and then we ask

##########################################################
@prefix q: <http://www.w3.org/2004/ql#>.
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix iso: <http://www.tc184-sc4.org/iso15926/part2/2003-12#> .
@prefix : <hans#>.

[]
q:select {?X :accordingTo iso:norm};
q:where  {?X a iso:DirectConnection;
             :side1 ?S1;
             :side2 ?S2.
          ?S1 a iso:PhysicalObject, iso:PossibleIndividual.
          ?S2 a iso:PhysicalObject, iso:PossibleIndividual}.
##########################################################


and get as answer

##########################################################
     @prefix : <hans#> .
     @prefix iso: <http://www.tc184-sc4.org/iso15926/part2/2003-12#> .
 
    :direct_connection     :accordingTo iso:norm .
##########################################################

of course, this could also be directly obtained when you take as input
iso:PhysicalObject rdfs:subClassOf iso:PossibleIndividual.
but we wanted to test that iso:PossibleIndividual followed from owl rules
as you can see in the following proof trace

##########################################################
{{:direct_connection a iso:DirectConnection} e:evidence 
<file:/temp/hans.n3#_14>. 
 {:direct_connection :side1 :flange_on_pump_P-101} e:evidence 
<file:/temp/hans.n3#_15>. 
 {:direct_connection :side2 :flange_on_pipe_A-265-h} e:evidence 
<file:/temp/hans.n3#_16>. 
 {:flange_on_pump_P-101 a iso:PhysicalObject} e:evidence 
<file:/temp/hans.n3#_11>. 
 {{:R1 a owl:Restriction} e:evidence <file:/temp/hans.n3#_18>. 
  {:R1 owl:onProperty :side1} e:evidence <file:/temp/hans.n3#_19>. 
  {:R1 owl:allValuesFrom iso:PossibleIndividual} e:evidence 
<file:/temp/hans.n3#_20>. 
  {:direct_connection :side1 :flange_on_pump_P-101} e:evidence 
<file:/temp/hans.n3#_15>. 
  {:direct_connection a :R1} e:evidence <file:/temp/hans.n3#_14>} 
e:sequent {
 {:flange_on_pump_P-101 a iso:PossibleIndividual} e:evidence 
<file:/temp/hans.n3#_50>}. 
 {:flange_on_pipe_A-265-h a iso:PhysicalObject} e:evidence 
<file:/temp/hans.n3#_12>. 
 {{:R2 a owl:Restriction} e:evidence <file:/temp/hans.n3#_22>. 
  {:R2 owl:onProperty :side2} e:evidence <file:/temp/hans.n3#_23>. 
  {:R2 owl:allValuesFrom iso:PossibleIndividual} e:evidence 
<file:/temp/hans.n3#_24>. 
  {:direct_connection :side2 :flange_on_pipe_A-265-h} e:evidence 
<file:/temp/hans.n3#_16>. 
  {:direct_connection a :R2} e:evidence <file:/temp/hans.n3#_14>} 
e:sequent {
 {:flange_on_pipe_A-265-h a iso:PossibleIndividual} e:evidence 
<file:/temp/hans.n3#_50>}} e:sequent {
{:direct_connection :accordingTo iso:norm} e:evidence 
<http://www.w3.org/2002/07/owl#kb>}. 

# Proof found for _:engine_1 in 5732 steps (139770 steps/sec) using 1 
engine (50 triples)
##########################################################


will need some more time to understand more details of your work..
also, when I converted your ontology-for-data-model.rdf into N3
I found a lot of typed literals clashes such as ""^^xsd:nonNegativeInteger
but is definitely interesting work :)

-- 
Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/

[1] http://www.w3.org/2000/10/swap/doc/
[2] http://www.w3.org/2000/10/swap/doc/cwm.html
[3] http://eulersharp.sourceforge.net/





"Hans Teijgeler" <hans.teijgeler@quicknet.nl>
Sent by: semantic-web-request@w3.org
18/08/2005 14:49

 
        To:     <semantic-web@w3.org>
        cc:     (bcc: Jos De_Roo/AMDUS/MOR/Agfa-NV/BE/BAYER)
        Subject:        OWL Full reasoning


Hi,
 
I have worked out an example of a reasoning problem that we have:
http://www.infowebml.ws/topics/RDF-OWL/85-reasoning/example.htm
 
I have the following questions to the OWL community:
1.      Given the fact that this is clearly an implementation of OWL Full, can any 
OWL reasoner handle this at present? 
2.      If not yet, may we realistically expect such a capability to be available 
by the year 2010? 
3.      And if not, why is there OWL Full?
 
Regards,
Hans
 
_______________________ 
Hans Teijgeler
ISO 15926 specialist
www.InfowebML.ws
hans.teijgeler@quicknet.nl
phone +31-72-509 2005 
 

Received on Friday, 19 August 2005 11:59:30 UTC