ontologyanalyzer.java
来自「Semantic Web Ontology Editor」· Java 代码 · 共 904 行 · 第 1/3 页
JAVA
904 行
StringWriter st = new StringWriter();
CorrectedRDFRenderer rdfRenderer = new CorrectedRDFRenderer();
// source code in RDF
String code = "";
try
{
rdfRenderer.renderOntology(ont, st);
code = st.toString();
}
catch ( RendererException ex )
{
ex.printStackTrace();
throw new AnalysisException("Failed in trying to analyze (Fixing RDFS vocaublary) <OWLException>: " + ex.toString() + "\n" + Utils.getExceptionTrace( ex ) );
}
StringReader reader = new StringReader( code );
OWLOntology ontology = model.getSelectedOntology();
// add updated ontology
OWLOntology updatedOntology = null;
updatedOntology = model.loadOntologyInRDF(reader, ontology.getURI());
// restore old ontology, if exception loading new one
if (updatedOntology==null)
{
throw new AnalysisException("Failed in trying to analyze (Updating RDFS vocaublary) <OWLException>" );
}
else {
// remove current ontology and clear its cache
SwoopFrame frame = model.getFrame();
model.clearCaches( ontology ); // force clearing!
model.removeOntStats( ontology ); // force clearing!
model.removeOntology( ontology.getURI() ); // force removing!
frame.termDisplay.removeFromCache(ontology);
frame.clearWorkspace( false ); // just in case
model.addOntology(updatedOntology);
model.setSelectedOntology(updatedOntology);
}
/*
BufferedWriter writer = new BufferedWriter( new FileWriter( "tempOntology.owl"));
writer.write( code );
writer.flush();
writer.close();
SwoopFrame frame = model.getFrame();
model.clearCaches( ont ); // force clearing!
model.removeOntStats( ont ); // force clearing!
model.removeOntology( ont.getURI() ); // force removing!
frame.clearWorkspace( false ); // just in case
File file = new File("tempOntology.owl");
ont = model.loadOntology( file.toURI() );
model.setSelectedOntology( ont );
model.setReasonerWithThreadBlock( new SwoopToldReasoner() );
model.setShowImportsWithThreadBlock( true );
*/
}
}
catch ( OWLException e )
{
e.printStackTrace();
throw new AnalysisException("Failed in trying to analyze (Setting ontology and imports) <OWLException>: " + e.toString() + "\n" + Utils.getExceptionTrace( e ) );
}
catch ( Exception e )
{
e.printStackTrace();
throw new AnalysisException("Failed in trying to analyze (Loading Ontology) <Exception>: " + e.toString() + "\n" + Utils.getExceptionTrace( e ) );
}
try
{
Thread.sleep( 5000 );
}
catch ( Exception e )
{ e.printStackTrace(); }
SwoopReasoner reasoner = model.getReasoner();
// construct class tree
display.termTabPane.setSelectedIndex( 0 );
display.updateTreeDisplay();
// construct prop tree
display.termTabPane.setSelectedIndex( 1 );
display.updateTreeDisplay();
Hashtable stats = this.getBasicStats( model, ont );
if ( IS_DEBUG )
System.out.println("Doing Individual Stats");
getIndividualStats( reasoner, ont, stats);
if ( IS_DEBUG )
System.out.println("Doing Advanced Stats");
HashMap advStats = model.getOntStats( ont );
String expressivity = getExpressivity();
advStats.put( EXPRESSIVITY, expressivity);
HashMap advReasonedStats = null;
// check to see if it's consistent
saveConsistency( advStats, model );
// check graph structure
doGraphAnalysis( advStats, model, ont);
if ( IS_DEBUG )
{
StatsPrinter.printBasicStats( stats );
StatsPrinter.printAdvancedStats( advStats );
System.out.println("----");
}
// now we clear the stats cache so the reasoned stats won't mess with the told stats
model.removeOntStatsWithoutNotification( ont );
if ( !INFERRED_STATS )
{
System.err.println(" *** Inferred Stats have been disabled [check OntologyAnalyzer.INFERRED_STATS] ***");
return new OntologyAnalysis( stats, advStats, null );
}
try
{
model.setReasonerWithThreadBlock( new PelletReasoner() );
}
catch ( Exception e )
{
e.printStackTrace();
throw new AnalysisException("Failed in trying to analyze( creating Pellet Reasoner) <Exception>: " + e.toString() + "\n" + Utils.getExceptionTrace( e ) );
}
// construct class tree
display.termTabPane.setSelectedIndex( 0 );
display.updateTreeDisplay();
// construct prop tree
display.termTabPane.setSelectedIndex( 1 );
display.updateTreeDisplay();
advReasonedStats = model.getOntStats( ont );
expressivity = getExpressivity();
advReasonedStats.put( EXPRESSIVITY, expressivity);
// check to see if it's consistent
saveConsistency( advReasonedStats, model );
// check graph structure
doGraphAnalysis( advReasonedStats, model, ont);
if ( IS_DEBUG )
StatsPrinter.printAdvancedStats( advReasonedStats );
return new OntologyAnalysis( stats, advStats, advReasonedStats);
}
/* Computes statistics for individuals of an ontology
* - # type assertions
* - # data prop assertions
* - # obj prop assertions
*/
public static Hashtable getIndividualStats( SwoopReasoner reasoner, OWLOntology ont, Hashtable stats ) throws AnalysisException
{
try
{
int numTypeAssertions = 0;
int numDataPropAssertions = 0;
int numObjPropAssertions = 0;
if ( reasoner.getOntology() == null )
{
System.out.println(" -.getIndividualStats: Ontology = null");
System.exit(1);
}
if ( reasoner.getOntology().getOWLDataFactory() == null)
{
System.out.println(" -.getIndividualStats: DATAFACTORY= null");
System.exit(1);
}
OWLClass owlThing = reasoner.getOntology().getOWLDataFactory().getOWLThing();
Set inds = ont.getIndividuals();
for ( Iterator it = inds.iterator(); it.hasNext(); )
{
OWLIndividual ind = (OWLIndividual)it.next();
Set types = ind.getTypes( ont );
types.remove( owlThing );
numTypeAssertions = numTypeAssertions + types.size();
Map objVals = ind.getObjectPropertyValues( ont );
Set Objkeys = objVals.keySet();
for (Iterator iter = Objkeys.iterator(); iter.hasNext(); )
{
HashSet obj = (HashSet)objVals.get( iter.next() ) ;
numObjPropAssertions = numObjPropAssertions + obj.size();
}
Map dataVals = ind.getDataPropertyValues( ont );
Set DataKeys = dataVals.keySet();
for (Iterator iter = DataKeys.iterator(); iter.hasNext(); )
{
HashSet obj = (HashSet)dataVals.get( iter.next() ) ;
numDataPropAssertions = numDataPropAssertions + obj.size();
}
}
stats.put( NUM_TYPE_ASSERTIONS, numTypeAssertions + "");
stats.put( NUM_DPROP_ASSERTIONS, numDataPropAssertions + "");
stats.put( NUM_OPROP_ASSERTIONS, numObjPropAssertions + "");
return stats;
}
catch ( Exception e )
{
e.printStackTrace();
throw new AnalysisException("Failed in Individual Stats Checking: " + e.toString() + "\n" + Utils.getExceptionTrace( e ) );
}
}
/* see if ontology is consistent.
*/
private static HashMap saveConsistency( HashMap advStats, SwoopModel model ) throws AnalysisException
{
try
{
SwoopReasoner reasoner = model.getReasoner();
if ( reasoner.isConsistent() )
advStats.put( OntologyAnalyzer.CONSISTENCY, "true");
else
advStats.put( OntologyAnalyzer.CONSISTENCY, "false");
return advStats;
}
catch ( Exception e )
{
e.printStackTrace();
throw new AnalysisException("Failed in extracting Consistency Stats: " + e.toString() + "\n" + Utils.getExceptionTrace( e ) );
}
}
/* Decides what kind of graph morphology this onotlogy is.
* can be one of { list, tree, multitree, DAG}
*/
private static HashMap doGraphAnalysis( HashMap advStats, SwoopModel model, OWLOntology ont ) throws AnalysisException
{
try
{
if (IS_DEBUG)
System.out.println("Doing Graph Analysis");
// get reasoner
SwoopReasoner reasoner = model.getReasoner();
//System.out.println("<<<<<< Reasoner type: " + reasoner.getClass().getName() );
// get multiple inheritance stats
Set multC = (HashSet) advStats.get(SwoopStatistics.MULTIPLE_INHERITANCE_CLASS);
// if is inconsistent, there is no real semantic structure :/
String consistency = (String)advStats.get( CONSISTENCY );
if ( consistency.equals("false") )
{
advStats.put( GRAPH_MORPHOLOGY, INCONSISTENT );
return advStats;
}
// if it has NO class structure, then return NONE
OWLClass owlThing = reasoner.getOntology().getOWLDataFactory().getOWLThing();
OWLClass owlNothing = reasoner.getOntology().getOWLDataFactory().getOWLNothing();
Set topLevels = reasoner.subClassesOf( owlThing );
// if owl:Thing has no children (toldreasoner will say this) or owl:Thing has owl:Nothing as only child (pellet says this)
if ( topLevels.size() == 0 )
{
//System.out.println(" *** Told says NONE");
advStats.put( GRAPH_MORPHOLOGY, NONE);
return advStats;
}
if ( topLevels.size() == 1 )
{
HashSet hs = (HashSet)topLevels.iterator().next();
OWLClass cls = (OWLClass)hs.iterator().next();
if ( cls.getURI().toString().equals( owlNothing.getURI().toString()) )
{
//System.out.println(" *** Reasoned says None");
advStats.put( GRAPH_MORPHOLOGY, NONE);
return advStats;
}
}
boolean hasMultipleTop = ( (reasoner.subClassesOf( owlThing )).size() > 1);
// Either a list or a tree
if ( (multC == null) || (multC.size() == 0))
{
Set classes = ont.getClasses();
for ( Iterator it = classes.iterator(); it.hasNext(); )
{
OWLClass cls = (OWLClass)it.next();
//System.out.println( "++++" + cls.getURI().toString() );
Set children = reasoner.subClassesOf( cls );
if ( children == null )
continue;
else if ( children.size() > 1 )
{
if ( hasMultipleTop )
advStats.put( GRAPH_MORPHOLOGY, TREES);
else
advStats.put( GRAPH_MORPHOLOGY, TREE);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?