📄 ontclassimpl.java
字号:
for (StmtIterator i = getModel().listStatements( null, getProfile().SUB_CLASS_OF(), this ); i.hasNext(); ) {
i.removeNext();
}
((OntClass) cls.as( OntClass.class )).addSuperClass( this );
}
/**
* <p>Add a sub-class of this class.</p>
* @param cls A class that is a sub-class of this class.
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} property is not supported in the current language profile.
*/
public void addSubClass( Resource cls ) {
((OntClass) cls.as( OntClass.class )).addSuperClass( this );
}
/**
* <p>Answer a class that is the sub-class of this class. If there is
* more than one such class, an arbitrary selection is made. If
* there is no such class, return null.</p>
* @return A sub-class of this class or null
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()}
* property is not supported in the current language profile.
*/
public OntClass getSubClass() {
checkProfile( getProfile().SUB_CLASS_OF(), "SUB_CLASS_OF" );
StmtIterator i = getModel().listStatements( null, getProfile().SUB_CLASS_OF(), this );
try {
if (i.hasNext()) {
return (OntClass) i.nextStatement()
.getSubject()
.as( OntClass.class );
}
else {
return null;
}
}
finally {
i.close();
}
}
/**
* <p>Answer an iterator over all of the classes that are declared to be sub-classes of
* this class. Each element of the iterator will be an {@link OntClass}.</p>
* @return An iterator over the sub-classes of this class.
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} property is not supported in the current language profile.
*/
public ExtendedIterator listSubClasses() {
return listSubClasses( false );
}
/**
* <p>
* Answer an iterator over the classes that are declared to be sub-classes of
* this class. Each element of the iterator will be an {@link OntClass}. The
* distinguishing extra parameter for this method is the flag <code>direct</code>
* that allows some selectivity over the classes that appear in the iterator.
* Consider the following scenario:
* <code><pre>
* :B rdfs:subClassOf :A.
* :C rdfs:subClassOf :A.
* :D rdfs:subClassof :C.
* </pre></code>
* (so A has two sub-classes, B and C, and C has sub-class D). In a raw model, with
* no inference support, listing the sub-classes of A will answer B and C. In an
* inferencing model, <code>rdfs:subClassOf</code> is known to be transitive, so
* the sub-classes iterator will include D. The <code>direct</code> sub-classes
* are those members of the closure of the subClassOf relation, restricted to classes that
* cannot be reached by a longer route, i.e. the ones that are <em>directly</em> adjacent
* to the given root. Thus, the direct sub-classes of A are B and C only, and not D -
* even in an inferencing graph. Note that this is not the same as the entailments
* from the raw graph. Suppose we add to this example:
* <code><pre>
* :D rdfs:subClassof :A.
* </pre></code>
* Now, in the raw graph, A has sub-class C. But the direct sub-classes of A remain
* B and C, since there is a longer path A-C-D that means that D is not a direct sub-class
* of A. The assertion in the raw graph that A has sub-class D is essentially redundant,
* since this can be inferred from the closure of the graph.
* </p>
* <p>
* <strong>Note:</strong> This is is a change from the behaviour of Jena 1, which took a
* parameter <code>closed</code> to compute the closure over transitivity and equivalence
* of sub-classes. The closure capability in Jena2 is determined by the inference engine
* that is wrapped with the ontology model. The direct parameter is provided to allow,
* for exmaple, a level-by-level traversal of the class hierarchy, starting at some given
* root.
* </p>
*
* @param direct If true, only answer the direcly adjacent classes in the
* sub-class relation: i.e. eliminate any class for which there is a longer route
* to reach that child under the sub-class relation.
* @return an iterator over the resources representing this class's sub-classes
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} property is not supported in the current language profile.
*/
public ExtendedIterator listSubClasses( boolean direct ) {
return UniqueExtendedIterator.create(
listDirectPropertyValues( getProfile().SUB_CLASS_OF(), "SUB_CLASS_OF", OntClass.class, getProfile().SUB_CLASS_OF(), direct, true )
.filterDrop( new SingleEqualityFilter( this ) ) );
}
/**
* <p>Answer true if the given class is a sub-class of this class.</p>
* @param cls A class to test.
* @return True if the given class is a sub-class of this class.
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} property is not supported in the current language profile.
*/
public boolean hasSubClass( Resource cls ) {
return hasSubClass( cls, false );
}
/**
* <p>Answer true if this class has any sub-class in the model. Note that
* when using a reasoner, all OWL classes have owl:Nothing as a sub-class.</p>
* @return True if this class has any known sub-class.
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} property is not supported in the current language profile.
*/
public boolean hasSubClass() {
return getSubClass() != null;
}
/**
* <p>Answer true if the given class is a sub-class of this class.
* See {@link #listSubClasses( boolean )} for a full explanation of the <em>direct</em>
* parameter.
* </p>
* @param cls A class to test.
* @param direct If true, only search the classes that are directly adjacent to this
* class in the class hierarchy.
* @return True if the given class is a sub-class of this class.
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} property is not supported in the current language profile.
*/
public boolean hasSubClass( Resource cls, boolean direct ) {
if (getModel() instanceof OntModel &&
(cls.getModel() == null || !(cls.getModel() instanceof OntModel)))
{
// could be outside an ontmodel if a constant
cls = (Resource) cls.inModel( getModel() );
}
return ((OntClass) cls.as( OntClass.class )).hasSuperClass( this, direct );
}
/**
* <p>Remove the given class from the sub-classes of this class. If this statement
* is not true of the current model, nothing happens.</p>
* @param cls A class to be removed from the sub-classes of this class
* @exception OntProfileException If the {@link Profile#SUB_CLASS_OF()} class is not supported in the current language profile.
*/
public void removeSubClass( Resource cls ) {
((OntClass) cls.as( OntClass.class)).removeSuperClass( this );
}
// equivalentClass
/**
* <p>Assert that the given class is equivalent to this class. Any existing
* statements for <code>equivalentClass</code> will be removed.</p>
* @param cls The class that this class is a equivalent to.
* @exception OntProfileException If the {@link Profile#EQUIVALENT_CLASS()} property is not supported in the current language profile.
*/
public void setEquivalentClass( Resource cls ) {
setPropertyValue( getProfile().EQUIVALENT_CLASS(), "EQUIVALENT_CLASS", cls );
}
/**
* <p>Add a class that is equivalent to this class.</p>
* @param cls A class that is equivalent to this class.
* @exception OntProfileException If the {@link Profile#EQUIVALENT_CLASS()} property is not supported in the current language profile.
*/
public void addEquivalentClass( Resource cls ) {
addPropertyValue( getProfile().EQUIVALENT_CLASS(), "EQUIVALENT_CLASS", cls );
}
/**
* <p>Answer a class that is equivalent to this class. If there is
* more than one such class, an arbitrary selection is made.</p>
* @return A class equivalent to this class
* @exception OntProfileException If the {@link Profile#EQUIVALENT_CLASS()} property is not supported in the current language profile.
*/
public OntClass getEquivalentClass() {
return (OntClass) objectAs( getProfile().EQUIVALENT_CLASS(), "EQUIVALENT_CLASS", OntClass.class );
}
/**
* <p>Answer an iterator over all of the classes that are declared to be equivalent classes to
* this class. Each element of the iterator will be an {@link OntClass}.</p>
* @return An iterator over the classes equivalent to this class.
* @exception OntProfileException If the {@link Profile#EQUIVALENT_CLASS()} property is not supported in the current language profile.
*/
public ExtendedIterator listEquivalentClasses() {
return UniqueExtendedIterator.create( listAs( getProfile().EQUIVALENT_CLASS(), "EQUIVALENT_CLASS", OntClass.class ) );
}
/**
* <p>Answer true if the given class is equivalent to this class.</p>
* @param cls A class to test for
* @return True if the given property is equivalent to this class.
* @exception OntProfileException If the {@link Profile#EQUIVALENT_CLASS()} property is not supported in the current language profile.
*/
public boolean hasEquivalentClass( Resource cls ) {
return hasPropertyValue( getProfile().EQUIVALENT_CLASS(), "EQUIVALENT_CLASS", cls );
}
/**
* <p>Remove the statement that this class and the given class are
* equivalent. If this statement
* is not true of the current model, nothing happens.</p>
* @param cls A class that may be declared to be equivalent to this class, and which is no longer equivalent
* @exception OntProfileException If the {@link Profile#EQUIVALENT_CLASS()()} property is not supported in the current language profile.
*/
public void removeEquivalentClass( Resource cls ) {
removePropertyValue( getProfile().EQUIVALENT_CLASS(), "EQUIVALENT_CLASS", cls );
}
// disjointWith
/**
* <p>Assert that this class is disjoint with the given class. Any existing
* statements for <code>disjointWith</code> will be removed.</p>
* @param cls The property that this class is disjoint with.
* @exception OntProfileException If the {@link Profile#DISJOINT_WITH()} property is not supported in the current language profile.
*/
public void setDisjointWith( Resource cls ) {
setPropertyValue( getProfile().DISJOINT_WITH(), "DISJOINT_WITH", cls );
}
/**
* <p>Add a class that this class is disjoint with.</p>
* @param cls A class that has no instances in common with this class.
* @exception OntProfileException If the {@link Profile#DISJOINT_WITH()} property is not supported in the current language profile.
*/
public void addDisjointWith( Resource cls ) {
addPropertyValue( getProfile().DISJOINT_WITH(), "DISJOINT_WITH", cls );
}
/**
* <p>Answer a class with which this class is disjoint. If there is
* more than one such class, an arbitrary selection is made.</p>
* @return A class disjoint with this class
* @exception OntProfileException If the {@link Profile#DISJOINT_WITH()} property is not supported in the current language profile.
*/
public OntClass getDisjointWith() {
return (OntClass) objectAs( getProfile().DISJOINT_WITH(), "DISJOINT_WITH", OntClass.class );
}
/**
* <p>Answer an iterator over all of the classes that this class is declared to be disjoint with.
* Each element of the iterator will be an {@link OntClass}.</p>
* @return An iterator over the classes disjoint with this class.
* @exception OntProfileException If the {@link Profile#DISJOINT_WITH()} property is not supported in the current language profile.
*/
public ExtendedIterator listDisjointWith() {
return UniqueExtendedIterator.create( listAs( getProfile().DISJOINT_WITH(), "DISJOINT_WITH", OntClass.class ) );
}
/**
* <p>Answer true if this class is disjoint with the given class.</p>
* @param cls A class to test
* @return True if the this class is disjoint with the the given class.
* @exception OntProfileException If the {@link Profile#DISJOINT_WITH()} property is not supported in the current language profile.
*/
public boolean isDisjointWith( Resource cls ) {
return hasPropertyValue( getProfile().DISJOINT_WITH(), "DISJOINT_WITH", cls );
}
/**
* <p>Remove the statement that this class and the given class are
* disjoint. If this statement
* is not true of the current model, nothing happens.</p>
* @param cls A class that may be declared to be disjoint with this class, and which is no longer disjoint
* @exception OntProfileException If the {@link Profile#DISJOINT_WITH()()()} property is not supported in the current language profile.
*/
public void removeDisjointWith( Resource cls ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -