extendedlocalitychecker.java

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

JAVA
193
字号

package org.mindswap.swoop.refactoring;
import java.io.OutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.mindswap.swoop.SwoopModel;
import org.semanticweb.owl.model.OWLAnd;
import org.semanticweb.owl.model.OWLClass;
import org.semanticweb.owl.model.OWLClassAxiom;
import org.semanticweb.owl.model.OWLDescription;
import org.semanticweb.owl.model.OWLDisjointClassesAxiom;
import org.semanticweb.owl.model.OWLEquivalentClassesAxiom;
import org.semanticweb.owl.model.OWLException;
import org.semanticweb.owl.model.OWLNot;
import org.semanticweb.owl.model.OWLObjectAllRestriction;
import org.semanticweb.owl.model.OWLObjectCardinalityRestriction;
import org.semanticweb.owl.model.OWLObjectSomeRestriction;
import org.semanticweb.owl.model.OWLOntology;
import org.semanticweb.owl.model.OWLOr;
import org.semanticweb.owl.model.OWLSubClassAxiom;

public class ExtendedLocalityChecker {
	protected SwoopModel swoopModel;
	protected OWLOntology source;
	protected OWLOntology imported;
		
//	************************************************************
	//Indexes storing general information about the SOURCE ontology
	//**********************************************************
	protected Set Restrictions; // All Restrictions
	protected Set Unions;
	protected Set Intersections;
	protected Set disjointAxioms;
	protected Map equivalents;
	protected Map subClasses, superClasses, subProperties, superProperties, instancesOf;
	protected Set local;
	protected Set nlocal;
	protected boolean DEBUG;
	
	
	public ExtendedLocalityChecker(OWLOntology source) {
		this.source = source;
		this.local = new HashSet();
		this.nlocal = new HashSet();
		this.DEBUG = true;
	}	
	
	public boolean isLocal(OWLDescription desc) throws OWLException{
		if (desc instanceof OWLClass){
			if(((OWLClass)desc).getURI().toString().equals("http://www.w3.org/2002/07/owl#Thing"))
				return false;
			else
				return true;
		}
		else{
			if(desc instanceof OWLObjectSomeRestriction){
				if (DEBUG){
					System.out.println("The SomeValuesRestriction on Role"+ ((OWLObjectSomeRestriction)desc).getProperty().getURI().toString() +
							"is local");
				}
				return true;				
			}
			if(desc instanceof OWLObjectAllRestriction){
				return false;
			}
			if (desc instanceof OWLObjectCardinalityRestriction)
			{
				try {
					if(((OWLObjectCardinalityRestriction)desc).isAtLeast() & ((OWLObjectCardinalityRestriction)desc).isExactly())
						return true;
					else
						return false;
				} catch (OWLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}	
			}
			if (desc instanceof OWLNot){
				try {
					if(this.isLocal(((OWLNot)desc).getOperand()))
							return false;
					else
						return true;
				} catch (OWLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (desc instanceof OWLAnd){
				Iterator iter;
				try {
					iter = ((OWLAnd)desc).getOperands().iterator();
					while(iter.hasNext()){
						OWLDescription conjunct = (OWLDescription)iter.next();
						if (this.isLocal(conjunct))
							return true;
							
					}
				} catch (OWLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				
				}
				
				return false;
			}
			
			if (desc instanceof OWLOr){
				Iterator iter;
				try {
					iter = ((OWLOr)desc).getOperands().iterator();
					while(iter.hasNext()){
						OWLDescription disjunct = (OWLDescription)iter.next();
						if (!(this.isLocal(disjunct)))
							return false;
							
					}
				} catch (OWLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				return true;
			}
				
		}
		return true;	
	}
	
	
	public Set getNonLocalAxioms() throws OWLException {
		Set allGCIs = new HashSet();
		Set nlocalAxioms = new HashSet();
		allGCIs = source.getClassAxioms();
		Iterator iter = allGCIs.iterator();
		while (iter.hasNext()) {
			OWLClassAxiom axiom = (OWLClassAxiom) iter.next();
			if (axiom instanceof OWLSubClassAxiom) {
					if (!(this.isLocal(((OWLSubClassAxiom)axiom).getSubClass())) && 
							this.isLocal(((OWLSubClassAxiom)axiom).getSuperClass())) {
					nlocalAxioms.add(axiom);
				}
			}
			if (axiom instanceof OWLEquivalentClassesAxiom){
				int l = 0,nl = 0;
				Set eq = ((OWLEquivalentClassesAxiom)axiom).getEquivalentClasses();
				Iterator it = eq.iterator();
				while(it.hasNext()){
					OWLDescription d = (OWLDescription)it.next();
					if(this.isLocal(d)){
						l = l+1;
					}
					else{
						nl= nl+1;
					}
						
				}
				nlocalAxioms.add(axiom);
						
			}
		}
		
		Iterator ite = this.source.getClasses().iterator();
		while(ite.hasNext()){
			OWLClass cl = (OWLClass)ite.next();
			Set ec = cl.getEquivalentClasses(source);
			Iterator itera = ec.iterator();
			while(itera.hasNext()){
				OWLDescription d = (OWLDescription)itera.next();
				if (!(this.isLocal(d)))
						nlocalAxioms.add(d);
						
			}
			
		}
		return nlocalAxioms;
	}
	
	public boolean isLocal(OWLOntology ont) throws OWLException{
		if (this.getNonLocalAxioms().isEmpty())
			return true;
		else
			return false;
		
	}
	
	
	
}

⌨️ 快捷键说明

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