/* * Created on Apr 11, 2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.mindswap.swoop.utils.rdfapi; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.URI; import java.net.URISyntaxException; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import org.mindswap.swoop.utils.owlapi.QNameShortFormProvider; import org.semanticweb.owl.io.vocabulary.OWLVocabularyAdapter; import org.semanticweb.owl.model.OWLException; import org.xml.sax.InputSource; import edu.unika.aifb.rdf.api.model.Model; import edu.unika.aifb.rdf.api.model.ModelException; import edu.unika.aifb.rdf.api.model.NodeFactory; import edu.unika.aifb.rdf.api.model.Resource; import edu.unika.aifb.rdf.api.model.Statement; import edu.unika.aifb.rdf.api.syntax.RDFParser; import edu.unika.aifb.rdf.api.util.ModelConsumer; import edu.unika.aifb.rdf.api.util.RDFManager; /** * @author ronwalf * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class OntologySerializer implements RDFSerializer { protected Model model; protected NodeFactory nodeFactory; protected OWLVocabularyAdapter owl = OWLVocabularyAdapter.INSTANCE; protected QNameShortFormProvider qnames; protected RDFWriter rdfWriter; protected URI base; protected Resource baseOntology; protected NodeComparator nodeComparator; public OntologySerializer(Resource baseOntology) { qnames = new QNameShortFormProvider(); this.baseOntology = baseOntology; try { setBase(new URI(baseOntology.getURI())); } catch (URISyntaxException e) { // Don't care } catch (ModelException e) { // Don't care } } public OntologySerializer(QNameShortFormProvider qnames) { this.qnames = qnames; } protected void gatherEntities(XMLWriter xml) throws URISyntaxException, ModelException { Model ontModel = model.find(null, nodeFactory.createResource(owl.getInstanceOf()), nodeFactory.createResource(owl.getOntology())); for (Iterator ontIter = ontModel.iterator(); ontIter.hasNext();) { Statement statement = (Statement) ontIter.next(); Resource ontologyResource = statement.subject(); if (!SwoopResourceImpl.isAnonymous(ontologyResource)) { String prefix = qnames.getPrefix(ontologyResource.getURI()); if (prefix == null) { URI ontURI = new URI(ontologyResource.getURI()); URI testName = ontURI.resolve("#none"); qnames.shortForm(testName); String prefixURI = qnames.findPrefixURI(testName); prefix = qnames.getPrefix(prefixURI); } if (prefix != null) { xml.addEntity(prefix, ontologyResource.getURI()); } } } } /** * @param xml * @param model */ public void serialize(XMLWriter xml, Model model) throws IOException, OWLException { this.model = model; try { this.nodeFactory = model.getNodeFactory(); gatherEntities(xml); } catch (ModelException e) { throw new OWLException(e); } catch (URISyntaxException e) { } rdfWriter = new RDFWriter(xml, model, qnames); if (base != null) { rdfWriter.setBase(base); } rdfWriter.startDocument(); rdfWriter.setMaxLevel(10); serializeType("Ontology Information", owl.getOntology()); rdfWriter.setMaxLevel(1); serializeType("Classes", owl.getClass_()); serializeType("Datatypes", owl.getDatatype()); serializeType("Annotation Properties", owl.getAnnotationProperty()); serializeType("Datatype Properties", owl.getDatatypeProperty()); serializeType("Object Properties", owl.getObjectProperty()); rdfWriter.serializeAll("Instances"); rdfWriter.endDocument(); } /** * @param class_ */ protected void serializeType(String description, String class_) throws IOException, OWLException { //System.out.println("Serializing type "+class_); Set subjects = new TreeSet(nodeComparator); boolean started = false; try { Model typeModel = model.find(null, nodeFactory.createResource(owl.getInstanceOf()), nodeFactory.createResource(class_)); for (Iterator statementIter = typeModel.iterator(); statementIter.hasNext();) { Statement statement = (Statement) statementIter.next(); subjects.add(statement.subject()); } //System.out.println("Serializing "+subjects); rdfWriter.serializeSubjects(subjects, description); } catch (ModelException e) { throw new OWLException(e); } } /** * @param logicalURI */ public void setBase(URI logicalURI) { base = logicalURI; nodeComparator = new NodeComparator(base.toString()); } }