/* Ousía Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** * @file XmlOutput.hpp * * This provices an Output generator to serialize any given document to XML. * * @author Benjamin Paaßen (bpaassen@techfak.uni-bielefeld.de) */ #ifndef _OUSIA_XML_OUTPUT_HPP_ #define _OUSIA_XML_OUTPUT_HPP_ #include #include #include #include namespace ousia { namespace xml { class XmlTransformer { private: std::map transformAttributes( const std::string &name, DocumentEntity *entity, Logger &logger, bool pretty); void addNameAttribute(Handle n, std::map &attrs); void transformChildren(DocumentEntity *parentEntity, Handle parent, Logger &logger, bool pretty); Rooted transformStructuredEntity(Handle parent, Handle s, Logger &logger, bool pretty); Rooted transformAnchor(Handle parent, Handle a, Logger &logger, bool pretty); Rooted transformPrimitive(Handle parent, Handle type, Handle p, Logger &logger, bool pretty); public: /** * This writes an XML serialization of the given document to the given * output stream. The serialization is equivalent to the input XML format, * safe for the ontology references. TODO: Can we change this? If so: how? * Note, though, that the serialization will not exploit transparency. * TODO: Can we change that? * * @param doc is some Document. * @param out is the output stream the XML serialization of the document * shall be written to. * @param logger is the logger errors shall be written to. * @param resMgr is the ResourceManager to locate the ontologies and * typesystems that were imported in this document. * @param pretty is a flag that manipulates whether newlines and tabs are * used. */ void writeXml(Handle doc, std::ostream &out, Logger &logger, ResourceManager &resMgr, bool pretty); }; } } #endif