Using ODF Relax NG schema to generate easier XML writing classes
Jos van den Oever
jos.van.den.oever at kogmbh.com
Fri Jun 10 07:22:04 BST 2011
Here is an idea to improve code quality in Calligra.
Currently, we use KoXmlWriter to write ODF XML. For this, functions like
startElement, endElement, addAttribute are used.
By using the Relax NG schema, we could generate a wrapper around this class
which would give us functions like
TextPWriter TextContentWriter::startTextP();
void TextHWriter::writeTextOutlineLevel(quint32 level);
that would wrap around KoXmlWriter or QXmlStreamWriter:
class TextHWriter {
friend class TextContentWriter;
private:
KoXmlWriter* const xml;
protected:
TextHWriter(KoXmlWriter* xml_) :xml(xml_) {
xml->startElement("text:h");
}
public:
~TextHWriter() { xml->endElement(); }
TextSpan startTextSpan() { return TextSpanWriter(xml); }
void writeTextOutlineLevel(quint32 level) {
xml->setAttribute("text:outline-level", level);
}
};
These writer classes would all go in header files only and should not affect the
compiled form; the functions are so simple and that they should all be
compiled away.
The classes would provide compile time checking of the code that writes XML.
It would be easier for people to write code to write XML and it would be
harder to make mistakes. When writing serialization code, one would not need
to look up the what attributes can go in which element and what type they
have; your development enviroment would tell you with autocompletion.
Can you think of a reason why this would not work?
Cheers,
Jos
--
Jos van den Oever, software architect
+49 391 25 19 15 53
074 3491911
http://kogmbh.com/legal/
More information about the calligra-devel
mailing list