/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Package
///////////////
package org.apache.jena.ontology;
// Imports
///////////////
import java.util.Iterator;
import org.apache.jena.enhanced.* ;
import org.apache.jena.graph.* ;
import org.apache.jena.rdf.model.* ;
/**
* <p>
* Interface that encapsulates the elements of a general vocabulary
* corresponding to a particular ontology language. The intent is that, using
* a given vocabulary, a given RDF model can be processed as an ontology
* description, without binding knowledge of the vocabulary into this Java
* package. For tractability, this limits the vocabularies that can easily be
* represented to those that are similar to OWL and DAML+OIL.
* </p>
*/
public interface Profile
{
// Constants
//////////////////////////////////
// External signature methods
//////////////////////////////////
/**
* <p>
* Answer the string that is the namespace prefix for this vocabulary
* </p>
*
* @return The namespace prefix, for example <code>http://www.w3c.org/2002/07/owl#</code>
*/
public String NAMESPACE();
// Language classes
////////////////////////////////
/**
* <p>
* Answer the resource that represents the class 'class' in this vocabulary.
* </p>
*
* @return The resource that represents the concept of a class
*/
public Resource CLASS();
/**
* <p>
* Answer the resource that represents the a class formed by placing
* constraints (restrictions) on the values of a property.
* </p>
*
* @return The resource that represents the concept of a restriction
*/
public Resource RESTRICTION();
/**
* <p>
* Answer the resource that represents the class all individuals.
* </p>
*
* @return The resource that represents the concept of the <i>top</i> class
*/
public Resource THING();
/**
* <p>
* Answer the resource that represents the necessarily empty class.
* </p>
*
* @return The resource that represents the concept the <i>bottom</i> class.
*/
public Resource NOTHING();
/**
* <p>
* Answer the resource that represents the general class of properties. This will
* typically be <code>rdf:Property</code>.
* </p>
*
* @return The resource that represents the concept of a property.
*/
public Resource PROPERTY();
/**
* <p>
* Answer the resource that represents the class of properties whose range
* elements are individuals (not literals)
* </p>
*
* @return The resource that represents the concept of an object (individual) property.
*/
public Resource OBJECT_PROPERTY();
/**
* <p>
* Answer the resource that represents the class of properties whose range
* elements are literals (not individuals)
* </p>
*
* @return The resource that represents the concept of an object (individual) property.
*/
public Resource DATATYPE_PROPERTY();
/**
* <p>
* Answer the resource that represents the class of properties that apply <i>transitively</i>.
* </p>
*
* @return The resource that represents the concept of a transitive property.
*/
public Resource TRANSITIVE_PROPERTY();
/**
* <p>
* Answer the resource that represents the class of properties that are <i>symmetric</i>.
* </p>
*
* @return The resource that represents the concept of a symmetric property.
*/
public Resource SYMMETRIC_PROPERTY();
/**
* <p>
* Answer the resource that represents the class of properties that are <i>functional</i>,
* i.e. whose range is unique for a given domain element.
* </p>
*
* @return The resource that represents the concept of a functional property.
*/
public Resource FUNCTIONAL_PROPERTY();
/**
* <p>
* Answer the resource that represents the class of properties that are
* <i>inverse functional</i>,
* i.e. whose domain is unique for a given range element.
* </p>
*
* @return The resource that represents the concept of an inverse functional property.
*/
public Resource INVERSE_FUNCTIONAL_PROPERTY();
/**
* <p>
* Answer the resource that represents the class of axioms denoting that a set of
* individuals are pairwise distinct.
* </p>
*
* @return The resource that represents the concept of an all-different axiom.
*/
public Resource ALL_DIFFERENT();
/**
* <p>
* Answer the resource that represents the class of ontology header elements. Individuals
* of this class typically associate meta-data about an ontology document with the
* classes and properties in the document.
* </p>
*
* @return The resource that represents the concept of an ontology header element.
*/
public Resource ONTOLOGY();
/**
* <p>
* Answer the resource that represents the documentation class of deprecated
* classes. Belonging to this class is a hint to developers that a given class
* has been superceded in a later revision of the ontology.
* </p>
*
* @return The resource that represents the concept of a deprecated class.
*/
public Resource DEPRECATED_CLASS();
/**
* <p>
* Answer the resource that represents the documentation class of deprecated
* properties. Belonging to this class is a hint to developers that a given property
* has been superceded in a later revision of the ontology.
* </p>
*
* @return The resource that represents the concept of a deprecated property.
*/
public Resource DEPRECATED_PROPERTY();
/**
* <p>
* Answer the class that denotes an annotation property
* </p>
*
* @return The AnnotationProperty class
*/
public Resource ANNOTATION_PROPERTY();
/**
* <p>
* Answer the class that denotes an ontology property
* </p>
*
* @return The OntologyProperty class
*/
public Resource ONTOLOGY_PROPERTY();
/**
* <p>
* Answer the class that defines a closed range of concrete data values.
* </p>
* @return The DataRange class
*/
public Resource DATARANGE();
/**
* <p>
* Answer the predicate that denotes that one property has the same property
* extension as another.
* </p>
*
* @return The property that denotes equivalence between two property resources.
*/
public Property EQUIVALENT_PROPERTY();
/**
* <p>
* Answer the predicate that denotes that one class has the same extension as another.
* </p>
*
* @return The property that denotes equivalence between two class expressions.
*/
public Property EQUIVALENT_CLASS();
/**
* <p>
* Answer the predicate that denotes that one class has no individuals in its
* extension in common with another class.
* </p>
*
* @return The property that denotes disjointness between two class expressions.
*/
public Property DISJOINT_WITH();
/**
* <p>
* Answer the predicate that denotes that one resource represents the same
* individual as another.
* </p>
*
* @return The property that denotes equivalence between two resources denoting
* individuals.
*/
public Property SAME_INDIVIDUAL_AS();
/**
* <p>
* Answer the predicate that denotes that one resource represents the same
* ontology object as another.
* </p>
*
* @return The property that denotes equivalence between two resources.
*/
public Property SAME_AS();
/**
* <p>
* Answer the predicate that denotes that one resource represents a different
* individual than another resource.
* </p>
*
* @return The property that denotes distinctness between two individuals.
*/
public Property DIFFERENT_FROM();
/**
* <p>
* Answer the predicate that maps from an {@link #ALL_DIFFERENT}
* axiom to the set of individuals that are pair-wise different from
* each other.
* </p>
*
* @return The property that introduces a list of individuals that are distinct.
*/
public Property DISTINCT_MEMBERS();
/**
* <p>
* Answer the predicate that denotes that one class is formed from the union
* (disjunction) of a set of others.
* </p>
*
* @return The property that denotes a class defined by a union of class expressions.
*/
public Property UNION_OF();
/**
* <p>
* Answer the predicate that denotes that one class is formed from the intersection
* (conjunction) of a set of others.
* </p>
*
* @return The property that denotes a class defined by an intersection of class expressions.
*/
public Property INTERSECTION_OF();
/**
* <p>
* Answer the predicate that denotes that one class comprises the individuals that are
* not in a second class.
* </p>
*
* @return The property that denotes a class defined by the complement of a class expression.
*/
public Property COMPLEMENT_OF();
/**
* <p>
* Answer the predicate that denotes that a class comprises exactly one of a given
* closed set individuals.
* </p>
*
* @return The property that denotes a class defined its members being one of a give set.
*/
public Property ONE_OF();
/**
* <p>
* Answer the predicate that maps from a {@link #RESTRICTION} to a property that it is
* a restriction on.
* </p>
*
* @return The property that denotes a property that a restriction applies to.
*/
public Property ON_PROPERTY();
/**
* <p>
* Answer the predicate that denotes a restriction on a given property to
* have only values from the given class expression.
* </p>
*
* @return The property that denotes a local property range restriction.
*/
public Property ALL_VALUES_FROM();
/**
* <p>
* Answer the predicate that denotes a restriction on a given property to
* have a given value.
* </p>
*
* @return The property that denotes a local property value restriction.
*/
public Property HAS_VALUE();
/**
* <p>
* Answer the predicate that denotes a restriction on a given property to
* have at least one value from the given class expression.
* </p>
*
* @return The property that denotes a local property range restriction.
*/
public Property SOME_VALUES_FROM();
/**
* <p>
* Answer the predicate that denotes a restriction on a given property to
* have at least a certain number of values
* </p>
*
* @return The property that denotes a local property cardinality lower bound.
*/
public Property MIN_CARDINALITY();
/**
* <p>
* Answer the predicate that denotes a restriction on a given property to
* have at most a certain number of values
* </p>
*
* @return The property that denotes a local property cardinality upper bound.
*/
public Property MAX_CARDINALITY();
/**
* <p>
* Answer the predicate that denotes a restriction on a given property to
* have exactly a certain number of values
* </p>
*
* @return The property that denotes a local property cardinality.
*/
public Property CARDINALITY();
/**
* <p>
* Answer the predicate that denotes a qualified restriction on a given property to
* have at least a certain number of values
* </p>
*
* @return The property that denotes a local property cardinality lower bound.
*/
public Property MIN_CARDINALITY_Q();
/**
* <p>
* Answer the predicate that denotes a qualified restriction on a given property to
* have at most a certain number of values
* </p>
*
* @return The property that denotes a local property cardinality upper bound.
*/
public Property MAX_CARDINALITY_Q();
/**
* <p>
* Answer the predicate that denotes a qualified restriction on a given property to
* have exactly a certain number of values
* </p>
*
* @return The property that denotes a local property cardinality.
*/
public Property CARDINALITY_Q();
/**
* <p>
* Answer the predicate that denotes a the class in a qualified restriction.
* </p>
*
* @return The property that denotes the class of all values in a qualified restriction.
*/
public Property HAS_CLASS_Q();
/**
* <p>
* Answer the predicate that denotes that one property is the inverse of another
* </p>
*
* @return The property that denotes the inverse relationship between properties
*/
public Property INVERSE_OF();
/**
* <p>
* Answer the predicate that denotes that one ontology document imports another.
* </p>
*
* @return The property that denotes ontology importing.
*/
public Property IMPORTS();
/**
* <p>
* Answer the predicate that denotes version-info metadata on an ontology header
* </p>
*
* @return The property that denotes ontology version information.
*/
public Property VERSION_INFO();
/**
* <p>
* Answer the predicate that documents that one ontology is a prior version
* of another.
* </p>
*
* @return The property that denotes ontology versioning
*/
public Property PRIOR_VERSION();
/**
* <p>
* Answer the predicate that documents that one ontology resource is backwards
* compatible with another.
* </p>
*
* @return The property that denotes ontology element backwards compatability.
*/
public Property BACKWARD_COMPATIBLE_WITH();
/**
* <p>
* Answer the predicate that documents that one ontology resource is not backwards
* compatible with another.
* </p>
*
* @return The property that denotes ontology element backwards incompatability.
*/
public Property INCOMPATIBLE_WITH();
/**
* <p>
* Answer the predicate that denotes that one class is a sub-class of another.
* </p>
*
* @return The property that the sub-class relationship.
*/
public Property SUB_CLASS_OF();
/**
* <p>
* Answer the predicate that denotes that one property is a sub-property of another.
* </p>
*
* @return The property that denotes the sub-property relationship.
*/
public Property SUB_PROPERTY_OF();
/**
* <p>
* Answer the predicate that denotes the domain of a property.
* </p>
*
* @return The property that denotes a property domain
*/
public Property DOMAIN();
/**
* <p>
* Answer the predicate that denotes the range of a property
* </p>
*
* @return The property that denotes the property range
*/
public Property RANGE();
/**
* <p>
* Answer the predicate that denotes <code>label</code> annotation on an ontology element
* </p>
*
* @return The property that denotes the label annotation
*/
public Property LABEL();
/**
* <p>
* Answer the predicate that denotes <code>comment</code> annotation on an ontology element
* </p>
*
* @return The property that denotes the comment annotation
*/
public Property COMMENT();
/**
* <p>
* Answer the predicate that denotes <code>seeAlso</code> annotation on an ontology element
* </p>
*
* @return The property that denotes the seeAlso annotation
*/
public Property SEE_ALSO();
/**
* <p>
* Answer the predicate that denotes <code>isDefinedBy</code> annotation on an ontology element
* </p>
*
* @return The property that denotes the isDefiendBy annotation
*/
public Property IS_DEFINED_BY();
// List vocabulary
/**
* <p>The property that denotes the head of a list</p>
* @return The property that maps from a cell in a list to its value
*/
public Property FIRST();
/**
* <p>The property that denotes the tail of a list</p>
* @return The property that maps from a cell in a list to the remainder of the list
*/
public Property REST();
/**
* <p>The <code>rdf:type</code> for cells in this list</p>
* @return The list rdf:type resource
*/
public Resource LIST();
/**
* <p>The resource that denotes the end of the list</p>
*/
public Resource NIL();
// Particular language syntax categories
/**
* <p>
* Answer an iterator over the rdf:types in this language that denote stand-alone
* axioms.
* </p>
*
* @return An iterator over axiom types.
*/
public Iterator<Resource> getAxiomTypes();
/**
* <p>
* Answer an iterator over the properties in this language that are denoted
* annotation properties. Not all languages have distinguished annotation
* properties.
* </p>
*
* @return An iterator over annotation properties.
*/
public Iterator<Resource> getAnnotationProperties();
/**
* <p>
* Answer an iterator over the various types of class description defined
* in the language.
* </p>
*
* @return An iterator over the various rdf:types of class descriptions.
*/
public Iterator<Resource> getClassDescriptionTypes();
// Alias management
/**
* <p>
* Answer true if the given resource has an alias in this profile.
* </p>
*
* @param res A resource (including properties) to test for an alias
* @return True if there is an alias for <code>res</code>
*/
public boolean hasAliasFor( Resource res );
/**
* <p>
* Answer an alias for the given resource. If there is more than
* one such alias, a choice is made non-deterministically between the
* alternatives.
* </p>
*
* @param res A resource (including properties) to test for an alias
* @return The alias for <code>res</code>, or one of the aliases for <code>res</code> if more
* than one is defined, or null if no alias is defined for <code>res</code>.
*
*/
public Resource getAliasFor( Resource res );
/**
* <p>
* Answer an iterator over the defined aliases for a resource.
* </p>
*
* @param res A resource (including properties)
* @return An iterator over the aliases for <code>res</code>. If there are
* no aliases, the empty iterator is returned.
*/
public Iterator<Resource> listAliasesFor( Resource res );
/**
* <p>
* Answer true if the given graph supports a view of this node as the given
* language element, according to the semantic constraints of the profile.
* If strict checking on the ontology model is turned off, this check is
* skipped.
* </p>
*
* @param n A node to test
* @param g The enhanced graph containing <code>n</code>, which is assumed to
* be an {@link OntModel}.
* @param type A class indicating the facet that we are testing against.
* @return True if strict checking is off, or if <code>n</code> can be
* viewed according to the facet resource <code>res</code>
*/
public <T> boolean isSupported( Node n, EnhGraph g, Class<T> type );
// Other stuff
/**
* <p>
* Answer a descriptive string for this profile, for use in debugging and other output.
* </p>
*/
public String getLabel();
}