Some comments on the changes in DAML+OIL

1. Thing is made equal to the union of Nothing and the complement of Nothing. This isn't necessary, but it does give it some built-in semantics.

2. Local cardinality restrictions have been added. These allow both simple and qualified (including a class restriction) restrictions.

3. The semantics of restrictions has been changed to being a necessary and sufficient condition in line with all the other "class constructors" (and, or, not etc.). "Primitive" classes can be specified by adding restrictions with the restrictedBy (or subClassOf) property, while "defined" classes can be specified with the equivalentTo property. e.g.:

<Class ID="Animal">
    <label>Animal</label>
    <restrictedBy>
        <Restriction>
            <onProperty resource="#parent"/>
            <cardinality>2</cardinality>
        </Restriction>
    </restrictedBy>
</Class>
states that all Animals have 2 parents (primitive), while
<Class ID="Animal">
    <label>Animal</label>
    <equivalentTo>
        <Restriction>
            <onProperty resource="#parent"/>
            <cardinality>2</cardinality>
        </Restriction>
    </equivalentTo>
</Class>
states that something is an Animal if and only ifI it has 2 parents (defined). More complex defined classes can be created using the boolean connectives. e.g.:
<Class ID="Human">
    <label>Human</label>
    <intersectionOf parseType="daml:collection">
        <Class about="#Animal"/>
        <Restriction>
            <onProperty resource="#parent"/>
            <hasValue resource="#Human"/>
        </Restriction>
    </intersectionOf>
</Class>
states that something is a Human if and only if it is an Animal that has some Human parent.

4. Cardinality facets on slots have been deleted as they are now redundant and have strange/doubtful semantics. If it is really necessary to add a global cardinality restriction to a property, this can be done by placing a restriction on "Thing":

<Class about="#Thing">
    <restrictedBy>
        <Restriction>
            <onProperty resource="#parent"/>
            <maxCardinality>2</maxCardinality>
        </Restriction>
    </restrictedBy>
</Class>
5. The distinction between restrictions and qualifications has been removed - there are now only restrictions. Having both restrictions and qualifications meant that the domain of "onProperty" had to be the union of the two. This was done by relying on the disputed union semantics for rdfs:domain (although it could have been done by using a  superclass of restriction and qualification).

This isn't an important point as the problems could be solved by using a subClass hierarchy of restriction, qualification and cardinalityQualification. This would allow some finer grained restrictions to be placed on the domains of the restriction properties, if it is deemed to be worth the extra complexity.

6. While DAML-ont generally did a better job of naming classes and properties than OIL, the choices of "toValue" and "hasValue" are not so good: "hasValue" and "hasClass" respectively are better choices. These names reflect more clearly the meaning of the two restrictions. In particular, in the old scheme toValue suggests the same kind of restriction as toClass, which is not the case: toClass is a universal quantification (and is satisfied in the case where there is no relevant property), while toValue insists on the existence of a relevant property (but does not exclude the existence of additional values for the same property). In fact toValue(R, V) is equivalent to {hasValue(R, X), oneOf(X, V)}. To sum up, DAML+OIL implements the following property renamings:

 
DAML
 DAML+OIL
 toValue  hasValue
 hasValue   hasClass
7. "default" was removed due to its lack of semantics.

8. Local namespace equivalents for rdf and rdfs resources are defined, but may compromise portability if used.

$Revision: 1.2 $ of $Date: 2001/01/02 18:56:02 $