text:id is deprecated

Jos van den Oever jos at vandenoever.info
Fri Dec 2 19:37:14 GMT 2011


On Friday, December 02, 2011 16:38:29 PM Jos van den Oever wrote:
> After upgrading the calligra source code to the latest version of the Relax
> NG schema, a problem became apparent.
> 
> In various places, Calligra uses text:id. In ODF 1.2, text:id has been
> deprecated in many places in favor of xml:id. For <text:p> the
> specification says:
> -------
> The text:id attribute specifies an identifier for an element.
> OpenDocument consumers shall ignore a text:id attribute if it occurs on a
> <text:p> element with an xml:id attribute value. If there is no xml:id
> attribute value, then a text:id attribute should be processed as it were an
> xml:id attribute.
> OpenDocument producers may write text:id attributes for <text:p> elements
> in addition to an xml:id attribute.
> A <text:p> element shall not have an text:id attribute if it has no xml:id
> attribute value. The value of a text:id attribute shall equal the value of
> an xml:id attribute on the same <text:p> element.
> The text:id attribute is deprecated in favor of xml:id. 19.914
> -------
> The same rules are defined for draw:text-box, text:changed-region, text:h,
> and text:p. The quickest fix for this problem is to write out xml:id
> whereever text:id is written on one of these elements.
> 
> I've fixed this in libs/kotext/opendocument/KoTextWriter_p.cpp as a start.
> At least a few odf documents should now roundtrip to valid ODF documents.

Currently, still nearly half of the roundtripped ODF files fail.
 ODT: 235  (127)
 ODS: 178  (61)
 ODP: 11  (11)

Here is the list of error messages ordered by how often they occur. Note that 
these errors are not necessarily very clear. E.g. the most prevalent error 
says frame is not allowed in p. In fact <draw:frame> *is* allowed in <text:p>. 
The libxml2 library is not as clear as jing.jar which is used in 
validateODF.py. The latter gives the following error:
   error: element "draw:frame" missing required attribute "xml:id"
xml:id is needed because draw:id="shape1" is defined. Because of this xml:id 
must be defined too. I've commited a patch which should fix many instances of 
this.

You can recreate the errors with e.g.:
  calligratables --roundtrip-filename out.ods testfile.ods
  tools/scripts/validateODF.py out.ods

To test an entire directory, on can call
  tools/scripts/profileOfficeFileLoading.py testdir result.csv &> out.log
This is also what the build server does.

     78 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element p has extra content: 
frame
     41 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element table has extra 
content: table-row
      9 ERROR:RELAXNGV:RELAXNG_ERR_INVALIDATTR: Invalid attribute id for 
element page
      9 ERROR:RELAXNGV:RELAXNG_ERR_CONTENTVALID: Element table failed to 
validate content
      7 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element p has extra content: 
custom-shape
      4 ERROR:RELAXNGV:RELAXNG_ERR_INVALIDATTR: Invalid attribute id for 
element frame
      4 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element p has extra content: 
text
      3 ERROR:RELAXNGV:RELAXNG_ERR_INVALIDATTR: Invalid attribute style-name 
for element list
      3 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element p has extra content: 
g
      3 ERROR:RELAXNGV:RELAXNG_ERR_ELEMWRONG: Did not expect element tracked-
changes there
      2 RROR:RELAXNGV:RELAXNG_ERR_INVALIDATTR: Invalid attribute structure-
protected for element document-content
      2 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element p has extra content: 
rect
      2 0:ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element table has extra 
content: table-row
      1 :ERROR:RELAXNGV:RELAXNG_ERR_INVALIDATTR: Invalid attribute id for 
element page
      1 :ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element table has extra 
content: table-row
      1 ERROR:RELAXNGV:RELAXNG_ERR_EXTRACONTENT: Element p has extra content: 
ellipse
      1 :ERROR:RELAXNGV:RELAXNG_ERR_ELEMWRONG: Did not expect element tracked-
changes there
      1 :ERROR:RELAXNGV:RELAXNG_ERR_CONTENTVALID: Element table failed to 
validate content
      1 :0:ERROR:RELAXNGV:RELAXNG_ERR_CONTENTVALID: Element table failed to 
validate content

Up to date results are at:
  http://158.36.191.251:8080/ (click on "login as guest")


Cheers,
Jos





More information about the calligra-devel mailing list