On Thursday, December 15, 2011 16:24:24 PM Boudewijn Rempt wrote:
> 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.

I generally like the plan and could not find any problem. A question though: 
would the classes KoElementReferenceData know if there are any 
KoElementReference instances that point to it? If there aren't any, there is 
no need to write the xmlid.

Cheers,
Jos


_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel

Reply via email to