- From: Jim Hendler <hendler@cs.umd.edu>
- Date: Sat, 21 Jun 2003 22:42:57 -0400
- To: Ian Horrocks <horrocks@cs.man.ac.uk>
- Cc: Sean Bechhofer <seanb@cs.man.ac.uk>, <www-webont-wg@w3.org>
At 1:25 PM +0100 6/21/03, Ian Horrocks wrote:
>A modified response taking into account Jim and Sean's comments is
>appended. If this is now OK then I will send it.
>
>Ian
send it.
>
>------------------------------------------------------
>Thank you for your comments.
>
>On May 9, Graham Klyne writes:
>> These are some personal comments that arise out of a review I was asked to
>> do for the RDFcore working group. I must emphasize that they are offered
>> as personal comments, as they do not cover any official RDFcore WG concerns.
>>
>> -----
>>
>> I looked briefly at the abstract syntax section [1] (it actually looks like
>> a quite concrete serialization to me), which does appear to be very well
>> presented, then at section 4.1 [2] of the OWL abstract syntax and semantics
>> document, with a particular view to seeing if I could understand how to do
>> the mapping.
>>
>> I've spent about half a day looking at the "abstract syntax" (it actually
>> looks like a quite concrete serialization to me), and have started to
>> sketch a Haskell [3] implementation of the mapping [see attachment]. I
>> come to the following conclusions:
>>
>> 1. I do believe that I could implement a mapping to RDF based on this
>> description, but with some guesswork.
>>
>> 2. I think the presentation of the mapping leaves something to be
>> desired. I could not have started to grasp what was going on without
>> actually trying to think about the details of an implementation.
>>
>> There was some discussion about the purpose of these transformation
>> rules. From the description given, I think it is to translate OWL AS to an
>> RDF graph, but others have
>> also suggested that they might be used for defining inverse transformation.
>> I don't think the mapping table is well-suited to that purpose.
>
>Please see [1] for a detailed discussion of this issue.
>
>>
>> More detailed comments are below.
>>
>> [1] http://www.w3.org/TR/2003/WD-owl-semantics-20030331/syntax.html
>>
>> [2] http://www.w3.org/TR/2003/WD-owl-semantics-20030331/mapping.html#4.1
>>
>> [3] http://www.haskell.org/
>>
>> -----
>>
>> Concerning section 4:
>> http://www.w3.org/TR/2003/WD-owl-semantics-20030331/mapping.html
>>
>> [[
>> This section defines a many-to-many relationship between
>> abstract syntax ontologies and RDF graphs. This is done using a
>> set of nondeterministic mapping rules.
>> ]]
>>
>> "Non-deterministic"? Scary, if the goal is well-defined
>> semantics.
>>
>> [[
>> The mapping is designed so that any of the RDF/XML graphs that
>> correspond to a particular abstarct ontology have the same
>> meaning, as do any of the abstract ontologies that correspond
>> to a particular RDF/XML graph.
>> ]]
>>
>> Good. How confident can we be that this is so?
>>
>> Why complicate the transformation with options that are not needed?
>> I'd suggest simply deleting the optional elements of the
>> transformation rules, and picking just one of the possible
>> alternative transformations. If there's anything else useful
>> to be said, indicate it separately as additional information,
>> with appropriate commentary.
>
>Again, please see [1] for a detailed discussion of these issues.
>
>>
>> ----
>>
>> Concerning:
>> http://www.w3.org/TR/2003/WD-owl-semantics-20030331/mapping.html#4.1
>>
>> Table row 3:
>>
>> [[
>> Annotation(ontologyPropertyID URIreference)
>> ]]
>>
>> Doesn't obviously match an abstract syntax production.
>> I think the URIreference should be ontologyId.
>>
>> (I recognize these resolve to the same thing, but if one is going
>> to go to the trouble of defining a heap of equivalent symbols, they
>> might at least be used consistently.)
>
>In section 2.1 of S&AS [2] we now have:
>
>ontology ::= 'Ontology(' [ ontologyID ] { directive } ')'
>directive ::= 'Annotation(' ontologyPropertyID ontologyID ')'
> | 'Annotation(' annotationPropertyID URIreference ')'
> | 'Annotation(' annotationPropertyID dataLiteral ')'
> | 'Annotation(' annotationPropertyID individual ')'
> | axiom
> | fact
>
>
>>
>> ----
>>
>> In reading the transformation rules, it is not immediately obvious from
>> the table as presented what parts of the abstract syntax expression
>> are variables that are carried into the transformed expression, but when
>> getting down to the level of trying to code an implementation it seems
>> clear enough what goes where. Some more explicit convention for naming
>> "variables" in the transformation rules might help.
>
>Terminals are indicated by italics.
>
>>
>> ----
>>
>> I *think*, though it's not exactly clear, that the third column
>> indicates what part of the transformed expression to use for the
>> node when T(expr) appears as a node in a triple for a transformed
>> piece of syntax.
>>
>> I think this piece of text:
>> [[
>> The left column of the table gives a piece of syntax (S), the center column
>> gives its transformation (T(S)), and the right column gives an identifier
>> for the main node of the transformation (M(T(S))), but only for syntactic
>> constructs that can occur as pieces of directives.
>> ]]
>> could usefully be expanded. I think something like this is intended:
>>
>> The table has three columns:
>>
>> 1.
>> gives a piece of abstract syntax corresponding to an abstract syntax
>> production rule (with further nonterminal symbols in an italic font)
>>
>> 2.
>> gives a transformation of the abstract syntax into RDF triples, where
>> the triples are presented as N-triples (with qnames for URIs). Within
>> these, further transformations, expressed as T(...), may be used to
>> represent RDF triples, and also to represent individual nodes within
>> such triples.
>>
>> 3.
>> gives a node identifier to be used when a transformation of the
>> corresponding abstract syntax is used as a node within a triple
>> in some other (middle column) transformation expression.
>>
>> The resulting RDF graph contains all of the triples generated by
>> the transformation of a given piece of abstract syntax.
>>
>> (This may not be the best possible description, but I think something at
>> this level of detail would make the intent very much clearer.)
>
>This bit has been changed to
>
>The left column of the <a href="#transformation">table</a> gives a
>piece of <span class="change">abstract</span> syntax (S);
>the center column gives its transformation
><span class="change">into triples</span> (T(S));
>and the right column gives an identifier for the main
>node of the transformation (M(T(S))), for syntactic
>constructs that can occur as pieces of directives.
>
>The new version is available at
>http://www.bell-labs.com/user/pfps/owl/semantics/
>
>The information about how the triples are represented is contained in a
>paragraph shortly after.
>
>
>> ----
>>
>> AFAICT, the mapping table is presented in the same order as the abstract
>> syntax production rules, with a 1:1 correspondence. This is an important
>> clue, which I think would be better if made explicit by (a) labelling the
>> abstract syntax productions, and (b) using those labels to identify the
>> corresponding mapping rules.
>
>There is no strict correspondence between the syntax production and the
>mappings so this labelling would not work out.
>
>>
>> ----
>>
>> I think the handling of the ontology node in the first two rows is not
>> entirely consistent with the treatment later given to other constructs
>> that result in the generation of new blank nodes.
>>
>> (In my implementation sketch, I pass the explicit-or-generated
>> Ontology node as a parameter to the subsequent transformations.)
>
>This is handled by
>
>Bnode identifiers here must be taken as local to each transformation,
>i.e., different identifiers should be used for each invocation of a
>transformation rule.
>Ontologies without a name are given a bnode as their main node;
>ontologies with a name use that name as their main node;
>in both cases this node is referred to as O below.
>
>from just before the translation table.
>
>
>> -----
>>
>> Concerning:
>> http://www.w3.org/TR/2003/WD-owl-semantics-20030331/mapping.html#4.2
>>
>> This gives some rules to determine whether some RDF graph is an Owl-lite or
>> Owl-DL ontology. Presumably anything that doesn't satisfy either of these
>> criteria is Owl-full. But the rules are stated in terms of an AS->Graph
>> transformation, so I'm not sure they constitute an effective procedure for
>> making such a determination.
>
>This document only provides definitions of various parts of OWL. Turning
>these definitions into effective procedures is a task for
>implementors (c.f.the OWL Species Validator, available from the WG
>web page or at [5]).
>
>> There's a point that isn't entirely clear to me:
>> "the ontologies in O taken together provide a type for every
>>individual ID"
>> What about mixtures of arbitrary RDF and OWL ontology statements?
>> Does this mean that every individual must have an explicit type statement?
>> Exactly what counts as an individual for the purposes of this assertion?
>
>The ontologies in O are in abstract syntax, so there is a clear definition
>of what counts as an individual ID.
>
>> It has been my assumption that the various flavours of OWL can be used as a
>> "logical layer" to perform some reasoning about things described by
>> common-or-garden RDF. I've since been told this may not be so. If it is
>> true that Owl DL and Owl-lite are not suitable for doing any reasoning
>> about things described by ordinary "in the wild" RDF, I think this needs to
>> be clearly stated.
>
>This is addressed by the introduction to the OWL Web Ontology
>LanguageOverview [3]. Test also discusses document conformance in some
>detail [4].
>
>> -----
>>
>> For interest, the attachment to this message is the start of a sketch for
>> implementing the (section 4.1) transformation rules in Haskell. The first
>> part of the code is an encoding of the abstract syntax using Haskell data
>> types. The second part are some clauses of a Haskell function "transform"
>> that implements the transformation T described by the mapping table,
>> corresponding to the first 6 rows of the table.
>>
>> The code is far from complete, and hasn't been near a Haskell
>> compiler. But I now think I see enough to complete the implementation.
>>
>> #g
>>
>>
>> -------------------
>> Graham Klyne
>> <GK@NineByNine.org>
>> PGP: 0FAA 69FF C083 000B A2E9 A131 01B9 1C7A DBCA CB5E
>
>
>Please reply to this message as to whether this response is satisfactory,
>copying public-webont-wg@w3.org. Again, thank you for your comments.
>
>Ian Horrocks and Peter Patel-Schneider
>
>[1]
>http://lists.w3.org/Archives/Public/public-webont-comments/2003Jun/0025.html
>[2] http://www.w3.org/TR/2003/WD-owl-semantics-20030331/syntax.html
>[3] http://www.w3.org/TR/owl-features/#s1.3
>[4] http://www.w3.org/2002/03owlt/editors-draft/draft/#conformance
>[5] http://phoebus.cs.man.ac.uk:9999/OWL/Validator
--
Professor James Hendler hendler@cs.umd.edu
Director, Semantic Web and Agent Technologies 301-405-2696
Maryland Information and Network Dynamics Lab. 301-405-6707 (Fax)
Univ of Maryland, College Park, MD 20742 *** 240-277-3388 (Cell)
http://www.cs.umd.edu/users/hendler *** NOTE CHANGED CELL NUMBER ***
Received on Saturday, 21 June 2003 22:43:12 UTC