A Top-Level Ontology

Metadata retrieval and reuse is enhanced when metadata providers follow common or interconnected ontologies. Below, we propose a top-level ontology to ease and guide metadata representation and organization. It reuses the classes and properties declared in [RDFMS] and [RDFSchema] and adds about 80 new classes and 120 new relations (properties). Some classes come from the Frame Ontology of Ontolingua [FrameOntol] (not all the classes and relations of this ontology have been reused since many are not relevant to RDF, e.g. n-ary relations with n > 2). Most classes and properties were selected and adapted from works of John Sowa [Sowa84] and completed with classes and relations from various other top-level ontologies (e.g. to a small extent, the CYC top-level ontology and the Generalized Upper Model). Whereas the set of proposed relations can be seen as relatively complete for the representation of most natural language sentences, we have mainly limited the introduction of classes to those required for the signatures of the relations (i.e. to constrain their ranges and domains). The whole file of this top-level ontology is accessible in RDF format and in a more readable format (that is also parsable)

To complete that work on classes, we have also worked on the WordNet lexical database [WN]. First, we have inserted the WordNet top-level classes into our top-level ontology (cf. section 1.2). Second, we have translated this database (plus the top-level ontology) into a 24Mb RDF file (click here for a 4.2Mb gzipped version). A version of this file in also given in the more readable format (click here for a 3.7Mb gzipped version). Third, to search this ontology of 84,000 categories and navigate along the various kinds of relations between them, we have implemented a CGI script and an HTML+Javascript interface to use it. The results are given in RDF or simpler formats.

Following our conventions, we have only used singular nouns for class names and have not introduced inverse relations (e.g. subClass and agentOf have not be introduced since subClassOf and agent are have been declared).

Table of Contents                 (Postscript version:  full text (39 p),  without RDF (15 p))

1. Presentation of the Ontology

We present our top-level ontology via subClassOf hierarchies (and one instanceOf hierarchy) preceded by some comments.

Explanation of the notations in the following subClassOf/instanceOf hierarchies

"(^...^)" are used for annotations
"=" for equivalent resources,
"~" for exclusive classes (i.e. that cannot have common subclasses or instances),
"%" for classes with several superclasses,
"(domain,range)" for signatures of relations,
"ph:" for the terms introduced by this ontology, and
"kif:" for their equivalent in the Frame Ontology of Ontolingua [FrameOntol]

1.1. General Classes

In the upper layers of this ontology (see the next 3 tables), we integrated important distinctions from other top-level ontologies: Concept/Relation [Sowa84] (see Thing/relation here), Entity/Situation [Barwise83][Sowa84], State/Process, SpatialEntity/NonSpatialEntity, DivisibleEntity/UndivisibleEntity (a generalization of the distinction IndividualThing/Collection of the Frame Ontology of Ontolingua [FrameOntol]), LivingEntity/DeadEntity. We added other distinctions, e.g. EntityThatCanBeAlive/EntityThatCannotBeAlive (a refinement of the classic distinction LivingThing/NonLivingThing), Description/DescriptionContainer/Measure.
Such general distinctions permit an easier understanding of the ontology. Furthermore, the conjunction of the exclusive links between the categories, the specialization relations and the relation signatures permit some automatic semantic checking on the ontology update and its use of its terms in statements. For instance, if a class named Observation has been declared as a subclass of DescriptionContent, an RDF engine can check that (i) no statement specifies that an instance of Observation (or its subclasses) is the source of a relation of class relationFromSituation, and (ii) Observation is not subclassed with a class that represents a process (e.g. the class RadioObservation indirect subclass of Process; the exclusion link between Entity and Situation forbids this).
Such constraints may also be exploited for automatic/semi-automatic metadata classification or fusion.

We introduced the class ThingPlayingSomeRole to provide an anchor for the classification of things according to some roles they play (or in other words, according to some viewpoints). Thus, these classes can only be specialized in the context of an application. This is also the case for some other classes, e.g. Event.

Some (meta)classes from [RDFSchema] represent different kinds of classes: rdfs:Class, rdf:Property and rdfs:ConstraintResource. Since a class represents a collection of individual having some common features, we have placed those (meta)classes under Collection (and rdfs:Container too).

The class AttributeOrMeasure permits the classification of attributes or characteristics (e.g. physical characteristics such as mass and color) and measures (e.g. 2 kg, light_weight, red and all time measures such as 2 hours and Precambrian_period). Some knowledge providers often use names of attributes/characteristics (e.g. of physical characteristics such as mass and color) as relation names. This practice would not be a problem if all attributes could be represented as relations and organized into a specialization hierarchy. Unfortunately, after exploring this option with WordNet [WN], we realized that relatively few attributes can be used as relations.

To permit the classification of relation classes (i.e. rdf:Property instances) via subClassOf relations (SubPropertyOf relations in RDF terminology), we introduced the category relation and specialized it with several subcategories: relationFromProperty, relationFromClass, relationFromCollection, relationFromDescription, relationFromSituation, relationFromTimeMeasure, relationFromSpatialEntity, etc. These general relations should ease the retrieval/specialization of the adequate class of relations by people and be useful to them whem building general queries (especially relation). Note: we assume that if a relation class r1 specializes a relation class r2, the domain and range of r1 are equal or specializations of the domain and range of r2.

subClassOf hierarchy of the most general classes   (cf. notation explanations; cf. RDF)
ph:Thing (^anything that is not a relation^)                 ~ ph:relation

   ph:Situation (^thing "occuring" in some region of time and space^)
      ph:State (^situation that is not changing and that does not make a change
                 during a given period of time^)             ~ ph:Process 
      ph:Process (^situation that makes a change during some period of time^)
         ph:Event (^process considered instantaneous from some viewpoint^)
      ph:Phenomenon (^situation known through the senses rather than 
                       by intuition or reasoning^)
     %ph:SituationPlayingSomeRole (^e.g. a causal situation^)

   ph:Entity (^thing that can be "involved" in a situation^) ~ ph:Situation
      ph:SpatialEntity (^space region or thing occupying a space region^)
         ph:Space (^a point or extent in space^)
         ph:PhysicalEntity (^spatial entity made of matter^)
            ph:EntityThatCanBeAlive (^e.g. animal, cell^)
              %ph:LivingEntity (^entity that can and is alive^) ~ ph:DeadEntity
            ph:EntityThatCannotBeAlive (^e.g. bottle^)  ~ ph:EntityThatCanBeAlive
      ph:NonspatialEntity (^e.g. knowledge, measure^)     ~ ph:SpatialEntity
         ph:PsychologicalEntity (^feature/product of mental activity^)
         ph:InformationEntity (^content/element of a description^)
            ph:Description (^description of a situation^)
            ph:DescriptionContainer (^e.g. file, image (but not disk or paper)^)
            ph:AttributeOrMeasure (^e.g. 1 kg, [2-3] hz, blue; measure units^)
      ph:UndivisibleEntity (^from some viewpoints^)  = kif:Individual-Thing 
      ph:DivisibleEntity                                  ~ ph:UndivisibleEntity
         ph:DivisibleEntityWithoutDiscreteParts           ~ ph:CompositeEntity
         ph:CompositeEntity (^divisible entity with discrete parts^)
           %ph:Collection (^to gather separate things^)
               rdfs:Class (^all classes are instance of rdfs:Class^)
               rdf:Property (^all relation classes are instance of rdf:Property^)
     %ph:EntityPlayingSomeRole (^e.g. a causal entity, an agent, an owner^)

   ph:ThingPlayingSomeRole (^to classify things according to roles/viewpoints^)
      ph:ImaginaryThing (^e.g. imaginary situation, fictional character^)
      ph:ThingNeededForSomeProcess (^e.g. something needed for an application^)
     %ph:SituationPlayingSomeRole (^e.g. causal situation^)
     %ph:EntityPlayingSomeRole (^e.g. agent, owner^)

ph:relation (^superclass of relation classes;  instance of rdf:Property^)

subClassOf hierarchy of top-level relation classes   (cf. notation explanations; cf. RDF)
ph:relation (^superclass of relations classes;  instance of rdf:Property^)
   ph:relationFromProperty (rdf:Property,rdfs:Resource)
      rdfs:range (rdf:Property,rdfs:Class)
      rdfs:domain (rdf:Property,rdfs:Class)
      rdfs:subPropertyOf (rdf:Property,rdf:Property)
      ph:inverse (rdf:Property,rdf:Property)  = kif:inverse
   ph:relationFromClass (rdfs:Class,rdfs:Resource)
      rdfs:subClassOf (rdfs:Class,rdfs:Class)
      ph:exclusiveClass (rdfs:Class,rdfs:Class)
   rdfs:comment (rdfs:Resource,rdfs:Literal)  = kif:documentation
   rdfs:isDefinedBy (rdfs:Resource,rdfs:Resource)
      ph:definition (rdfs:Resource,ph:Description)
   rdfs:label (rdfs:Resource,rdfs:Literal)
   rdfs:seeAlso (rdfs:Resource,rdfs:Resource)
   ph:different (rdfs:Resource,rdfs:Resource)
   ph:relationFromCollection (ph:Collection,rdfs:Resource)
   ph:relationToCollection (rdfs:Resource,ph:Collection)
   ph:relationFromDescription (ph:Description,rdfs:Resource)
   ph:relationFromSituation (ph:Situation,rdfs:Resource)
   ph:relationFromTimeMeasure (ph:TimeMeasure,rdfs:Resource)
   ph:relationFromSpatialEntity (ph:SpatialEntity,rdfs:Resource)
   ph:attributiveRelation (rdfs:Resource,rdfs:Resource)
   ph:orderingRelation (rdfs:Resource,rdfs:Resource) (^e.g. rdf:type,
                                   rdfs:subClassOf, ph:part, ph:equal^)

instanceOf hierarchy of some very general classes   (cf. notation explanations; cf. RDF)
rdfs:Class (^all classes are instance of that object^)
   ph:Thing (^everything that can be in a class^)
   ph:Collection (^bounded; can hold / be member of a collection^)
   ph:IndividualThing (^not a bounded collection^)
   ph:Situation (^thing that "occurs" in a region of time and space^)
   ph:Entity (^thing that can be "involved" in a situation^)
   ph:RelationClass (^tuples representing some relationship^)
      rdfs:range (rdfs:Class,rdf:Property)
      rdfs:domain (rdfs:Class,rdf:Property)
   rdf:Property (^all binary relation classes are instance of that object^)
      ph:relation (^superclass of relation classes;  instance of rdf:Property^)

subClassOf hierarchy of information entity classes   (cf. notation explanations; cf. RDF)
ph:InformationEntity (^content/element of a description^)
   ph:Description (^description of a situation^)
      ph:DescriptionContent (^e.g. a narration, an hypothesis^)
      ph:DescriptionMedium (^e.g. a syntax, a language, a script^)
         ph:AbstractDataType (^atomic or structured^)
               ph:Boolean (^two instances: True and False^)
               ph:RDF (^the RDF model^)
               rdf:Statement (^triple {predicate,subject,object}^)
   ph:DescriptionContainer (^e.g. file, image (but not disk or paper)^)
      ph:DocumentElement (^a part of a document^)
         ph:Document (^the entire content of a document^)
   ph:AttributeOrMeasure (^e.g. 1 kg, [2-3] hz, blue; measure units^)
      ph:TimeMeasure (^measure of points or intervals in time^)
      ph:SpatialAttributeAttributeOrMeasure (^e.g. length measure in meters^)
      ph:PhysicalAttributeAttributeOrMeasure (^e.g. mass/length/color measure^)
      ph:PsychologicalAttributeAttributeOrMeasure (^e.g. memory measure^)
      ph:ProcessAttributeAttributeOrMeasure (^e.g. a speed measure in km/h^)
      ph:ModalityMeasure (^e.g. "Never" might be declared as an instance^)

1.2. Insertion of WordNet Top-Level Classes

WordNet is a lexical database relating words (nouns, adjectives, verbs, adverbs) to categories (word meanings) and organizing these categories by various relations, e.g. specialization, exclusion, part, member, subtance. Each word may be related to various categories (one for each of its registered meanings) and conversely. We have inserted the WordNet top-level categories for the meanings of nouns into our top-level ontology. This gives about 66,000 specializations to our top-level classes. Conversely, our top-level ontology adds structuration and constraints to WordNet (e.g. exclusion relations between living entities and inanimate objects). This permits automating checks on statements using these categories or on further specializations. This may also help people to quickly find the meaning of a category in WordNet (this meaning may not be obvious just by looking at the name(s) of the category). We have built a tool for searching or comparing categories in WordNet and our top-level ontology. It is accessible at http://www-sop.inria.fr/acacia/personnel/phmartin/RDF/tsearch.html.

The next table shows how the top-level categories for nouns were inserted in our top-level ontology. Each WordNet category is referred via its unique identifier followed by its names (each prefixed by "__") and the WordNet name space prefix "wn" is left implicit. However, in the RDF code, the names are stored via label properties.
Seven out of the nine WordNet top-level categories for nouns were inserted: wn16185__state, #wn17487__act, #wn17297__event, #wn20461__phenomenon, #wn12865__psychological_feature, #wn17954__group and #wn18376__possession. The other two (wn13018__abstraction and wn1740__entity) were not inserted but their twenty direct subclasses were inserted at various places in our ontology.

subClassOf relations to WordNet classes   (cf. notation explanations)
   wn17297__event (^something that happens at a given place and time^)
      wn16185__state (^the way something is with respect to its main attributes^)
   ph:Phenomenon (^situation known through the senses rather than by reasoning^)
      wn20461__phenomenon (^state or process known through the senses^)

ph:Entity (^thing that can be "involved" in a situation^)
   ph:Spatial_entity (^space region or thing occupying a space region^)
      ph:Space (^point or extent in space^)
         wn15975__space (^the unlimited 3-dimensional expanse^)
      ph:Physical_entity (^spatial entity made of matter^)
         ph:Entity_that_can_be_alive (^e.g. an animal, a cell^)
            wn3095__cell (^the basic structural unit of all organisms^)
         ph:Entity_that_cannot_be_alive (^e.g. a bottle^)
            wn9457__object__physical_object (^a physical entity^)
   ph:Nonspatial_entity (^e.g. knowledge, motivation, language, measure^)
      ph:Psychological_entity (^feature/product of mental activity^)
         wn12865__psychological_feature (^a feature of the mental life^)
      ph:InformationEntity (^content/element of a description^)
            wn18604__attribute (^an abstraction belonging to an entity^)
               wn15594__time (^the continuum of experience^)
      ph:Composite_entity (^divisible entity with discrete parts^)
         wn3614902__whole__whole_thing__unit (^assemblage regarded as a unit^)
         ph:Collection (^something gathering separated things^)
            wn17954__group__grouping (^entities considered as a unit^)
            wn5992373__set (^an abstract collection of numbers or symbols^)
   ph:EntityPlayingSomeRole (^e.g. a causal entity, an agent, an owner^)
         wn6684175__part__piece (^a portion of a natural object^)
         wn6683928__unit__building_block (^a single undivided natural entity^)
      wn18376__possession  (^anything owned or possessed^)
      wn3435902__subject__content__depicted_object (^picture subject^)
      wn6331805__imaginary_place (^a place said to exist in fictional writings^)
      wn6847350__variable (^something that is likely to vary^)
      wn6847052__inessential__nonessential (^anything that is not essential^)
      wn3495843__thing (^an entity that is not named specifically^)
      wn6847525__anticipation (^some entity anticipating a later one^)

  wn18916__relation (^an abstraction belonging to two entities^)

1.3. Container Classes

We introduce some additional classes of containers that are often needed for knowledge representation (e.g. Set which is currently not in [RDFMS] "because the RDF core does not mandate an enforcement mechanism in the event of violations of such constraints").

subClassOf hierarchy of container classes   (cf. notation explanations; cf. RDF)
   rdf:Bag (^duplicate elements are allowed^)  ~ ph:Set
   rdf:Seq (^ordered container^)
   rdf:Alt (^are the alternatives exclusive or inclusive?^)
      ph:OrBag  (^bag of OR-ed elements^)
      ph:XorBag (^bag of exclusive elements^)
   ph:Set (^duplicate elements are not allowed^)
      ph:OrSet  (^set of OR-ed elements^)
      ph:XorSet (^set of exclusive elements^)
   ph:NumberContainer (^number collection^)

1.4. Constrained Relations Classes

Here are represented some mathematical characteristics that relations may have. We have used classes because this is the way it is done in the Frame Ontology of Ontolingua [FrameOntol]. Hence, a property that has one of the listed characteristics must be declared as instance of the relevant class. Alternatively, a property ConstrainedRelation could have been declared as a specialization of relation and further specialized. This is the option we adopted for our ordering relations (Section 1.10).

subClassOf hierarchy for ph:ConstrainedRelation   (cf. notation explanations; cf. RDF)
   ph:AntisymmetricRelationClass = kif:Antisymmetric-Relation
     %ph:AsymmetricRelationClass = kif:Asymmetric-Relation
     %ph:PartialOrderRelationClass = kif:Partial-Order-Relation
         ph:TotalOrderRelationClass = kif:Total-Order-Relation
   ph:IrreflexiveRelationClass = kif:Irreflexive-Relation
     %ph:AsymmetricRelationClass = kif:Asymmetric-Relation
   ph:ReflexiveRelationClass = kif:Reflexive-Relation
     %ph:EquivalenceRelationClass = kif:Equivalence-Relation
     %ph:PartialOrderRelationClass = kif:Partial-Order-Relation
   ph:SymmetricRelationClass = kif:Symmetric-Relation
     %ph:EquivalenceRelationClass = kif:Equivalence-Relation
   ph:TransitiveRelationClass = kif:Transitive-Relation
     %ph:EquivalenceRelationClass = kif:Equivalence-Relation
     %ph:PartialOrderRelationClass = kif:Partial-Order-Relation
   ph:WeakTransitiveRelationClass = kif:Weak-Transitive-Relation
   ph:ManyToManyRelationClass = kif:Many-To-Many-Relation
   ph:ManyToOneRelationClass = kif:Many-To-One-Relation
   ph:OneToManyRelationClass = kif:One-To-Many-Relation

1.5. Relations From/To Collections

Below, we declare some common relations from or to collections. Some of them should have numbers for ranges but we use rdfs:Literal in their signatures for lack of better data types. Subclasses of rdfs:Literal are not recognized by current parsers. The relations minimalSize and maximalSize have a lot of applications. As an illustration, consider the representation in RDF/XML of the sentence "Tom is the creator of 10 to 20 documents, including http://www.foo.org/bar".

<!-- Tom is the creator of 10 to 20 documents, including http://www.foo.org/bar --> <ph:Set rdf:ID="s"><rdf:li rdf:resource="http://www.foo.org/bar"/></ph:Set> <rdf:Description rdf:about="#s"><ph:minimalSize>10</ph:minimalSize> <ph:maximalSize>20</ph:maximalSize> </rdf:Description> <rdf:Description rdf:aboutEach="#s"> <rdf:type rdf:resource="#Document"/> <dc:creator><ph:Person rdf:ID="Tom"/></<dc:creator> </rdf:Description>

subClassOf hierarchy of relations from/to collections   (cf. notation explanations; cf. RDF)
ph:relationFromCollection (ph:Collection,rdfs:Resource)
   ph:member (ph:Collection,rdfs:Resource)
   ph:size (ph:Collection,rdfs:Literal) (^number of elements^)
   ph:minimalSize (ph:Collection,rdfs:Literal)
   ph:maximalSize (ph:Collection,rdfs:Literal)
   ph:percentage (ph:Collection,rdfs:Literal)
   ph:average (ph:NumberContainer,rdfs:Literal) (^an average on the values^)
   ph:subCollection (ph:Collection,ph:Collection)
   ph:overlappingCollection (ph:Collection,ph:Collection)
   ph:notOverlappingCollection (ph:Collection,ph:Collection)
      ph:collectionComplement (ph:Collection,ph:Collection)

ph:relationToCollection (rdfs:Resource,ph:Collection)
   ph:parts (rdfs:Resource,ph:Collection)
   ph:instances (rdfs:Class,ph:Collection)
   ph:subclasses (rdfs:Class,ph:Collection)

1.6. Relations From Descriptions (e.g. Logic Relations)

The concept of description (i.e. statement or "Proposition" in logic) is important since it permits to combine representations or specify when, how and by whom they have been made.

To specify such details about descriptions, we propose the relations authoring, authoringTime, descriptionObject (for stating the object of the description), descriptionSupport (for stating the kind of "document" used), descriptionInstrument (for stating the kind of language or model used). These relations are similar to some of the Dublin Core except they have restricted signatures, which is important for automatic checking/merging/classification.

When relating or combining descriptions, we propose logic relations and argumentation relations. (No particular rhethorical relation is provided because rhethorical relations are too general: the use of the other relations of this ontology lead to more precise representations). Apart from and, logic relations are "contextualizing", i.e. they specify a restricted context in which the descriptions they connect are true. Other contextualizing relations are modality and believer. It is important for an RDF engine to know whether relations on descriptions are contextualizing or not, because contextualized descriptions cannot be used for inference unless the engine knows the semantics of the contextualizing relation(s).
The logical relations or and xor are represented as contextualizing relations. However, we do not think these two relations will be used by the RDF users because the RDF/XML syntax makes it more natural to use rdf:Alt containers (or for more precision, XorBag/OrBag containers) to represent exclusive/inclusive OR links between descriptions.

To express negation, we have introduced the relation truth and declared two instances of the class Boolean: True and False. Tim Berners-Lee also proposes such a relation but also a unary relation not. However, it's use does not seem permitted by the current syntax of RDF/XML.

subClassOf hierarchy of relations from descriptions   (cf. notation explanations; cf. RDF)
ph:relationFromDescription (ph:Description,rdfs:Resource)
   ph:and (ph:Description,ph:Description)
   ph:contextualizingRelation (ph:Description,rdfs:Resource)
      ph:contextualizingLogicalRelation (ph:Description,rdfs:Resource)
         ph:truth (ph:Description,ph:Boolean)
         ph:or (ph:Description,ph:Description)
         ph:xor (ph:Description,ph:Description)
         ph:implication (ph:Description,ph:Description)
            ph:equivalence (ph:Description,ph:Description)
      ph:modality (ph:Description,ph:ModalityMeasure)
      ph:believer (ph:Description,ph:CausalEntity)
   ph:author (ph:Description,ph:CausalEntity)
   ph:authoringTime (ph:Description,ph:TimeMeasure)
   ph:descriptionObject (ph:Description,rdfs:Resource)
   ph:descriptionInstrument (ph:Description,ph:DescriptionMedium)
   ph:descriptionSupport (ph:Description,ph:DescriptionContainer)
   ph:rhetoricalRelation (ph:Description,ph:Description)
   ph:argumentationRelation (ph:Description,ph:Description)
      ph:answer (ph:Description,ph:Description)
      ph:contribution (ph:Description,ph:Description)
      ph:replacement (ph:Description,ph:Description)
      ph:confirmation (ph:Description,ph:Description)
      ph:reference (ph:Description,ph:Description)
      ph:argument (ph:Description,ph:Description)
         ph:weakArgument (ph:Description,ph:Description)
         ph:strongArgument (ph:Description,ph:Description)
            ph:proof (ph:Description,ph:Description)
      ph:contradiction (ph:Description,ph:Description)

Below is an example of the use for the proposed relations. According to [RDFMS], reified RDF statements are instances of rdf:Statement. Since we declared this class as a subclass of ph:Description, this example should not violate relation signatures.

<!-- Tom believes that Mary is the author of htpp://www.w3c.org/foo.htm even though he also believes she is not member of the W3C. --> <ph:Document rdf:bagID="d1" rdf:about="htpp://www.w3c.org/foo.htm"> <ph:author rdf:resource="#Mary"/> </ph:Document> <ph:Organization rdf:bagID="d2" rdf:ID="W3C"> <ph:member rdf:resource="#Mary"/> </ph:Organization> <rdf:Description rdf:bagID="dd2" r