File:  [Public] / daml-2000-10 / daml-ont.daml
Revision 1.2: download - view: text, annotated - select for diffs
Tue Nov 14 06:16:00 2000 UTC (23 years, 6 months ago) by connolly
Branches: MAIN
CVS tags: HEAD
retracted bogus implication that
equivalentTo implies subPropertyOf
and subClassOf

cf.

Date: Thu, 12 Oct 2000 14:23:11 +0200
From: Pierre-Antoine CHAMPIN <champin@bat710.univ-lyon1.fr>
mid:39E5AD2F.6F5EFB92@bat710.univ-lyon1.fr
http://lists.w3.org/Archives/Public/www-rdf-logic/2000Oct/0016.html

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns="http://www.daml.org/2000/10/daml-ont#">

<rdf:Description about="">
  <versionInfo>$Id: daml-ont.daml,v 1.2 2000/10/11 06:30:02 connolly Exp $</versionInfo>
  <imports resource="http://www.w3.org/2000/01/rdf-schema"/>
</rdf:Description>

<!-- Terms for building classes from other classes. -->

<Class ID="Thing">
  <label>Thing</label>
  <comment>The most general class in DAML.</comment>
</Class>

<Class ID="Nothing">
  <comment>the class with no things in it.</comment>
  <complementOf resource="#Thing"/>
</Class>

<Property ID="disjointWith">
  <label>disjointWith</label>
  <comment>for disjointWith(X, Y) read: X and Y have no members
	in common.
  </comment>
  <domain resource="#Class"/>
  <range resource="#Class"/>
</Property>

<Class ID="Disjoint">
  <label>Disjoint</label>
  <subClassOf resource="#List"/>
  <comment>for type(L, Disjoint) read: the classes in L are
  pairwise disjoint.

  i.e. if type(L, Disjoint), and C1 in L and C2 in L, then disjointWith(C1, C2).
  </comment>
</Class>

<Property ID="unionOf">
  <label>unionOf</label>
  <comment>
    for unionOf(X, Y) read: X is the union of the classes in the list Y;
    i.e. if something is in any of the classes in Y, it's in X, and vice versa.
    cf OIL OR</comment>
  <domain resource="#Class"/>
  <range resource="#List"/>
</Property>

<Property ID="disjointUnionOf">
  <label>disjointUnionOf</label>
  <domain resource="#Class"/>
  <range resource="#List"/>
  <comment>

    for disjointUnionOf(X, Y) read: X is the disjoint union of the classes in
    the list Y: (a) for any c1 and c2 in Y, disjointWith(c1, c2),
    and (b) i.e. if something is in any of the classes in Y, it's
    in X, and vice versa.

    cf OIL disjoint-covered
  </comment>
</Property>

<Property ID="intersectionOf">
  <comment>
    for intersectionOf(X, Y) read: X is the intersection of the classes in the list Y;
    i.e. if something is in all the classes in Y, then it's in X, and vice versa.
cf OIL AND</comment>
  <domain resource="#Class"/>
  <range resource="#List"/>
</Property>

<Property ID="complementOf">
  <comment>
    for complementOf(X, Y) read: X is the complement of Y; if something is in Y,
    then it's not in X, and vice versa.
cf OIL NOT</comment>
  <domain resource="#Class"/>
  <range resource="#Class"/>
</Property>

<!-- List terminology. -->

<Class ID="List">
  <subClassOf resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq"/>
</Class>

<Property ID="oneOf">
  <comment>for oneOf(C, L) read everything in C is one of the
     things in L;
     This lets us define classes by enumerating the members.
  </comment>
  <domain resource="#Class"/>
  <range resource="#List"/>
</Property>

<Class ID="Empty">
  <asClass resource="#Nothing"/>
</Class>

<Property ID="first">
  <domain resource="#List"/>
</Property>

<Property ID="rest">
  <domain resource="#List"/>
  <range resource="#List"/>
</Property>

<Property ID="item">
  <comment>for item(L, I) read: I is an item in L; either first(L, I)
    or item(R, I) where rest(L, R).</comment>
  <domain resource="#List"/>
</Property>


<!-- facets of properties. -->

<Property ID="cardinality">
  <label>cardinality</label>
  <comment>for cardinality(P, N) read: P has cardinality N; i.e.
    everything x in the domain of P has N things y such that P(x, y).
  </comment>
  <domain resource="#Property"/>
</Property>

<Property ID="maxCardinality">
  <label>maxCardinality</label>
  <comment>for maxCardinality(P, N) read: P has maximum cardinality N; i.e.
    everything x in the domain of P has at most N things y such that P(x, y).
  </comment>
  <domain resource="#Property"/>
</Property>

<Property ID="minCardinality">
  <comment>for minCardinality(P, N) read: P has minimum cardinality N; i.e.
    everything x in the domain of P has at least N things y such that P(x, y).
  </comment>
  <domain resource="#Property"/>
</Property>

<Property ID="inverseOf">
  <comment>for inverseOf(R, S) read: R is the inverse of S; i.e.
     if R(x, y) then S(y, x) and vice versa.</comment>
  <domain resource="#Property"/>
  <range resource="#Property"/>
</Property>

<Class ID="TransitiveProperty"/>

<Class ID="UniqueProperty">
  <label>UniqueProperty</label>
  <comment>compare with maxCardinality=1; e.g. integer successor:
	if P is a UniqueProperty, then
	if P(x, y) and P(x, z) then y=z.
	aka functional.
  </comment>
  <subClassOf resource="#Property"/>
</Class>

<Class ID="UnambiguousProperty">
  <label xml:lang="en">UnambiguousProperty</label>
  <comment>if P is an UnambiguousProperty, then
	if P(x, y) and P(z, y) then x=z.
	aka injective.
	e.g. if nameOfMonth(m, "Feb")
	and nameOfMonth(n, "Feb") then m and n are the same month.
  </comment>
  <subClassOf resource="#Property"/>
</Class>


<!-- Terms for restricting properties of things in classes. -->

<Class ID="Restriction"/>

<Property ID="restrictedBy">
  <label>restrictedBy</label>
  <comment>for restrictedBy(C, R), read: C is restricted by R; i.e. the
	restriction R applies to c;

        if onProperty(R, P) and toValue(R, V)
        then for every i in C, we have P(i, V).

        if onProperty(R, P) and toClass(R, C2)
        then for every i in C and for all j, if P(i, j) then type(j, C2).
  </comment>
  <domain resource="#Class"/>
  <range resource="#Restriction"/>
</Property>

<Property ID="onProperty">
  <comment>for onProperty(R, P), read:
   R is a restriction/qualification on P.</comment>
  <domain resource="#Restriction"/>
  <domain resource="#Qualification"/>
  <range resource="#Property"/>
</Property>

<Property ID="toValue">
  <comment>for toValue(R, V), read: R is a restriction to V.</comment>
  <domain resource="#Restriction"/>
  <range resource="#Class"/>
</Property>

<Property ID="toClass">
  <comment>for toClass(R, C), read: R is a restriction to C.</comment>
  <domain resource="#Restriction"/>
  <range resource="#Class"/>
</Property>

<Class ID="Qualification"/>

<Property ID="qualifiedBy">
  <label>qualifiedBy</label>
  <comment>for qualifiedBy(C, Q), read: C is qualified by Q; i.e. the
	qualification Q applies to C;

        if onProperty(Q, P) and hasValue(Q, C2)
        then for every i in C, there is some V
	so that type(V, C2) and P(i, V).
  </comment>
  <domain resource="#Class"/>
  <range resource="#Qualification"/>
</Property>

<Property ID="hasValue">
  <label>hasValue</label>
  <comment>for hasValue(Q, C), read: Q is a hasValue
   qualification to C.</comment>
  <domain resource="#Qualification"/>
  <range resource="#Class"/>
</Property>


<!-- A class for ontologies themselves... -->

<Class ID="Ontology">
  <label>Ontology</label>
  <comment>An Ontology is a document that describes
	a vocabulary of terms for communication between
	(human and) automated agents.
  </comment>
</Class>

<Property ID="versionInfo">
  <label>versionInfo</label>
  <comment>generally, a string giving information about this
	version; e.g. RCS/CVS keywords
  </comment>
</Property>

<!-- Importing, i.e. assertion by reference -->

<Property ID="imports">
  <label>imports</label>
  <comment>for imports(X, Y) read: X imports Y;
	i.e. X asserts the* contents of Y by reference;
	i.e. if imports(X, Y) and you believe X and Y says something,
	then you should believe it.

	Note: "the contents" is, in the general case,
	an il-formed definite description. Different
	interactions with a resource may expose contents
	that vary with time, data format, preferred language,
	requestor credentials, etc. So for "the contents",
	read "any contents".
  </comment>
</Property>

<!-- Renaming -->

<Property ID="equivalentTo"> <!-- equals? equiv? renames? -->
  <comment>for equivalentTo(X, Y), read X is an equivalent term to Y.
  </comment>

</Property>

<Property ID="sameClassAs">
	<!--@@RDFS specs prohibits cycles, but I don't buy it. -->
  <subPropertyOf resource="#equivalentTo"/>
  <subPropertyOf resource="#subClassOf"/>
</Property>

<Property ID="samePropertyAs">
	<!--@@RDFS specs prohibits cycles, but I don't buy it. -->
  <subPropertyOf resource="#equivalentTo"/>
  <subPropertyOf resource="#subPropertyOf"/>
</Property>

<!-- Importing terms from RDF/RDFS -->

<!-- first, assert the contents of the RDF schema by reference -->
<Ontology about="">
  <imports resource="http://www.w3.org/2000/01/rdf-schema"/>
</Ontology>


<Property ID="subPropertyOf">
  <samePropertyAs  resource="http://www.w3.org/2000/01/rdf-schema#subPropertyOf"/>
  <subPropertyOf resource="http://www.w3.org/2000/01/rdf-schema#subPropertyOf"/>
  <!-- the subPropertyOf is for the benefit of agents that know RDFS
       but don't know DAML. -->
</Property>

<Class ID="Class">
  <sameClassAs resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
</Class>

<Class ID="Literal">
  <sameClassAs resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</Class>

<Class ID="Property">
  <sameClassAs resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
</Class>

<Property ID="type">
  <samePropertyAs resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/>
</Property>

<Property ID="value">
  <samePropertyAs resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#value"/>
</Property>

<Property ID="subClassOf">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#subClassOf"/>
</Property>

<Property ID="domain">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#domain"/>
</Property>

<Property ID="range">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#range"/>
</Property>

<Property ID="label">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#label"/>
</Property>

<Property ID="comment">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#comment"/>
</Property>

<Property ID="seeAlso">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#seeAlso"/>
</Property>

<Property ID="isDefinedBy">
  <samePropertyAs resource="http://www.w3.org/2000/01/rdf-schema#isDefinedBy"/>
  <subPropertyOf resource="#seeAlso"/>
</Property>

<Property ID="default">
  <label>default</label>
  <comment>default(X, Y) suggests that Y be considered a/the default
	value for the X property. This can be considered
	documentation (ala label, comment) but we don't specify
	any logical impact.
  </comment>
</Property>

<!-- from RDF, left out:
	Bag, Alt: why bother? note that we can't import
		the syntax of these into the DAML namespace if we expect
		RDF 1.0 parsers to grok.
	predicate, subject, object, Statement: DAML audience doesn't need quoting.
-->

<!-- from RDFS, left out
	Container: the motivation for this, to somehow denote that other
		element names can be used with the <li> syntax, is busted.
	ContainerMembershipProperty: without the <li> syntax, not much use for this.
	ConstraintResource, ConstraintProperty: I don't grok these.
 -->


</rdf:RDF>

Webmaster