Re: ISSUE-24, ISSUE-21: Versioning language

From: Alan Ruttenberg <alanruttenberg@gmail.com>
Subject: Re: ISSUE-24, ISSUE-21: Versioning language
Date: Fri, 20 Jun 2008 13:12:17 -0400

> On Jun 20, 2008, at 8:07 AM, Peter F. Patel-Schneider wrote:
> 
> > Well, sure, I would like to get this all cleaned up, but I don't think
> > that the recent changes are all going in the right direction.  If you
> > want, I would put together a proposal.
> 
> I think that's a good idea!
> 
> -Alan
> 

OK here are my proposed changes to 3.0 through 3.4

## are comments on changes
-- is a removal
++ is an addition
// is a change, as in // current // proposed



== Ontologies ==

{{EdNote|[[User:IanHorrocks|IanHorrocks]] 01:27, 1 December 2007 (EST)|See [http://www.w3.org/2007/OWL/tracker/issues/21 Issue-21] (import-target-match) and [http://www.w3.org/2007/OWL/tracker/issues/24 Issue-24] (1-version-allowed-policy).}}

The main component of an OWL 2 ontology is the set of axioms that the ontology contains. Because an ontology consists of a set of axioms, an ontology cannot contain two axioms that are structurally equivalent. OWL 2 ontology documents are, however, not expected to enforce this: when reading OWL 2 ontologies stored in documents, an OWL 2 implementation can simply eliminate structurally equivalent duplicate axioms. The structure of axioms is described in more detail in [[#Axioms|Section 8]]. Apart from axioms, ontologies can also contain annotations, and they can import other ontologies as well. The structure of OWL 2 ontologies is shown in Figure 1.

<div class="image">
[[Image:ontology.gif|OWL Ontologies]]<br />
<span class="caption">Figure 1.</span> OWL Ontologies
</div>

<div class="grammar">
<span class="nonterminal">ontologyDocument</span> :=  { <span class="nonterminal">namespace</span> } <span class="nonterminal">Ontology</span><br />
<span class="nonterminal">namespace</span> := 'Namespace' '(' [ <span class="nonterminal">prefix</span> ] '=' <span class="nonterminal">Full-IRI</span> ')'<br />
<span class="nonterminal">ontologyURI</span> := <span class="nonterminal">URI</span><br />
<span class="nonterminal">versionURI</span> := <span class="nonterminal">URI</span><br />
<span class="nonterminal">import</span> := 'Import' '(' <span class="nonterminal">URI</span> ')'<br />
<span class="nonterminal">Ontology</span> :=<br />
&nbsp;&nbsp;&nbsp; 'Ontology' '(' [ <span class="nonterminal">ontologyURI</span> [ <span class="nonterminal">versionURI</span> ] ]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <span class="nonterminal">import</span> }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <span class="nonterminal">Annotation</span> }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <span class="nonterminal">Axiom</span> }<br />
&nbsp;&nbsp;&nbsp; ')'
</div>

The <span class="nonterminal">namespace</span> production defines an abbreviation for namespaces in a document. In each document, only one namespace declaration can exist for a given <span class="nonterminal">prefix</span>. These prefixes are then used to expand abbreviated IRIs as specified in [[#URIs_and_Namespaces|Section 2.2]].

<div class="anexample">
The following is an ontology with 
++ an ontology
URI ''<nowiki>http://example.org/ontology1</nowiki>'' that imports an ontology ''<nowiki>http://example.org/ontology2</nowiki>'' and that contains an ontology annotation that provides a label for the ontology and a single subclass axiom.

<div class="axioms">
Ontology(&lt;''<nowiki>http://example.org/ontology1</nowiki>''&gt;<br />
&nbsp;&nbsp;&nbsp; Import(&lt;''<nowiki>http://example.org/ontology2</nowiki>''&gt;)<br />
&nbsp;&nbsp;&nbsp; Label("The example")<br />
<br />
&nbsp;&nbsp;&nbsp; SubClassOf( ''a:Child'' ''a:Person'' )<br />
)
</div>
</div>

=== Ontology URI and Version URI ===

Each ontology can have an ''ontology URI'', which is used to 
-- uniquely ## uniqueness is not *guaranteed*
identify an ontology. If an ontology has an ontology URI, the ontology can additionally have a ''version URI'', which is used to identify the version of the ontology. The version URI can, but need not be equal to the ontology URI. An ontology without an ontology URI 
// must not // cannot
contain a version URI.

// The uniqueness of the ontology and the version URIs is governed by the following conventions. // To prevent problems with identifying ontologies, the following non-normative guidance is provided:

* If an ontology has an ontology URI but no version URI, then a different ontology with the same ontology URI but no version URI <em title="SHOULD NOT in RFC 2119 context" class="RFC2119">SHOULD NOT</em> exist.
* If an ontology has both an ontology URI and a version URI, then a different ontology with the same ontology URI and the same version URI <em title="SHOULD NOT in RFC 2119 context" class="RFC2119">SHOULD NOT</em> exist.
* All other combinations of the ontology URI and version URI are not required to be unique. For example, two different ontologies are allowed to have no ontology URI and no version URI; similarly, an ontology containing only an ontology URI can coexist with another ontology with the same ontology URI and some other version URI.

This specification provides no mechanism for enforcing these constraints in the entire Web. Rather, the presented rules are to be taken as guidelines when naming new ontologies, and they can be used by OWL 2 tools to detect problems.

The ontology URI and the version URI together identify a particular version from an ''ontology series'' &mdash; the set of all the versions of a particular ontology identified using a common ontology URI. Structurally, a version of a particular ontology is an instance of <span class="nonterminal">Ontology</span> from the structural specification. The structural specification does NOT explicitly contain an object corresponding to the ontology series; therefore, an ontology series is an informal term that exists only as a side-effect of the naming conventions described in this and the following sections.

=== 
-- Physical ## physical is not the word that we should be using to 
Locations of OWL 2 Ontologies ===

The ontology and the version URI, if present, determine the 
-- physical 
location of an ontology ''O'' according to the following rules:

* If ''O'' does not contain an ontology URI (and, consequently, without a version URI as well), then ''O'' may be 
-- physically
located anywhere.
* If ''O'' contains an ontology URI ''ou'' but no version URI, then ''O'' <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be 
-- physically 
located at the location ''ou''.
* If ''O'' contains an ontology URI ''ou'' and a version URI ''vu'', then ''O'' <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be 
-- physically 
located at the location ''vu'' and 
// may, // should, ## to have at least one version be at the ontology URI
in addition, be 
-- physically 
located at the location ''ou'',
++ unless there is another ontology with ontology URI ''ou'' located at ''ou''. ## ditto

Thus, the 
// most recent // current ## the current version may not be the most recent
version of an ontology series with some URI ''ou'' <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be accessed from ''ou''.
-- using a suitable (Internet) protocol. ## this is implicit in the URI
To access a particular version of ''ou'', one must know that version's version URI ''vu''; then, the ontology <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be accessed from ''vu''.
-- using a suitable (Internet) protocol. ## ditto
-- If the document accessed from u contains an ontology URI and optionally, if it contains a version URI, and neither is u, then the importing ontology <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be considered syntactically invalid. ## I don't view this as a syntax problem.  The prior text on locations already makes this an abberant situation.

<div class="anexample">
An ontology ''O'' containing an ontology URI ''<nowiki>http://www.my.com/example</nowiki>'' but no version URI should be 
-- physically 
located at the address ''<nowiki>http://www.my.com/example</nowiki>''. In contrast, an ontology ''O<nowiki>'</nowiki>'' containing an ontology URI ''<nowiki>http://www.my.com/example</nowiki>'' and a version URI ''<nowiki>http://www.my.com/example/2.0/</nowiki>'' should be 
-- physically 
located at the address ''<nowiki>http://www.my.com/example/2.0/</nowiki>''. In both cases, the ontology should be retrievable from the respective addresses using the HTTP protocol.
</div>

OWL 2 tools will often need to implement functionality such as caching or off-line processing, where the 
-- physical 
location of stored ontologies differs from their 
-- permanent ## also not something that should be stated
locations (as dictated by the ontology URI and the version URI). In such cases, OWL 2 
++ tools 
may implement a ''location redirection'' mechanism: when the user requests to open an ontology at location ''u'', the tool can translate ''u'' to a different location ''u<nowiki>'</nowiki>'' and access the ontology from there. The result of parsing the ontology located at ''u<nowiki>'</nowiki>'' must be the same as if the ontology were retrieved from ''u''. Furthermore, once the ontology is parsed, it <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> satisfy the three conditions from the beginning of this section in the same way as if it were retrieved from ''u''. This 
// document // specification
does not specify any particular location redirection mechanisms &mdash; these are assumed to be implementation dependent.

<div class="anexample">
To enable off-line processing, an ontology ''O'' containing an ontology URI ''<nowiki>http://www.my.com/example</nowiki>'' might be stored in a file with a location ''<nowiki>file:/C:/Temp/example.owl</nowiki>''. When opening an ontology with a URI ''<nowiki>http://www.my.com/example</nowiki>'' in an OWL 2 tool, the tool can redirect this URI to ''<nowiki>file:/C:/Temp/example.owl</nowiki>'' and retrieve the ontology from there. The retrieved ontology should satisfy the location constraints: if the ontology contains only the ontology URI, then the ontology URI should be equal to ''<nowiki>http://www.my.com/example</nowiki>'', and if the ontology contains both the ontology and the version URI, then one of them should be equal to ''<nowiki>http://www.my.com/example</nowiki>''.
</div>

=== Versioning of OWL 2 Ontologies ===

The conventions regarding the location of ontologies described in [[#Physical_Locations_of_OWL_2_Ontologies|Section 3.2]] provide a simple mechanism for versioning OWL 2 ontologies. An ontology series is identified using an ontology URI, and each version in the series is assigned a different version URI. The ontology representing the current version of the series <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be 
-- physically
located at ''both'' the ontology URI and its version URI; previous versions are 
-- physically
located solely at their respective version URIs. When a new version ''O'' in the ontology series is created, the ontology ''O'' <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> replace the one located at the ontology URI (and it <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> also be accessible from its version URI).

<div class="anexample">
The current version of an ontology series might be located at a URI ''<nowiki>http://www.my.com/example</nowiki>'', as well as the location ''<nowiki>http://www.my.com/example/2.0/</nowiki>'' for the particular version. When a new version is created, the previous version should remain accessible at ''<nowiki>http://www.my.com/example/2.0/</nowiki>''; the new version, called, say, ''<nowiki>http://www.my.com/example/3.0/</nowiki>'', would be placed at locations ''<nowiki>http://www.my.com/example/</nowiki>'' and ''<nowiki>http://www.my.com/example/3.0/</nowiki>''.
</div>

=== Imports ===

An ontology can import a set of other ontologies in order to gain access to their entities, expressions, and axioms, thus providing for ontology modularization.

<div class="anexample">
Assume that one wants to describe research projects about diseases. Managing information about the projects and the diseases in the same ontology might be cumbersome. Therefore, one might create a separate ontology ''O'' about diseases and a separate ontology ''O<nowiki>'</nowiki>'' about projects. The ontology ''O<nowiki>'</nowiki>'' would import ''O'' in order to gain access to the classes representing diseases; intuitively, this allows one to use the diseases from ''O'' when writing the axioms of ''O<nowiki>'</nowiki>''.
</div>

Figure 1 presents the logical view of the import relation, which holds between two ''ontologies''. In concrete syntaxes, however, the importing ontology only contains a URI identifying the location of the imported ontology. This location <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be interpreted as specified in [[#Physical_Locations_of_OWL_2_Ontologies|Section 3.2]] in order to access the imported ontology.

<div class="anexample">
Assume that an ontology ''O'' 
-- logically ## same reason as for "physically"
imports another ontology ''O<nowiki>'</nowiki>'', which has the ontology URI ''<nowiki>http://www.my.com/example/</nowiki>'' and the version URI ''<nowiki>http://www.my.com/example/2.0/</nowiki>''. In a concrete syntax, ''O'' would contain the location of ''O<nowiki>'</nowiki>''; in the functional-style syntax, ''O'' would be written as follows.

<div class="axioms">
Ontology(&lt;''<nowiki>http://example.org/importing-ontology</nowiki>''&gt;<br />
&nbsp;&nbsp;&nbsp; Import(&lt;''<nowiki>http://www.my.com/example/2.0/</nowiki>''&gt;)<br />
<br />
...<br />
)
</div>

The location of the imported ontology can be redirected, as described in [[#Physical_Locations_of_OWL_2_Ontologies|Section 3.2]]. For example, the ontology ''<nowiki>http://www.my.com/example/2.0/</nowiki>'' might be 
-- physically 
stored at location ''<nowiki>file:/C:/Temp/imported.v20.owl</nowiki>''. Location redirection can thus be used to work with ontologies locally without the need for editing the ontologies and fixing the import relationships between them.
</div>

-- ## This example is unnecessary and misleading.
-- <div class="anexample">
-- The version of the imported ontology ''O<nowiki>'</nowiki>'' is fully determined by the URI occurring in the import specification of the importing ontology ''O''. In the previous example, ''O'' specified a location of a particular version of ''O<nowiki>'</nowiki>''. In contrast, the following ontology imports the most recent version of ''<nowiki>http://www.my.com/example/</nowiki>''.
-- 
-- <div class="axioms">
-- Ontology(&lt;''<nowiki>http://example.org/importing-ontology</nowiki>''&gt;<br />
-- &nbsp;&nbsp;&nbsp; Import(&lt;''<nowiki>http://www.my.com/example/</nowiki>''&gt;)<br />
-- <br />
-- ...<br />
-- )
-- </div>
-- </div>

An ontology ''O'' ''directly imports'' an ontology ''O<nowiki>'</nowiki>'' if ''O'' contains an import construct
// whose value is the ontology URI of ''O<nowiki>'</nowiki>''.  // with URI ''u'' and ''O<nowiki>'</nowiki>''is the ontology located at ''u''. ## Change this to use location-based wording.
The relation ''imports'' is defined as a transitive closure of the relation ''directly imports''. Finally, the ''import closure'' of ''O'' consists of ''O'' and each ontology that ''O'' imports.

// An ontology ''O'' <em title="SHOULD in RFC 2119 context" class="RFC2119">SHOULD</em> be considered syntactically invalid if the import closure of ''O'' contains // The imports closure of an ontology <em title="SHOULD NOT in RFC 2119 context" class="RFC2119">SHOULD NOT</em> contain ## Move to a location-based wording
ontologies ''O<sub>1</sub>'' and ''O<sub>2</sub>'' such that

* ''O<sub>1</sub>'' and ''O<sub>2</sub>'' are different ontology versions from the same ontology series, or
* ''O<sub>1</sub>'' contains an ontology annotation ''owl:incompatibleWith'' with the value equal to either the ontology or the version URI of ''O<sub>2</sub>''.

The ''axiom closure'' of an ontology ''O'' is the smallest set that contains all the axioms from each ontology ''O<nowiki>'</nowiki>'' in the import closure of ''O'' with all anonymous individuals ''renamed apart'' &mdash; that is, the anonymous individuals from different ontologies in the import closure of ''O'' are treated as being different; please refer to [[#Anonymous_Individuals|Section 4.6.2]] for more information.

In OWL 1, ''owl:imports'' was a special ontology property that was used to specify that an ontology imports another ontology. In OWL 2, imports are not ontology annotations, but are a separate primitive; the ''owl:imports'' annotation property has no built-in meaning in OWL 2.

Received on Friday, 20 June 2008 20:11:32 UTC