//The MIT License // // Copyright (c) 2004 Mindswap Research Group, University of Maryland, College Park // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. package org.mindswap.swoop.renderer.entity; import java.awt.Component; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.net.URI; import java.net.URISyntaxException; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.swing.JEditorPane; import org.apache.commons.lang.StringEscapeUtils; import org.mindswap.swoop.SwoopDisplayPanel; import org.mindswap.swoop.SwoopModel; import org.mindswap.swoop.TermsDisplay; import org.mindswap.swoop.renderer.BaseEntityRenderer; import org.mindswap.swoop.renderer.SwoopEditableRenderer; import org.mindswap.swoop.renderer.SwoopEntityRenderer; import org.mindswap.swoop.renderer.SwoopRenderingVisitor; import org.mindswap.swoop.utils.owlapi.DefaultShortFormProvider; import org.mindswap.swoop.utils.owlapi.OWLDescriptionFinder; import org.mindswap.swoop.utils.owlapi.QNameShortFormProvider; import org.semanticweb.owl.io.RendererException; import org.semanticweb.owl.io.ShortFormProvider; import org.semanticweb.owl.model.OWLAnd; import org.semanticweb.owl.model.OWLAnnotationInstance; import org.semanticweb.owl.model.OWLAnnotationProperty; import org.semanticweb.owl.model.OWLBooleanDescription; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataAllRestriction; import org.semanticweb.owl.model.OWLDataCardinalityRestriction; import org.semanticweb.owl.model.OWLDataEnumeration; 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.OWLDataSomeRestriction; import org.semanticweb.owl.model.OWLDataType; import org.semanticweb.owl.model.OWLDataValue; import org.semanticweb.owl.model.OWLDataValueRestriction; import org.semanticweb.owl.model.OWLDescription; import org.semanticweb.owl.model.OWLDifferentIndividualsAxiom; import org.semanticweb.owl.model.OWLDisjointClassesAxiom; import org.semanticweb.owl.model.OWLEntity; import org.semanticweb.owl.model.OWLEnumeration; import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; import org.semanticweb.owl.model.OWLEquivalentPropertiesAxiom; import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.model.OWLFrame; 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.OWLNamedObject; import org.semanticweb.owl.model.OWLNot; import org.semanticweb.owl.model.OWLObjectAllRestriction; import org.semanticweb.owl.model.OWLObjectCardinalityRestriction; import org.semanticweb.owl.model.OWLObjectProperty; import org.semanticweb.owl.model.OWLObjectPropertyInstance; import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; import org.semanticweb.owl.model.OWLObjectSomeRestriction; import org.semanticweb.owl.model.OWLObjectValueRestriction; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOr; import org.semanticweb.owl.model.OWLProperty; import org.semanticweb.owl.model.OWLPropertyDomainAxiom; import org.semanticweb.owl.model.OWLRestriction; 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.OntologyHelper; /** * @author Dave * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class TurtleEntityRenderer extends BaseEntityRenderer implements SwoopEditableRenderer, SwoopEntityRenderer { protected class TurtleVisitor implements org.mindswap.swoop.renderer.SwoopRenderingVisitor { ShortFormProvider shortForms; boolean indenting = true; StringWriter sw; PrintWriter pw; int indentLevel = 0; public TurtleVisitor(ShortFormProvider shortForms) { this.shortForms = shortForms; reset(); } public String result() { return sw.toString(); } public void reset() { sw = new StringWriter(); pw = new PrintWriter( sw ); } // done public void visit( OWLDataValue cd ) throws OWLException { pw.print( "\"" + escape(cd.getValue()) + "\""); /* Only show it if it's not string */ URI dvdt = cd.getURI(); // enter the data value URI into the qname provider so we can print its prefix out properl myQNameProvider.shortForm(dvdt); String dvlang = cd.getLang(); if ( dvdt!=null) { pw.print( "^^" + encodeHLink(dvdt, shortForms.shortForm(dvdt))); } else { if (dvlang!=null) { pw.print( "@" + escape(dvlang) ); } } } // done public void visit( OWLAnd and ) throws OWLException { try { URI uri = new URI(OWL_INTERSECTIONOF); pw.print( encodeHLink(uri, shortForms.shortForm(uri)) + TAB + "("+ SPACE); pw.print(BREAK); indentLevel ++; for ( Iterator it = and.getOperands().iterator();it.hasNext(); ) { OWLDescription desc = (OWLDescription) it.next(); System.out.println( desc ); pw.println(getIndentString()); desc.accept( this ); if (it.hasNext()) { pw.println(BREAK); } } indentLevel --; pw.print(SPACE + ")" + SPACE); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLOr or ) throws OWLException { try { URI uri = new URI(OWL_UNIONOF); pw.print( encodeHLink(uri, shortForms.shortForm(uri)) + TAB + "("+ SPACE); pw.print(BREAK); indentLevel ++; for ( Iterator it = or.getOperands().iterator();it.hasNext(); ) { OWLDescription desc = (OWLDescription) it.next(); pw.print(getIndentString()); desc.accept( this ); if (it.hasNext()) { pw.println(BREAK); } } indentLevel --; pw.print(SPACE + ")" + SPACE); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLNot not ) throws OWLException { try { URI uri = new URI(OWL_COMPLEMENTOF); pw.print( encodeHLink(uri, shortForms.shortForm(uri)) + TAB + SPACE); pw.print(BREAK); indentLevel ++; OWLDescription desc = not.getOperand(); pw.print(getIndentString()); desc.accept(this); indentLevel --; pw.print(SPACE + SPACE); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLEnumeration enumeration ) throws OWLException { try { URI uri = new URI(OWL_ONEOF); pw.print( encodeHLink(uri, shortForms.shortForm(uri)) + TAB + "("+ SPACE); pw.print(BREAK); indentLevel ++; for ( Iterator it = enumeration.getIndividuals().iterator();it.hasNext(); ) { OWLIndividual ind = (OWLIndividual) it.next(); pw.print(getIndentString()); ind.accept( this ); if (it.hasNext()) { pw.print(BREAK); } } indentLevel --; pw.print(SPACE + ")" + SPACE); } catch (Exception ex) { ex.printStackTrace(); } } // DONE public void visit( OWLObjectSomeRestriction restriction ) throws OWLException { try { pw.print("[ "+SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getObjectProperty().accept( this ); pw.print(";"+BREAK); // avoid indentation uri = new URI(OWL_SOMEVALUESFROM); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); OWLDescription desc = restriction.getDescription(); //System.out.println( "Obj Restriction: " +desc.getClass().toString() ); if (!(desc instanceof OWLClass) && !(desc instanceof OWLRestriction)) pw.print("[ "); if (desc instanceof OWLRestriction){ indentLevel ++; pw.print(BREAK + getIndentString()); } desc.accept( this ); if (!(desc instanceof OWLClass) && !(desc instanceof OWLRestriction)) pw.print(" ]"); if (desc instanceof OWLRestriction){ indentLevel --; } println(); print(" ]"); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLObjectAllRestriction restriction ) throws OWLException { try { pw.print("[ "+SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getObjectProperty().accept( this ); pw.print(";"+BREAK); // avoid indentation uri = new URI(OWL_ALLVALUESFROM); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); OWLDescription desc = restriction.getDescription(); if (!(desc instanceof OWLClass) && !(desc instanceof OWLRestriction)) pw.print("[ "); if (desc instanceof OWLRestriction){ indentLevel ++; pw.print(BREAK + getIndentString()); } desc.accept( this ); if (!(desc instanceof OWLClass) && !(desc instanceof OWLRestriction)) pw.print(" ]"); if (desc instanceof OWLRestriction){ indentLevel --; } println(); print(" ]"); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLObjectValueRestriction restriction ) throws OWLException { try { pw.print("[ "+SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getObjectProperty().accept( this ); pw.print(";"+BREAK); // avoid indentation uri = new URI(OWL_HASVALUE); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getIndividual().accept( this ); println(); print(" ]"); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLDataSomeRestriction restriction ) throws OWLException { try { pw.print("[ "+SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getDataProperty().accept( this ); pw.print(";"+BREAK); // avoid indentation uri = new URI(OWL_SOMEVALUESFROM); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); OWLDataRange ran = restriction.getDataType(); if (!(ran instanceof OWLClass)) pw.print("[ "); ran.accept( this ); if (!(ran instanceof OWLClass)) pw.print(" ]"); println(); print(" ]"); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLDataAllRestriction restriction ) throws OWLException { try { pw.print("[ "+SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getDataProperty().accept( this ); pw.print(";"+BREAK); // avoid indentation uri = new URI(OWL_ALLVALUESFROM); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); OWLDataRange ran = restriction.getDataType(); if (!(ran instanceof OWLClass)) pw.print("[ "); ran.accept( this ); if (!(ran instanceof OWLClass)) pw.print(" ]"); println(); print(" ]"); } catch (Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLObjectCardinalityRestriction restriction ) throws OWLException { try { pw.print("[ " + SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getObjectProperty().accept( this ); pw.print(";"+BREAK); // avoid syntax indentation if ( restriction.isExactly() ) { uri = new URI(OWL_CARDINALITY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB + restriction.getAtLeast()); } else if ( restriction.isAtMost() ) { uri = new URI(OWL_MAXCARDINALITY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB + restriction.getAtMost()); } else if ( restriction.isAtLeast() ) { uri = new URI(OWL_MINCARDINALITY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB + restriction.getAtLeast()); } pw.print(BREAK); print(" ]"); } catch(Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLDataCardinalityRestriction restriction ) throws OWLException { try { pw.print("[ " + SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getDataProperty().accept( this ); pw.print(";"+BREAK); // avoid syntax indentation if ( restriction.isExactly() ) { uri = new URI(OWL_CARDINALITY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB + restriction.getAtLeast()); } else if ( restriction.isAtMost() ) { uri = new URI(OWL_MAXCARDINALITY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB + restriction.getAtMost()); } else if ( restriction.isAtLeast() ) { uri = new URI(OWL_MINCARDINALITY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB + restriction.getAtLeast()); } pw.print(BREAK); print(" ]"); } catch(Exception ex) { ex.printStackTrace(); } } // done public void visit( OWLDataValueRestriction restriction ) throws OWLException { try { pw.print("[ " + SPACE); URI uri = new URI(OWL_RESTRICTION); pw.print( encodeHLink(RDF_TYPE_URI, "a") + TAB + encodeHLink(uri, shortForms.shortForm(uri)) + ";" + BREAK); uri = new URI(OWL_ONPROPERTY); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getDataProperty().accept( this ); pw.print(";"+BREAK); // avoid syntax indentation uri = new URI(OWL_HASVALUE); print( SPACE + SPACE + encodeHLink(uri, shortForms.shortForm(uri)) + TAB); restriction.getValue().accept( this ); println(); print(" ]"); } catch(Exception ex) { ex.printStackTrace(); } } public void visit( OWLEquivalentClassesAxiom axiom ) throws OWLException { pw.print("!!OWLEquivalentClassesAxiom!!"); /* try { URI uri = new URI(OWL_EQUIVALENTCLASS); for ( Iterator it = axiom.getEquivalentClasses().iterator(); it.hasNext(); ) { OWLDescription eq = (OWLDescription)it.next(); print( encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); reset(); if (!(eq instanceof OWLClass)) // only indent if eq is an anon class { indentLevel ++; pw.print(BREAK + getIndentString()); } eq.accept( this ); if (!(eq instanceof OWLClass)) // un-indent indentLevel --; pw.print(result() + ";" + BREAK); } } catch (Exception ex) { ex.printStackTrace(); } */ } public void visit( OWLDisjointClassesAxiom axiom ) throws OWLException { pw.print("!!OWLDisjointClassesAxiom!!"); /* try { URI uri = new URI(OWL_DISJOINTWITH); for ( Iterator it = axiom.getDisjointClasses().iterator(); it.hasNext(); ) { OWLDescription desc = (OWLDescription)it.next(); reset(); desc.accept( this ); print(encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB + result() + ";" + BREAK); } } catch (Exception ex) { ex.printStackTrace(); } */ } // done ... untested public void visit( OWLSubClassAxiom axiom ) throws OWLException { pw.print("!!OWLSubClassAxiom!!"); /* pw.print(" ????? SubClassOf("); axiom.getSubClass().accept( this ); pw.print(" "); axiom.getSuperClass().accept( this ); pw.print(") ??????"); */ } public void visit( OWLEquivalentPropertiesAxiom axiom ) throws OWLException { pw.print("!!OWLEquivalentPropertiesAxiom!!"); /* pw.print("EquivalentProperties("); for ( Iterator it = axiom.getProperties().iterator(); it.hasNext(); ) { OWLProperty prop = (OWLProperty) it.next(); prop.accept( this ); if (it.hasNext()) { pw.print(" "); } } pw.print(")"); */ } public void visit( OWLSubPropertyAxiom axiom ) throws OWLException { pw.print("!!OWLSubPropertyAxiom!!"); /* pw.print("SubPropertyOf("); axiom.getSubProperty().accept( this ); pw.print(" "); axiom.getSuperProperty().accept( this ); pw.print(")"); */ } public void visit( OWLDifferentIndividualsAxiom ax) throws OWLException { pw.print("!!OWLDifferentIndividualsAxiom!!"); /* pw.print("DifferentIndividuals("); for ( Iterator it = ax.getIndividuals().iterator(); it.hasNext(); ) { OWLIndividual desc = (OWLIndividual) it.next(); desc.accept( this ); if (it.hasNext()) { pw.print(" "); } } pw.print(")"); */ } public void visit( OWLSameIndividualsAxiom ax) throws OWLException { pw.print("!!OWLSameIndividualsAxiom!!"); /* pw.print("SameIndividual("); for ( Iterator it = ax.getIndividuals().iterator(); it.hasNext(); ) { OWLIndividual desc = (OWLIndividual) it.next(); desc.accept( this ); if (it.hasNext()) { pw.print(" "); } } pw.print(")"); */ } // done public void visit( OWLDataType ocdt ) throws OWLException { pw.print( encodeHLink(ocdt.getURI(), shortForms.shortForm(ocdt.getURI())) ); } // done public void visit( OWLDataEnumeration enumeration ) throws OWLException { try { URI uri = new URI(OWL_ONEOF); print( encodeHLink(uri, shortForms.shortForm(uri)) + TAB + "("+ SPACE); indentLevel ++; for ( Iterator it = enumeration.getValues().iterator();it.hasNext(); ) { OWLDescription desc = (OWLDescription) it.next(); pw.print(getIndentString()); desc.accept( this ); if (it.hasNext()) { println(BREAK); } } indentLevel --; pw.print(SPACE + ")" + SPACE); } catch (Exception ex) { throw new OWLException(ex.toString()); } } // done public void visit( OWLClass clazz ) throws OWLException { pw.print( encodeHLink(clazz.getURI(), shortForms.shortForm( clazz.getURI() ))); } // done public void visit( OWLIndividual ind ) throws OWLException { if ( ind.isAnonymous() ) { pw.print( "[ ]" ); // anonymous individual } else { pw.print( encodeHLink(ind.getURI(), shortForms.shortForm(ind.getURI())) ); } } // done public void visit( OWLObjectProperty prop ) throws OWLException { pw.print( encodeHLink(prop.getURI(), shortForms.shortForm( prop.getURI())) ); } // done public void visit( OWLDataProperty prop ) throws OWLException { pw.print( encodeHLink(prop.getURI(), shortForms.shortForm( prop.getURI())) ); } public void visit(OWLAnnotationProperty arg0) throws OWLException { // TODO Auto-generated method stub } public void visit(OWLAnnotationInstance arg0) throws OWLException { // TODO Auto-generated method stub } public void visit(OWLFrame arg0) throws OWLException { // TODO Auto-generated method stub } public void visit(OWLOntology arg0) throws OWLException { // TODO Auto-generated method stub } private String getIndentString() { String indentation = ""; for (int i = 0; i < indentLevel; i ++) indentation = indentation + TAB; return indentation; } // private convenient printing functions to use correct indentation private void print(String toBeWritten) { pw.print(getIndentString() + toBeWritten); } private void println(String toBeWritten) { pw.println(getIndentString()+ toBeWritten + BREAK); } private void println() { pw.print(BREAK); } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLFunctionalPropertyAxiom) */ public void visit(OWLFunctionalPropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLInverseFunctionalPropertyAxiom) */ public void visit(OWLInverseFunctionalPropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLTransitivePropertyAxiom) */ public void visit(OWLTransitivePropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLSymmetricPropertyAxiom) */ public void visit(OWLSymmetricPropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLInversePropertyAxiom) */ public void visit(OWLInversePropertyAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLPropertyDomainAxiom) */ public void visit(OWLPropertyDomainAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom) */ public void visit(OWLObjectPropertyRangeAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLDataPropertyRangeAxiom) */ public void visit(OWLDataPropertyRangeAxiom node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLObjectPropertyInstance) */ public void visit(OWLObjectPropertyInstance node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLDataPropertyInstance) */ public void visit(OWLDataPropertyInstance node) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.semanticweb.owl.model.OWLObjectVisitor#visit(org.semanticweb.owl.model.OWLIndividualTypeAssertion) */ public void visit(OWLIndividualTypeAssertion node) throws OWLException { // TODO Auto-generated method stub } } protected class TurtleShortFormProvider extends DefaultShortFormProvider { public String shortForm(URI uri) { String name = super.shortForm( uri ); if ( name.indexOf(":") == -1 ) name = ":" + name; return name; } } private static final String TURTLE_NAME = "Turtle"; private static final String TURTLE_CONTENT_TYPE = "text/html"; private static final String TAB = "     "; private static final String SPACE = " "; private static final String BREAK = "<br>"; private static final String LT = "<"; private static final String GT = ">"; private List myUserNS; private Set myAllURIs; private QNameShortFormProvider myQNameProvider; private SwoopModel myModel; private static final String PERIOD = " ."; public void render(OWLEntity entity, SwoopModel swoopModel, Writer writer) throws RendererException { try{ fontSize = swoopModel.getFontSize(); OWLOntology ontology = swoopModel.getSelectedOntology(); URI logical = ontology.getLogicalURI(); String defaultNS = logical + "#"; //System.out.println( defaultNS ); this.myAllURIs = OntologyHelper.allURIs(ontology); this.myQNameProvider = new QNameShortFormProvider(); this.myModel = swoopModel; StringWriter sw = new StringWriter(); PrintWriter buffer = new PrintWriter(sw); StringWriter sw2 = new StringWriter(); PrintWriter buffer2 = new PrintWriter(sw2); buffer2.println("<FONT FACE=\""+swoopModel.getFontFace()+"\" SIZE="+fontSize+">" ); super.render(entity, swoopModel, buffer); // Actually used Namespace declarations for (Iterator it = myQNameProvider.touchedPrefixes.keySet().iterator(); it.hasNext();){ String prefix = (String) it.next(); String ns = (String) myQNameProvider.touchedPrefixes.get(prefix); if (!editorEnabled) buffer2.println("@prefix " + escape(prefix) + ": " + LT + "<a href=" + escape(ns) + ">"+escape(ns)+"</a>"+GT + PERIOD + BREAK); else buffer2.println("@prefix " + escape(prefix) + ": " + LT + escape(ns)+GT + PERIOD + BREAK); } // if showing fulll name, add prefix if (!myModel.getShowQNames()) if (!editorEnabled) buffer2.println("@prefix : " + LT + "<a href=" + escape(defaultNS) + ">" + escape(defaultNS) + "</a>"+GT + PERIOD + BREAK ); else buffer2.println("@prefix : " + LT + escape(defaultNS) +GT + PERIOD + BREAK ); String turtleText = repairForEndOfStatement(sw.getBuffer().toString()) + BREAK + getOtherStatements(entity) + "</FONT>"; buffer2.println(BREAK); String headerText = sw2.getBuffer().toString(); writer.write(headerText + turtleText); } catch (OWLException ex){ ex.printStackTrace(); } catch (IOException ex){ ex.printStackTrace(); } } public SwoopRenderingVisitor createVisitor() { if (myModel.getShowQNames()) return new TurtleVisitor(this.myQNameProvider); return new TurtleVisitor( new TurtleShortFormProvider() ); } protected void renderAnnotationProperty(OWLAnnotationProperty prop) throws OWLException { // TODO Auto-generated method stub } /* Well dodgy coding */ protected void renderAnnotationContent(Object o) throws OWLException { if (o instanceof URI) { print( encodeHLink((URI)o, myQNameProvider.shortForm((URI)o)) ); } else if (o instanceof OWLIndividual) { TurtleVisitor TV = (TurtleVisitor)visitor; OWLIndividual ind = (OWLIndividual)o; ind.accept(TV); print( TV.result() ); } else if (o instanceof OWLDataValue) { OWLDataValue dv = (OWLDataValue) o; print("\"" + escape(dv.getValue()) + "\""); /* Only show it if it's not string */ URI dvdt = dv.getURI(); String dvlang = dv.getLang(); if (dvdt != null) { print("^^" + escape(dvdt)); // if (!dv.getURI().toString().equals( // XMLSchemaSimpleDatatypeVocabulary.INSTANCE.getString())) { // print( "^^" + dv.getURI() ); // } } else { if (dvlang != null) { print("@" + escape(dvlang)); } } } else { print("\"" + escape(o) + "\""); } } /** Render the annotations for an object */ protected void renderAnnotations(OWLNamedObject object ) throws OWLException { /* Bit nasty this -- annotations result in a new axiom */ TurtleVisitor TV = (TurtleVisitor)visitor; String indentation = TV.getIndentString(); if (!object.getAnnotations(reasoner.getOntology()).isEmpty()) { for (Iterator it = object.getAnnotations(reasoner.getOntology()).iterator(); it.hasNext();) { OWLAnnotationInstance oai = (OWLAnnotationInstance) it.next(); print(indentation + encodeHLink(oai.getProperty().getURI(), myQNameProvider.shortForm(oai.getProperty().getURI())) + TAB); /* Just whack out the content. This isn't quite right... */ renderAnnotationContent(oai.getContent()); if (it.hasNext()) print(";"+BREAK); /* Do we need to do this??? */ visitor.reset(); oai.accept(visitor); } } } protected void renderClass(OWLClass clazz) throws OWLException { try{ OWLClass owlThing = reasoner.getOntology().getOWLDataFactory().getOWLThing(); TurtleVisitor TV = (TurtleVisitor)visitor; // rendering type ShortFormProvider shortForms = null; if (myModel.getShowQNames()) shortForms = this.myQNameProvider; else shortForms = new TurtleShortFormProvider(); String classQName = shortForms.shortForm(clazz.getURI()); URI classURI = new URI(OWL_CLASS); // print the clacss and its type println(encodeHLink(clazz.getURI(), classQName) + TAB + encodeHLink(new URI(RDF_TYPE_URI), "a") + SPACE + encodeHLink(classURI, myQNameProvider.shortForm(classURI)) + ";"); TV.indentLevel++; // print ANNOTATIONS if(!clazz.getAnnotations(reasoner.getOntology()).isEmpty()) { renderAnnotations(clazz); println(";"); } // print INTERSECTIONs equivalent to this class Iterator it = OWLDescriptionFinder.getIntersections(clazz, reasoner.getOntologies()).iterator(); while(it.hasNext()) { OWLAnd intersection = (OWLAnd) it.next(); intersection.accept(TV); print(TV.getIndentString() + TV.result() +";" + BREAK); } // print UNIONs equivalent to this class it = OWLDescriptionFinder.getUnions(clazz, reasoner.getOntologies()).iterator(); while(it.hasNext()) { OWLOr union = (OWLOr) it.next(); union.accept(TV); print(TV.getIndentString() + TV.result() + ";" + BREAK); } // print ENUMERATIONs of classes that are equivalent to this class it = OWLDescriptionFinder.getEnumerations(clazz, reasoner.getOntologies()).iterator(); while(it.hasNext()) { OWLEnumeration oneOf = (OWLEnumeration) it.next(); oneOf.accept(TV); print(TV.getIndentString() + TV.result() + ";" + BREAK); } // print EQUIVALENT classes Set eqs = OWLDescriptionFinder.getEquivalentClasses(clazz, reasoner.getOntologies()); it = eqs.iterator(); while(it.hasNext()) { OWLDescription desc = (OWLDescription) it.next(); if(!(desc instanceof OWLRestriction || desc instanceof OWLClass)) it.remove(); } if(reasoner.isConsistent(clazz)) eqs.addAll(reasoner.equivalentClassesOf(clazz)); // add all named equivalent classes it = eqs.iterator(); URI uri = new URI(OWL_EQUIVALENTCLASS); while (it.hasNext()) { OWLDescription eq = (OWLDescription)it.next(); print( TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); TV.reset(); if (!(eq instanceof OWLClass)) // only indent if eq is an anon class { TV.indentLevel ++; print(BREAK + TV.getIndentString()); } eq.accept(TV); if (!(eq instanceof OWLClass)) // un-indent TV.indentLevel --; print(TV.result() + ";" + BREAK); } // DISJOINT CLASSES Set disjoints = OWLDescriptionFinder.getDisjoints(clazz, reasoner.getOntologies()); uri = new URI(OWL_DISJOINTWITH); for (it = disjoints.iterator(); it.hasNext(); ) { OWLDescription desc = (OWLDescription)it.next(); TV.reset(); desc.accept(TV); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB + TV.result() + ";" + BREAK); } // SUBCLASS OF // acquiring all non-inferred super classes (named or anon) Set supers = OWLDescriptionFinder.getSuperClasses(clazz, reasoner.getOntologies()); if(reasoner.isConsistent(clazz)) { // remove all the named classes because reasoner will eventually add them it = supers.iterator(); while(it.hasNext()) if(it.next() instanceof OWLClass) it.remove(); // add all the named superclasses (including inferred) supers.addAll(reasoner.superClassesOf(clazz)); // remove owl:Thing from the superclass set it = supers.iterator(); while(it.hasNext()) { Object o = it.next(); if(o instanceof Set && ((Set)o).contains(owlThing)) it.remove(); } } uri = new URI(RDFS_SUBCLASSOF); for (it = supers.iterator(); it.hasNext(); ) { Object obj = (Object)it.next(); // if there is more than one element for this line // we only print the first one. rest are either // equivalent classes (or properties) if(obj instanceof Collection) obj = ((Collection)obj).iterator().next(); TV.reset(); OWLDescription desc = (OWLDescription)obj; print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); if (desc instanceof OWLRestriction) { TV.indentLevel ++; print(BREAK); } else if (desc instanceof OWLBooleanDescription ) { TV.indentLevel ++; print(BREAK); } desc.accept(TV); if (desc instanceof OWLRestriction) { print( TV.getIndentString() + TV.result()); TV.indentLevel --; } else if (desc instanceof OWLBooleanDescription ) { print( TV.getIndentString() + "[ " + TV.result() + " ]"); TV.indentLevel --; } else print(TV.result()); pw.print(";" + BREAK); } TV.indentLevel --; } catch (Exception ex) { ex.printStackTrace(); } } protected void renderDataProperty(OWLDataProperty prop) throws OWLException { try{ TurtleVisitor TV = (TurtleVisitor)visitor; // rendering type ShortFormProvider shortForms = null; if (myModel.getShowQNames()) shortForms = this.myQNameProvider; else shortForms = new TurtleShortFormProvider(); String classQName = shortForms.shortForm(prop.getURI()); URI typeURI = new URI(OWL_DATAPROPERTY); // print the clacss and its type println(encodeHLink(prop.getURI(), classQName) + TAB + encodeHLink(new URI(RDF_TYPE_URI), "a") + SPACE + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); TV.indentLevel ++; // annotations if(!prop.getAnnotations(reasoner.getOntology()).isEmpty()) { renderAnnotations(prop); println(";"); } // is functional if (prop.isFunctional(reasoner.getOntologies())) { typeURI = new URI(OWL_FUNCTIONALPROP); println(TV.getIndentString() + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); } // domain for (Iterator it = reasoner.domainsOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_DOMAIN); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); OWLDescription dom = (OWLDescription) it.next(); TV.reset(); dom.accept(TV); println( TV.result() + ";"); } // range for (Iterator it = reasoner.rangesOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_RANGE); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); OWLDataRange ran = (OWLDataRange) it.next(); TV.reset(); ran.accept(TV); println( TV.result() + ";"); } // print out its superclasses for (Iterator it = reasoner.superPropertiesOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_SUBPROPERTYOF); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); Object obj = it.next(); if (obj instanceof OWLDescription) { OWLDescription dom = (OWLDescription) it.next(); TV.reset(); dom.accept(TV); println( TV.result() + ";"); } else // could be a set of OWLDataproperty { Set set = (Set)obj; for (Iterator i = set.iterator(); i.hasNext();) { OWLDataProperty dom = (OWLDataProperty)i.next(); TV.reset(); dom.accept(TV); println( TV.result() + ";"); } } } } catch (Exception ex) { ex.printStackTrace(); } } protected void renderDataType(OWLDataType datatype) throws OWLException { // TODO Auto-generated method stub } protected void renderIndividual(OWLIndividual ind) throws OWLException { try{ ShortFormProvider shortForms = null; if (myModel.getShowQNames()) shortForms = this.myQNameProvider; else shortForms = new TurtleShortFormProvider(); OWLClass owlThing = reasoner.getOntology().getOWLDataFactory().getOWLThing(); if ( ind.isAnonymous() ) print("[ ]"); // rendering anon individuals (not sure if this is correct). else println(encodeHLink(ind.getURI(), shortForms.shortForm(ind.getURI())) ); TurtleVisitor TV = (TurtleVisitor)visitor; TV.indentLevel++; // defined types Set types = OWLDescriptionFinder.getTypes(ind, reasoner.getOntologies()); /* if(reasoner.isConsistent()) { // remove all the named classes because reasoner will eventually add them Iterator i = types.iterator(); while(i.hasNext()) if(i.next() instanceof OWLClass) i.remove(); // add all the named superclasses types.addAll(reasoner.typesOf(ind)); } // remove owl:Thing from the superclass set Iterator i = types.iterator(); while(i.hasNext()) { Object o = i.next(); if(o instanceof Set && ((Set)o).contains(owlThing)) i.remove(); }*/ //System.out.println(types.size()); for (Iterator it = types.iterator(); it.hasNext();) { Object obj = (Object)it.next(); // if there is more than one element for this line // we only print the first one. rest are either // equivalent classes (or properties) if(obj instanceof Collection) obj = ((Collection)obj).iterator().next(); OWLDescription desc = (OWLDescription)obj; TV.reset(); desc.accept(TV); print(TV.getIndentString() + TAB + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + TV.result() + ";"); if (it.hasNext()) println(); } if (types.size() != 0) println(); // annotations if(!ind.getAnnotations(reasoner.getOntology()).isEmpty()) { renderAnnotations(ind); println(";"); } // object property values Map propertyValues = ind.getObjectPropertyValues(reasoner.getOntologies()); for (Iterator it = propertyValues.keySet().iterator(); it.hasNext();) { OWLObjectProperty prop = (OWLObjectProperty) it.next(); Set vals = (Set) propertyValues.get(prop); for (Iterator valIt = vals.iterator(); valIt.hasNext();) { OWLIndividual oi = (OWLIndividual) valIt.next(); TV.reset(); oi.accept(TV); print(TV.getIndentString() + encodeHLink(prop.getURI(), shortForms.shortForm(prop.getURI())) + TAB + TV.result() + ";"); if (valIt.hasNext()) { println(); } } if (it.hasNext()) println(); } if (propertyValues.size() != 0) println(); // data property values Map dataValues = ind.getDataPropertyValues(reasoner.getOntologies()); for (Iterator it = dataValues.keySet().iterator(); it.hasNext();) { OWLDataProperty prop = (OWLDataProperty) it.next(); Set vals = (Set) dataValues.get(prop); for (Iterator valIt = vals.iterator(); valIt.hasNext();) { OWLDataValue dtv = (OWLDataValue) valIt.next(); TV.reset(); dtv.accept(TV); print(TV.getIndentString() + encodeHLink(prop.getURI(), shortForms.shortForm(prop.getURI())) + TAB + TV.result() + ";"); //System.out.println("Datatype Prop:" + prop.getURI().toString()); if (valIt.hasNext()) { println(); } } if (it.hasNext()) println(); } TV.indentLevel++; } catch (Exception ex) { ex.printStackTrace(); } } protected void renderObjectProperty(OWLObjectProperty prop) throws OWLException { try{ TurtleVisitor TV = (TurtleVisitor)visitor; // rendering type ShortFormProvider shortForms = null; if (myModel.getShowQNames()) shortForms = this.myQNameProvider; else shortForms = new TurtleShortFormProvider(); String classQName = shortForms.shortForm(prop.getURI()); URI typeURI = new URI(OWL_OBJECTPROPERTY); // print the class and its type println(encodeHLink(prop.getURI(), classQName) + TAB + encodeHLink(new URI(RDF_TYPE_URI), "a") + SPACE + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); TV.indentLevel ++; // print out ANNOTATIONS if(!prop.getAnnotations(reasoner.getOntology()).isEmpty()) { renderAnnotations(prop); println(";"); } // is TRANSITIVE? if (prop.isTransitive(reasoner.getOntologies())) { typeURI = new URI(OWL_TRANSITIVEPROP); print(TV.getIndentString() + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); } // is FUNCTIONAL? if (prop.isFunctional(reasoner.getOntologies())) { typeURI = new URI(OWL_FUNCTIONALPROP); println(TV.getIndentString() + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); } // is INVERSE FUNCTIONAL? if (prop.isInverseFunctional(reasoner.getOntologies())) { typeURI = new URI(OWL_INVERSEFUNCTIONALPROP); println(TV.getIndentString() + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); } // is SYMMETRIC? if (prop.isSymmetric(reasoner.getOntologies())) { typeURI = new URI(OWL_SYMMETRICPROP); println(TV.getIndentString() + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + encodeHLink(typeURI, myQNameProvider.shortForm(typeURI)) + ";"); } // EQUIVALENT properties for (Iterator it = reasoner.equivalentPropertiesOf(prop).iterator(); it.hasNext();) { URI uri = new URI(OWL_EQUIVALENTPROP); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); Object equi = (Object) it.next(); OWLObjectProperty op = (OWLObjectProperty)equi; TV.reset(); op.accept(TV); println( TV.result() + ";"); } // INVERSE for (Iterator it = prop.getInverses(reasoner.getOntologies()).iterator(); it.hasNext();) { URI uri = new URI(OWL_INVERSEOF); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); OWLObjectProperty inv = (OWLObjectProperty) it.next(); TV.reset(); inv.accept(TV); println( TV.result() + ";"); } // DOMAIN for (Iterator it = reasoner.domainsOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_DOMAIN); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); OWLDescription dom = (OWLDescription) it.next(); TV.reset(); dom.accept(TV); println( TV.result() + ";"); } // RANGE for (Iterator it = reasoner.rangesOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_RANGE); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); OWLDescription ran = (OWLDescription) it.next(); TV.reset(); ran.accept(TV); println( TV.result() + ";"); } // print out superclasses (SUBCLASSOF) for (Iterator it = reasoner.superPropertiesOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_SUBPROPERTYOF); print(TV.getIndentString() + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB); Object Obj = it.next(); if (Obj instanceof OWLObjectProperty) { //System.out.println(Obj.getClass().toString() ); OWLObjectProperty sup = (OWLObjectProperty)Obj; TV.reset(); sup.accept(TV); println( TV.result() + ";"); } else // could be a set of ObjProperties ... very strange { Set set = (Set)Obj; for (Iterator i = set.iterator(); i.hasNext();) { OWLObjectProperty sup = (OWLObjectProperty)i.next(); TV.reset(); sup.accept(TV); println( TV.result() + ";"); } } } TV.indentLevel ++; } catch (Exception ex) { ex.printStackTrace(); } } protected void println() { pw.println(BREAK); } protected void println(String str){ pw.print(str + BREAK); } public String getContentType() { return TURTLE_CONTENT_TYPE; } public String getName() { return TURTLE_NAME; } private String getOtherStatements(OWLEntity ent) { String result = BREAK; ShortFormProvider shortForms = null; if (myModel.getShowQNames()) shortForms = this.myQNameProvider; else shortForms = new TurtleShortFormProvider(); //System.out.println(ent.getClass().toString()); try { OWLClass owlNothing = reasoner.getOntology().getOWLDataFactory().getOWLNothing(); TurtleVisitor TV = (TurtleVisitor)visitor; if (ent instanceof OWLClass) // here we render all subclasses of this OWLClass { OWLClass clazz = (OWLClass)ent; Set subs = reasoner.subClassesOf(clazz); // SUPERCLASSOF (separate triple statements) // here we only print if the set of subclass is not { owlNothing } if ( (subs.size() >= 1 && !((Set)subs.iterator().next()).contains(owlNothing)) ) { URI uri = new URI(RDFS_SUBCLASSOF); for (Iterator it = subs.iterator(); it.hasNext(); ) { Object obj = (Object)it.next(); // if there is more than one element for this line // we only print the first one. rest are either // equivalent classes (or properties) if(obj instanceof Collection) obj = ((Collection)obj).iterator().next(); OWLDescription desc = (OWLDescription)obj; TV.reset(); desc.accept(TV); result = result + TV.getIndentString() + TV.result() + TAB + encodeHLink(uri, myQNameProvider.shortForm(uri) ) + TAB + encodeHLink(clazz.getURI(), shortForms.shortForm(clazz.getURI())) + PERIOD + BREAK; } result = result + BREAK; } // as DOMAIN of properties Set propDomains = getPropertiesWithDomain(clazz, showInherited); // whether to show inherited or not URI uri = new URI(RDFS_DOMAIN); for (Iterator it = propDomains.iterator(); it.hasNext(); ) { Object obj = it.next(); OWLProperty desc = (OWLProperty)obj; TV.reset(); desc.accept(TV); result = result + TV.getIndentString() + TV.result() + TAB + encodeHLink(uri, myQNameProvider.shortForm(uri) ) + TAB + encodeHLink(clazz.getURI(), shortForms.shortForm(clazz.getURI()) )+ PERIOD + BREAK; } if (propDomains.size() > 0) result = result + BREAK; // as RANGE of properties Set propRanges = getPropertiesWithRange(clazz, showInherited); // whether to show inherited or not uri = new URI(RDFS_RANGE); for (Iterator it = propRanges.iterator(); it.hasNext(); ) { Object obj = it.next(); OWLProperty desc = (OWLProperty)obj; TV.reset(); desc.accept(TV); result = result + TV.getIndentString() + TV.result() + TAB + encodeHLink(uri, myQNameProvider.shortForm(uri) ) + TAB + encodeHLink(clazz.getURI(), shortForms.shortForm(clazz.getURI()) )+ PERIOD + BREAK; } if (propRanges.size() > 0) result = result + BREAK; // INSTANCEs of this class Set instances = new HashSet(); if (showInherited) instances = reasoner.allInstancesOf(clazz); else instances = reasoner.instancesOf(clazz); for (Iterator it = instances.iterator(); it.hasNext(); ) { Object obj = it.next(); OWLIndividual ind = (OWLIndividual)obj; result = result +TV.getIndentString() + encodeHLink(ind.getURI(), shortForms.shortForm(ind.getURI()) ) + TAB + encodeHLink(new URI(RDF_TYPE_URI), "a") + TAB + encodeHLink(clazz.getURI(), shortForms.shortForm(clazz.getURI()) )+ PERIOD + BREAK; } } else if (ent instanceof OWLProperty) // OWLDataProperty + OWLObjectProperty { OWLProperty prop = (OWLProperty) ent; for (Iterator it = reasoner.subPropertiesOf(prop).iterator(); it.hasNext();) { URI uri = new URI(RDFS_SUBPROPERTYOF); Object obj = it.next(); // if there is more than one element for this line // we only print the first one. rest are either // equivalent classes (or properties) if(obj instanceof Collection) obj = ((Collection)obj).iterator().next(); OWLProperty dom = (OWLProperty)obj; TV.reset(); dom.accept(TV); result = result + TV.result() + TAB + encodeHLink(uri, myQNameProvider.shortForm(uri)) + TAB + encodeHLink(prop.getURI(), shortForms.shortForm(prop.getURI())) + PERIOD + BREAK; } } } catch (Exception ex) { ex.printStackTrace(); } return result; } /* * SwoopRenderer method * */ public Component getDisplayComponent( SwoopDisplayPanel panel ) { if (!(panel instanceof TermsDisplay )) throw new IllegalArgumentException(); JEditorPane editorPane = BaseEntityRenderer.getEditorPane( this.getContentType(), (TermsDisplay)panel ); if (!editorEnabled) { return editorPane; } else { editorPane.setEditable(true); // adding to UI listeners of TermsDisplay //editorPane.getDocument().addDocumentListener((TermsDisplay)panel); editorPane.addMouseListener((TermsDisplay)panel); editorPane.addKeyListener((TermsDisplay)panel); } return editorPane; } private String repairForEndOfStatement(String toBeRendered){ toBeRendered = toBeRendered.trim(); while (toBeRendered.endsWith(BREAK)) toBeRendered = toBeRendered.substring(0, toBeRendered.length() - BREAK.length()); while (toBeRendered.endsWith(SPACE)) toBeRendered = toBeRendered.substring(0, toBeRendered.length() - SPACE.length()); while (toBeRendered.endsWith(TAB)) toBeRendered = toBeRendered.substring(0, toBeRendered.length() - TAB.length()); if (toBeRendered.endsWith(";")) toBeRendered = toBeRendered.substring(0, toBeRendered.length() - 1) + PERIOD; else { //System.out.println(toBeRendered.substring(toBeRendered.length() - 5)); toBeRendered = toBeRendered + PERIOD; } return toBeRendered; } private String encodeHLink(URI uri, String name) { if (!editorEnabled) return "<a href="+escape(uri)+">"+escape(name)+"</a>"; else return name; } private String encodeHLink(String uri_string, String name) throws URISyntaxException { URI uri = new URI(uri_string); if (!editorEnabled) return "<a href="+escape(uri)+">"+escape(name)+"</a>"; else return escape(name); } /* Sanity check. This way we know if message below is printed, * we are using the wrong ShortFormProvider */ public String shortForm(URI uri) { return "WRONG SHORTFORM PROVIDER!!!"; } /* (non-Javadoc) * @see org.mindswap.swoop.renderer.BaseEntityRenderer#renderForeignEntity(org.semanticweb.owl.model.OWLEntity) */ protected void renderForeignEntity(OWLEntity ent) throws OWLException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.mindswap.swoop.renderer.SwoopEditableRenderer#setEditorEnabled(boolean) */ public void setEditorEnabled(boolean mode) { editorEnabled = mode; } /* (non-Javadoc) * @see org.mindswap.swoop.renderer.SwoopEditableRenderer#isEditableText() */ public boolean isEditableText() { return editorEnabled; } }