/*
   * Serialize Graph to turtle format and deserialize.
   */
  @Test
  public void testTurtleSerializer() {
    initializeGraph();
    SerializingProvider provider = new JenaSerializerProvider();

    ByteArrayOutputStream serializedGraph = new ByteArrayOutputStream();
    provider.serialize(serializedGraph, mGraph.getGraph(), "text/turtle");
    InputStream in = new ByteArrayInputStream(serializedGraph.toByteArray());

    Graph deserializedGraph = parse(in, "TURTLE");
    // due to http://issues.trialox.org/jira/browse/RDF-6 we cannot just
    // check
    // that the two graphs are equals
    Assert.assertEquals(deserializedGraph.size(), mGraph.getGraph().size());
    Assert.assertEquals(deserializedGraph.hashCode(), mGraph.getGraph().hashCode());
    // isomorphism delegated to jena
    JenaGraph jenaGraphFromNTriples = new JenaGraph(deserializedGraph);
    JenaGraph jenaGraphFromTurtle = new JenaGraph(mGraph.getGraph());
    Assert.assertTrue(jenaGraphFromNTriples.isIsomorphicWith(jenaGraphFromTurtle));
  }
  /**
   * This method has no conversion calls, to it can be invoked by subclasses that wish to modify it
   * afterwards.
   *
   * @param merge
   * @return
   */
  protected MGraph exportToMGraph(boolean merge, IRI prefix) {
    // if (merge) throw new UnsupportedOperationException(
    // "Merge not implemented yet for Clerezza triple collections.");

    long before = System.currentTimeMillis();

    // No need to store, give it a name, or anything.
    MGraph root = new SimpleMGraph();
    UriRef iri = new UriRef(prefix + _id);
    // Add the import declarations for directly managed ontologies.
    if (root != null) {
      // Set the ontology ID
      root.add(new TripleImpl(iri, RDF.type, OWL.Ontology));

      if (merge) {
        log.warn(
            "Merging of Clerezza triple collections is only implemented one level down. Import statements will be preserved for further levels.");
        Iterator<Triple> it;
        Set<Resource> importTargets = new HashSet<Resource>();
        for (OWLOntologyID ontologyId : managedOntologies) {
          Graph g = getOntology(ontologyId, Graph.class, false);
          root.addAll(g);

          it = g.filter(null, OWL.imports, null);
          while (it.hasNext()) {
            IRI tgt;
            Resource r = it.next().getObject();
            try {
              if (r instanceof UriRef) tgt = IRI.create(((UriRef) r).getUnicodeString());
              else if (r instanceof Literal) tgt = IRI.create(((Literal) r).getLexicalForm());
              else tgt = IRI.create(r.toString());
              tgt = URIUtils.sanitize(tgt);
              importTargets.add(new UriRef(tgt.toString()));
            } catch (Exception ex) {
              log.error("FAILED to obtain import target from resource {}", r);
              continue;
            }
          }

          it = g.filter(null, RDF.type, OWL.Ontology);
          while (it.hasNext()) {
            NonLiteral ontology = it.next().getSubject();
            log.debug("Removing all triples related to {} from {}", ontology, iri);
            Iterator<Triple> it2 = g.filter(ontology, null, null);
            while (it2.hasNext()) root.remove(it2.next());
          }

          /*
           * Reinstate import statements, though. If imported ontologies were not merged earlier, we
           * are not doing it now anyway.
           */
          for (Resource target : importTargets) root.add(new TripleImpl(iri, OWL.imports, target));
        }

      } else {

        String base = prefix + getID();
        for (int i = 0; i < backwardPathLength; i++)
          base = URIUtils.upOne(URI.create(base)).toString();
        base += "/";

        // The key set of managedOntologies contains the ontology IRIs, not their storage keys.
        for (OWLOntologyID ontologyId : managedOntologies) {
          IRI physIRI =
              // ontologyId.getVersionIRI() == null ? URIUtils.sanitize(IRI
              // .create(base + ontologyId.getOntologyIRI())) : URIUtils.sanitize(IRI
              // .create(base + ontologyId.getVersionIRI()));
              IRI.create(base + OntologyUtils.encode(ontologyId));
          root.add(new TripleImpl(iri, OWL.imports, new UriRef(physIRI.toString())));
        }
      }

      log.debug(
          "Clerezza export of {} completed in {} ms.",
          getID(),
          System.currentTimeMillis() - before);
    }

    return root;
  }