[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: jing validation errors
Dear TC members, When I wrote the xml:id proposal, my hope was that the restriction to a single ID attribute would actually make it easier to make the schema compatible with the RNG DTD Compatibility specification, which again would resolve the errors that jing reports if called without "-i" option. I did some research and experiments. However, I did not find a solution for this. The reason is the following definition in the DTD Compatibility specification[1]: > A RELAX NG schema is compatible with this feature [ID/IDREF] if and > only if, after > schema simplification, for each data or value element that specifies > a datatype associated with a non-null ID-type, all of the following > hold: > > * its parent is an attribute element > * the first child of its attribute parent is a name element > * the first child of the element ancestor is a name element Essentially this means that one can define an attribute of type ID only if one provides the name of the attribute, and the name of an element. Why is this an issue? We have a few places in the schema where we allow arbitrary content, for instance within the <office:meta> element for meta data, or the <draw:object> element for embedded objects. XML 1.0 DTD has the concept of an ANY content type for this. RNG does not have this. One needs a definition like this: <define name="any"> <element> <zeroOrMore> <choice> <attribute> <anyName/> </attribute> <text/> <ref name="any"/> </choice> </zeroOrMore> </element> </define> I have actually taken this from RNG Tutorial[2]. In a document which does not define ID attributes this works well. But if there is a definition of an attribute of type ID somewhere in the document (let's say an xml:id attribute), then this leads to an ambiguity, because the above fragment implicitly defines an xml:id attribute which has the RNG datatype "text". That means that there are two definitions for each occurrence of an xml:id attribute now. One explicit somewhere in the schema, and an implicit one generated from the above schema fragment. The first one defines the xml:id data type to be ID, the second one "text". For pure RNG this is not an issue, but the RNG DTD Compatibility specification does not allow this. This ambiguity is reported by jing as an error in DTD compatibility mode. These are the error messages one currently gets when using jing for validation of ODF files without the "-i" switch. The obvious solution to this would be to explicitly define an xml:id attribute with type ID: <define name="any"> <element> <anyName/> <zeroOrMore> <attribute> <anyName> <except> <name>xml:id</name> </except> </anyName> </attribute> </zeroOrMore> <optional> <attribute name="xml:id"> <data type="ID"/> </attribute> </optional> <zeroOrMore> <choice> <text/> <ref name="any"/> </choice> </zeroOrMore> </element> </define> But this does not work either, because the rules that the RNG DTD Compatibility specification has for ID, and that I have cited above, require that the names of the elements on which the "xml:id" attribute can occur are defined by <name> elements, but not by name classes like <anyName>. Jing therefore reports the following error for this fragment: an "element" pattern containing an "attribute" pattern with a non-null ID-type must have a name class that contains only "choice" and "name" elements MSV reports a similar warning. Only if one replaces the "anyName" above with "<name>any</name>" the error message disappears. But this defines an element with name "any" rather than an element that may have an arbitrary name. That means, the only way to get compliant with the RNG DTD Compatibility specification (and to get no error messages for jing without disabling RNG DTD Compatibilty) would be to list the names of all elements that can take an xml:id attribute. For our own schema fragments we do know them. That is not an issue. But we don't know them for fragments we include. Well, we could forbid xml:id attributes in fragments we include, but this means ODF does not support the inclusion of schema fragments that contain xml:id attributes. That does not seem to be reasonable either. I would be glad if my analysis of the issue is incorrect, but right now, I don't see any other solution than avoiding any reference to the RNG DTD Compatibility specification, and to provide the advice to use RNG with the "-i" switch. Best regards Michael [1] http://www.oasis-open.org/committees/relax-ng/compatibility.html [2] http://www.oasis-open.org/committees/relax-ng/tutorial.html -- Michael Brauer, Technical Architect Software Engineering StarOffice/OpenOffice.org Sun Microsystems GmbH Nagelsweg 55 D-20097 Hamburg, Germany michael.brauer@sun.com http://sun.com/staroffice +49 40 23646 500 http://blogs.sun.com/GullFOSS Sitz der Gesellschaft: Sun Microsystems GmbH, Sonnenallee 1, D-85551 Kirchheim-Heimstetten Amtsgericht Muenchen: HRB 161028 Geschaeftsfuehrer: Thomas Schroeder, Wolfgang Engels, Dr. Roland Boemer Vorsitzender des Aufsichtsrates: Martin Haering
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]