axiomcollector.java

来自「Semantic Web Ontology Editor」· Java 代码 · 共 293 行

JAVA
293
字号
package org.mindswap.swoop.utils.owlapi;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Set;import org.semanticweb.owl.impl.model.OWLDataFactoryImpl;import org.semanticweb.owl.impl.model.OWLIndividualTypeAssertionImpl;import org.semanticweb.owl.model.OWLAnnotationInstance;import org.semanticweb.owl.model.OWLAnnotationProperty;import org.semanticweb.owl.model.OWLClass;import org.semanticweb.owl.model.OWLDataFactory;import org.semanticweb.owl.model.OWLDataProperty;import org.semanticweb.owl.model.OWLDataPropertyInstance;import org.semanticweb.owl.model.OWLDataPropertyRangeAxiom;import org.semanticweb.owl.model.OWLDataRange;import org.semanticweb.owl.model.OWLDataType;import org.semanticweb.owl.model.OWLDataValue;import org.semanticweb.owl.model.OWLDescription;import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom;import org.semanticweb.owl.model.OWLDisjointClassesAxiom;import org.semanticweb.owl.model.OWLEquivalentClassesAxiom;import org.semanticweb.owl.model.OWLEquivalentPropertiesAxiom;import org.semanticweb.owl.model.OWLException;import org.semanticweb.owl.model.OWLFunctionalPropertyAxiom;import org.semanticweb.owl.model.OWLIndividual;import org.semanticweb.owl.model.OWLIndividualTypeAssertion;import org.semanticweb.owl.model.OWLInverseFunctionalPropertyAxiom;import org.semanticweb.owl.model.OWLInversePropertyAxiom;import org.semanticweb.owl.model.OWLObject;import org.semanticweb.owl.model.OWLObjectProperty;import org.semanticweb.owl.model.OWLObjectPropertyInstance;import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom;import org.semanticweb.owl.model.OWLOntology;import org.semanticweb.owl.model.OWLProperty;import org.semanticweb.owl.model.OWLPropertyDomainAxiom;import org.semanticweb.owl.model.OWLSameIndividualsAxiom;import org.semanticweb.owl.model.OWLSubClassAxiom;import org.semanticweb.owl.model.OWLSubPropertyAxiom;import org.semanticweb.owl.model.OWLSymmetricPropertyAxiom;import org.semanticweb.owl.model.OWLTransitivePropertyAxiom;import org.semanticweb.owl.model.helper.OWLObjectVisitorAdapter;public class AxiomCollector extends OWLObjectVisitorAdapter {	protected Set collectedAxioms;	protected OWLOntology ontology;	protected OWLDataFactory factory;		/**	 * Construct a visitor that extracts *Axiom and *Instance objects	 * from objects it visits.	 * 	 * @param ontology	 * @throws OWLException	 */	public AxiomCollector(OWLOntology ontology) throws OWLException {		this.ontology = ontology;		this.factory = ontology.getOWLDataFactory();		reset();	}	public void collectAxioms() throws OWLException {		ontology.accept(this);		collectAxiomsFromSet(ontology.getClasses());		collectAxiomsFromSet(ontology.getDatatypes());		collectAxiomsFromSet(ontology.getAnnotationProperties());		collectAxiomsFromSet(ontology.getDataProperties());		collectAxiomsFromSet(ontology.getObjectProperties());		collectAxiomsFromSet(ontology.getIndividuals());				collectAxiomsFromSet(ontology.getClassAxioms());		collectAxiomsFromSet(ontology.getPropertyAxioms());		collectAxiomsFromSet(ontology.getIndividualAxioms());	}		protected void collectAxiomsFromSet(Set set) throws OWLException {		for (Iterator iter = set.iterator(); iter.hasNext();) {			OWLObject obj = (OWLObject) iter.next();			obj.accept(this);		}	}	public static Set axiomize(OWLOntology ontology) throws OWLException {		AxiomCollector collector = new AxiomCollector(ontology);		collector.collectAxioms();		return collector.axioms();	}		public Set axioms() {		return collectedAxioms;	}		public void reset() {		collectedAxioms = new HashSet();	}	public void reset(Set set) {		collectedAxioms = set;	}	protected void addAnnotations(OWLObject node) throws OWLException {		for (Iterator iter = node.getAnnotations(ontology).iterator(); iter.hasNext(); ) {			OWLAnnotationInstance annotation = (OWLAnnotationInstance) iter.next();			collectedAxioms.add(annotation);		}	}		protected void addCommonPropertyAxioms(OWLProperty node) throws OWLException {		addAnnotations(node);		for (Iterator iter = node.getSuperProperties(ontology).iterator(); iter.hasNext();) {			OWLProperty superProp = (OWLProperty) iter.next();			collectedAxioms.add(factory.getOWLSubPropertyAxiom(node, superProp));		}		for (Iterator iter = node.getDomains(ontology).iterator(); iter.hasNext();) {			OWLDescription description = (OWLDescription) iter.next();			collectedAxioms.add(factory.getOWLPropertyDomainAxiom(node, description));		}		if (node.isFunctional(ontology)) {			collectedAxioms.add(factory.getOWLFunctionalPropertyAxiom(node));		}	}		/**	 * Adds just the annotations of the ontology.	 */	public void visit(OWLOntology node) throws OWLException {		addAnnotations(node);	}		public void visit(OWLAnnotationProperty node) throws OWLException {		addAnnotations(node);	}	public void visit(OWLAnnotationInstance node) throws OWLException {		collectedAxioms.add(node);	}		public void visit(OWLDataProperty node) throws OWLException {		addCommonPropertyAxioms(node);		for (Iterator iter = node.getRanges(ontology).iterator(); iter.hasNext();) {			OWLDataRange range = (OWLDataRange) iter.next();			collectedAxioms.add(factory.getOWLDataPropertyRangeAxiom(node, range));		}	}		public void visit(OWLDataType node) throws OWLException {		addAnnotations(node);	}		public void visit(OWLDifferentIndividualsAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLDisjointClassesAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLEquivalentClassesAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLEquivalentPropertiesAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLIndividual node) throws OWLException {		addAnnotations(node);		for (Iterator iter = node.getTypes(ontology).iterator(); iter.hasNext(); ) {			OWLDescription type = (OWLDescription) iter.next();			collectedAxioms.add(new OWLIndividualTypeAssertionImpl((OWLDataFactoryImpl) factory, node, type));		}				Map dataMap = node.getDataPropertyValues(ontology);		for (Iterator keyIter = dataMap.keySet().iterator(); keyIter.hasNext();) {			OWLDataProperty prop = (OWLDataProperty) keyIter.next();			Set values = (Set) dataMap.get(prop);			for (Iterator iter = values.iterator(); iter.hasNext(); ) {				OWLDataValue value = (OWLDataValue) iter.next();				collectedAxioms.add(factory.getOWLDataPropertyInstance(node, prop, value));			}		}				Map objectMap = node.getObjectPropertyValues(ontology);		for (Iterator keyIter = objectMap.keySet().iterator(); keyIter.hasNext();) {			OWLObjectProperty prop = (OWLObjectProperty) keyIter.next();			Set values = (Set) objectMap.get(prop);			for (Iterator iter = values.iterator(); iter.hasNext(); ) {				OWLIndividual value = (OWLIndividual) iter.next();				collectedAxioms.add(factory.getOWLObjectPropertyInstance(node, prop, value));			}		}	}	public void visit(OWLObjectProperty node) throws OWLException {		addCommonPropertyAxioms(node);		for (Iterator iter = node.getDomains(ontology).iterator(); iter.hasNext();) {			OWLDescription description = (OWLDescription) iter.next();			collectedAxioms.add(factory.getOWLPropertyDomainAxiom(node, description));		}		for (Iterator iter = node.getRanges(ontology).iterator(); iter.hasNext();) {			OWLDescription description = (OWLDescription) iter.next();			collectedAxioms.add(factory.getOWLObjectPropertyRangeAxiom(node, description));		}		for(Iterator iter = node.getInverses(ontology).iterator(); iter.hasNext();){			OWLObjectProperty prop = (OWLObjectProperty)iter.next();			collectedAxioms.add(factory.getOWLInversePropertyAxiom(node,prop));		}				if (node.isInverseFunctional(ontology)) {			collectedAxioms.add(factory.getOWLInverseFunctionalPropertyAxiom(node));		}		if (node.isSymmetric(ontology)) {			collectedAxioms.add(factory.getOWLSymmetricPropertyAxiom(node));		}		if (node.isTransitive(ontology)) {			collectedAxioms.add(factory.getOWLTransitivePropertyAxiom(node));		}	}	public void visit(OWLClass node) throws OWLException {		addAnnotations(node);		for (Iterator iter = node.getSuperClasses(ontology).iterator(); iter.hasNext();) {			OWLDescription superClass = (OWLDescription) iter.next();			collectedAxioms.add(factory.getOWLSubClassAxiom(node, superClass));		}		Set equivalents = new HashSet(node.getEquivalentClasses(ontology));		equivalents.addAll(node.getEnumerations(ontology));		equivalents.add(node);		collectedAxioms.add(factory.getOWLEquivalentClassesAxiom(equivalents));	}	public void visit(OWLSameIndividualsAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLSubClassAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLSubPropertyAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLFunctionalPropertyAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLInverseFunctionalPropertyAxiom node)			throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLTransitivePropertyAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLSymmetricPropertyAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLInversePropertyAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLPropertyDomainAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLObjectPropertyRangeAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLDataPropertyRangeAxiom node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLObjectPropertyInstance node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLDataPropertyInstance node) throws OWLException {		collectedAxioms.add(node);	}	public void visit(OWLIndividualTypeAssertion node) throws OWLException {		collectedAxioms.add(node);	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?