📄 ontclassimpl.java
字号:
removePropertyValue( getProfile().DISJOINT_WITH(), "DISJOINT_WITH", cls );
}
// other utility methods
/**
* <p>Answer an iteration of the properties associated with a frame-like
* view of this class. Note that many cases of determining whether a
* property is associated with a class depends on RDFS or OWL reasoning.
* This method may therefore return complete results only in models that
* have an attached reasoner.
* See the
* <a href="../../../../../../how-to/rdf-frames.html">RDF frames how-to</a>
* for full details.<p>
* @return An iteration of the properties that are associated with this class
* by their domain.
*/
public ExtendedIterator listDeclaredProperties() {
return listDeclaredProperties( false );
}
/**
* <p>Answer an iteration of the properties associated with a frame-like
* view of this class. Note that many cases of determining whether a
* property is associated with a class depends on RDFS or OWL reasoning.
* This method may therefore return complete results only in models that
* have an attached reasoner. See the
* <a href="../../../../../../how-to/rdf-frames.html">RDF frames how-to</a>
* for full details.<p>
* @param direct If true, restrict the properties returned to those directly
* associated with this class.
* @return An iteration of the properties that are associated with this class
* by their domain.
*/
public ExtendedIterator listDeclaredProperties( boolean direct ) {
// first collect the candidate properties
Set candSet = new HashSet();
// if the attached model does inference, it will potentially find more of these
// than a non-inference model
for (Iterator i = listAllProperties(); i.hasNext(); ) {
candSet.add( ((Statement) i.next()).getSubject().as( Property.class ) );
}
// now we iterate over the candidates and check that they match all domain constraints
List cands = new ArrayList();
cands.addAll( candSet );
for (int j = cands.size() -1; j >= 0; j--) {
Property cand = (Property) cands.get( j );
if (!hasDeclaredProperty( cand, direct )) {
cands.remove( j );
}
}
// return the results, using the ont property facet
return WrappedIterator.create( cands.iterator() )
.mapWith( new AsMapper( OntProperty.class ) );
}
/**
* <p>Answer true if the given property is one of the declared properties
* of this class. For details, see {@link #listDeclaredProperties(boolean)}.</p>
* @param p A property to test
* @param direct If true, only direct associations between classes and properties
* are considered
* @return True if <code>p</code> is one of the declared properties of
* this class
*/
public boolean hasDeclaredProperty( Property p, boolean direct ) {
return testDomain( p, direct );
}
/**
* <p>Answer an iterator over the individuals in the model that have this
* class among their types.<p>
*
* @return An iterator over those instances that have this class as one of
* the classes to which they belong
*/
public ExtendedIterator listInstances() {
return listInstances( false );
}
/**
* <p>Answer an iterator over the individuals in the model that have this
* class among their types, optionally excluding sub-classes of this class.<p>
*
* @param direct If true, only direct instances are counted (i.e. not instances
* of sub-classes of this class)
* @return An iterator over those instances that have this class as one of
* the classes to which they belong
*/
public ExtendedIterator listInstances( final boolean direct ) {
return UniqueExtendedIterator.create(
getModel()
.listStatements( null, RDF.type, this )
.mapWith( new SubjectAsMapper( Individual.class ) )
.filterKeep( new Filter() {
public boolean accept( Object o ) {
// if direct, ignore the sub-class typed resources
return ((Individual) o).hasRDFType( OntClassImpl.this, direct );
}} )
);
}
/**
* <p>Answer a new individual that has this class as its <code>rdf:type</code></p>
* @return A new anonymous individual that is an instance of this class
*/
public Individual createIndividual() {
return ((OntModel) getModel()).createIndividual( this );
}
/**
* <p>Answer a new individual that has this class as its <code>rdf:type</code></p>
* @param uri The URI of the new individual
* @return A new named individual that is an instance of this class
*/
public Individual createIndividual( String uri ) {
return ((OntModel) getModel()).createIndividual( uri, this );
}
/**
* <p>Answer true if this class is one of the roots of the class hierarchy.
* This will be true if either (i) this class has <code>owl:Thing</code>
* (or <code>daml:Thing</code>) as a direct super-class, or (ii) it has
* no declared super-classes (including anonymous class expressions).</p>
* @return True if this class is the root of the class hierarchy in the
* model it is attached to
*/
public boolean isHierarchyRoot() {
// sanity check - :Nothing is never a root class
if (equals( getProfile().NOTHING() )) {
return false;
}
// the only super-classes of a root class are the various aliases
// of Top, or itself
/**
Note: moved the initialisation of i outside the try-catch, otherwise an
exception in listSuperClasses [eg a broken Graph implementation] will
avoid i's initialisation but still run i.close, generating a mysterious
NullPointerException. Signed, Mr Burnt Spines.
*/
ExtendedIterator i = listSuperClasses( true );
try {
while (i.hasNext()) {
Resource sup = (Resource) i.next();
if (!(sup.equals( getProfile().THING() ) ||
sup.equals( RDFS.Resource ) ||
sup.equals( this )))
{
// a super that indicates this is not a root class
return false;
}
}
}
finally {
i.close();
}
return true;
}
// access to facets
/**
* <p>Answer a view of this class as an enumerated class</p>
* @return This class, but viewed as an EnumeratedClass node
* @exception ConversionException if the class cannot be converted to an enumerated class
* given the lanuage profile and the current state of the underlying model.
*/
public EnumeratedClass asEnumeratedClass() {
return (EnumeratedClass) as( EnumeratedClass.class );
}
/**
* <p>Answer a view of this class as a union class</p>
* @return This class, but viewed as a UnionClass node
* @exception ConversionException if the class cannot be converted to a union class
* given the lanuage profile and the current state of the underlying model.
*/
public UnionClass asUnionClass() {
return (UnionClass) as( UnionClass.class );
}
/**
* <p>Answer a view of this class as an intersection class</p>
* @return This class, but viewed as an IntersectionClass node
* @exception ConversionException if the class cannot be converted to an intersection class
* given the lanuage profile and the current state of the underlying model.
*/
public IntersectionClass asIntersectionClass() {
return (IntersectionClass) as( IntersectionClass.class );
}
/**
* <p>Answer a view of this class as a complement class</p>
* @return This class, but viewed as a ComplementClass node
* @exception ConversionException if the class cannot be converted to a complement class
* given the lanuage profile and the current state of the underlying model.
*/
public ComplementClass asComplementClass() {
return (ComplementClass) as( ComplementClass.class );
}
/**
* <p>Answer a view of this class as a restriction class expression</p>
* @return This class, but viewed as a Restriction node
* @exception ConversionException if the class cannot be converted to a restriction
* given the lanuage profile and the current state of the underlying model.
*/
public Restriction asRestriction() {
return (Restriction) as( Restriction.class );
}
// sub-type testing
/**
* <p>Answer true if this class is an enumerated class expression</p>
* @return True if this is an enumerated class expression
*/
public boolean isEnumeratedClass() {
checkProfile( getProfile().ONE_OF(), "ONE_OF" );
return hasProperty( getProfile().ONE_OF() );
}
/**
* <p>Answer true if this class is a union class expression</p>
* @return True if this is a union class expression
*/
public boolean isUnionClass() {
checkProfile( getProfile().UNION_OF(), "UNION_OF" );
return hasProperty( getProfile().UNION_OF() );
}
/**
* <p>Answer true if this class is an intersection class expression</p>
* @return True if this is an intersection class expression
*/
public boolean isIntersectionClass() {
checkProfile( getProfile().INTERSECTION_OF(), "INTERSECTION_OF" );
return hasProperty( getProfile().INTERSECTION_OF() );
}
/**
* <p>Answer true if this class is a complement class expression</p>
* @return True if this is a complement class expression
*/
public boolean isComplementClass() {
checkProfile( getProfile().COMPLEMENT_OF(), "COMPLEMENT_OF" );
return hasProperty( getProfile().COMPLEMENT_OF() );
}
/**
* <p>Answer true if this class is a property restriction</p>
* @return True if this is a restriction
*/
public boolean isRestriction() {
checkProfile( getProfile().RESTRICTION(), "RESTRICTION" );
return hasProperty( getProfile().ON_PROPERTY() ) ||
hasProperty( RDF.type, getProfile().RESTRICTION() );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -