- From: <jos.deroo@agfa.com>
- Date: Fri, 19 Aug 2005 13:59:08 +0200
- To: hans.teijgeler@quicknet.nl
- Cc: semantic-web@w3.org
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