[prev in list] [next in list] [prev in thread] [next in thread] 

List:       calligra-devel
Subject:    Re: text:id is deprecated
From:       Boudewijn Rempt <boud () valdyas ! org>
Date:       2011-12-15 15:24:24
Message-ID: 201112151624.25153.boud () valdyas ! org
[Download RAW message or body]

On Thursday 15 December 2011 Dec, Jos van den Oever wrote:
> On Thursday, December 15, 2011 11:21:19 AM Thorsten Zachmann wrote:
> > > Well, no... Not that I could find. In fact, until yesterday encountering
> > > an xml:id when loading text or bookmarks always means "aha! rdf!", and
> > > the loading code doesn't have access to the rdf document, which it could
> > > use to figure out whether the id occurs in the rdf store as well. (I
> > > notice that KoTextMeta can save itself, but not load...)
> > 
> > Then this needs fixing. I think we should not keep the xml:ids around in
> > the loaded document.
> > 
> > Can you explain a bit more what the problem is here?
> 
> The xml:id is there because some part of the document references the element. 
> This reference should be present in some form. One form would be to have a 
> common way to reference that can be serialize as unique id's. Since different 
> parts of Calligra could reference a particular element and this reference is 
> written as xml:id, a common registry for these references is needed.

It turns out that currently, only the rdf system keeps the actual id strings after \
loading is finished, the other parts of calligra only use the id strings to build \
their mappings during loading, and recreate them during saving.

> Each element could suggest a prefix to make it easier to read, but the prefix 
> should be chosen by element and not by the code that references it, since 
> multiple parts could reference it.
> 
> A tricky part will turn out to be to make sure that keeping a reference does 
> not prevent delation. QWeakPointer could fit this role.

Well, for that I proposed yesterday to use QSharedDataPointer -- i.e., make the whole \
system work just like QString or QImage, but without the ability to get/set the \
actual identifying part out of the reference.

I've got sort of an action plan now:

1. Saving

* check all code that saves draw:id and text:id and make it also save xml:id
* keep track of the list of generated xml:id's and make double sure they are always \
unique. (I still would prefer uuids, like used for lists and rdf, but failed to \
                convince zagge :-)
* only save xml:id (formerly text:id) for KoTextBlockData if the kotextblockdata is \
                actually used for animation.
* make sure that even if two cross-references want an xml-id to be written to an \
element, that the links in other parts of the document are correct.

2. Loading

* fix the places where we use getAttribute("id") to be getAttributeNS(KoXmlNS:xml, \
                "id");
* check all that loads draw:id or text:id and make it load xml:id first, if present, \
                if not, fall back on draw:id and text:id.
* first load the objects that the xml:id's in the body may refer to, so can build the \
cross-references on loading

2. RDF

* make the KoDocumentRdf instance available to the KoDocumentResourceManager
* make KoDocumentRdf create a list of all xml:id's that are used in manifest.rdf
* on loading, when encountering an xml:id, check whether it's present in that list
*   if so, create the KoTextInlineRdf object, if not, don't (replaces the check for \
                rdfid- in the xml:id string)
* replace keeping the xml-id string with an ElementReference class that can be used
during runtime, so we don't have to do the complex xmlid rebasing after saving we do \
                now.
* make KoTextMeta actually load and save, since that was never implemented...

In passing: it would be good if we could directly attach rdf metadata to an element \
(like text:table) instead of always having to work with bookmarks.

3. KoTextBlockData

This class causes a text:id to be saved in all cases, but it's only relevant when \
animations have been added. So, only then should we save the xml:id.

-- 
Boudewijn Rempt
http://www.valdyas.org, http://www.krita.org, http://www.boudewijnrempt.nl
_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic