OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

office-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Ambiguity problems caused by ID/IDREF


Dear colleagues,

The RNG schema for ODF 1.0 is "correct" (as defined in ISO/IEC
197575-2), but is it not compatible (as defined in  "RELAX NG DTD
Compatibility"), as Alex correctly pointed out.

For example, consider the form:id attribute.  It is defined as
ID. After schema normalization (as defined in ISO/IEC 197575-2), this
attribute will occur in the define element for <form:text>. That
define element competes with the definition of anyElements.  However,
the definition of anyElements does not specify the attribute form:id
as an ID.  Therefore, the condition in the last bullet of the first
itemized list of Section 3 of "RELAX NG DTD Compatibility" is not
satisfied.

One way to solve this problem is to replace

mathMarkup =
  (attribute * { text }
   | text
   | element * { mathMarkup })*


by 

mathMarkup =
  (attribute * -  (anim:id
              | draw:control
              | draw:end-shape
              | draw:id
              | draw:shape-id
              | draw:start-shape
              | form:id
              | presentation:master-element
              | smil:targetElement
              | text:change-id
              | text:id)  { text }
   | attribute anim:id { ID }
   | attribute draw:control { IDREF }
   | attribute draw:end-shape { IDREF }
   | attribute draw:id { ID }
   | attribute draw:shape-id { IDREF }
   | attribute draw:start-shape { IDREF }
   | attribute form:id { ID }
   | attribute presentation:master-element { IDREF }
   | attribute smil:targetElement { IDREF }
   | attribute text:change-id { IDREF }
   | attribute text:id { ID }
   | text
   | element * { mathMarkup })*

and replace 

anyAttListOrElements =
  attribute * { text }*,
  anyElements

by

anyAttListOrElements =
  attribute * -  (anim:id
      | draw:control
      | draw:end-shape
      | draw:id
      | draw:shape-id
      | draw:start-shape
      | form:id
      | presentation:master-element
      | smil:targetElement
      | text:change-id
      | text:id) { text }*,
  (attribute anim:id { ID }
   | attribute draw:control { IDREF }
   | attribute draw:end-shape { IDREF }
   | attribute draw:id { ID }
   | attribute draw:shape-id { IDREF }
   | attribute draw:start-shape { IDREF }
   | attribute form:id { ID }
   | attribute presentation:master-element { IDREF }
   | attribute smil:targetElement { IDREF }
   | attribute text:change-id { IDREF }
   | attribute text:id { ID })*,
  anyElements

After this change, jing does not complain.  (But remember that jing
does not check a:defaultValue.)

You might want to be more specific.  For example, the definition of
mathMarkup can be:

mathMarkup =
  attribute local:*  { text }
   | attribute xlink:href { text }
   | attribute xlink:type { text }
   | text
   | element mml:* { mathMarkup })*

where 

namespace local = ""
namespace mml = "http://www.w3.org/1998/Math/MathML";



-- 
MURATA Makoto (FAMILY Given) <EB2M-MRT@asahi-net.or.jp>



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]