Using ODF Relax NG schema to generate easier XML writing classes

Pierre pinaraf at pinaraf.info
Fri Jun 10 07:43:58 BST 2011


On Friday 10 June 2011 08:22:04 Jos van den Oever wrote:
> 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
Hi

That is a really interesting solution. The biggest trick would be not to forget 
to delete the objects at the right time if the endElement stays in the 
destructor.
But I'm not sure how it would interact with the change tracking code, unless you 
can integrate change tracking in these classes, then it's just great...

 Pierre
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/calligra-devel/attachments/20110610/4030393b/attachment.sig>


More information about the calligra-devel mailing list