- From: Alexandre Alapetite <alexandre@alapetite.net>
- Date: Sun, 16 Nov 2008 14:11:44 +0100
- To: public-html@w3.org
Hello,
I am in the process of adding XHTML5 to a little general XML
validator. While I am not done with the HTML5 datatype provider (C#,
to be Open Source), everything went smooth, except an issue with the
validation of the @id attributes, for which I wonder how the
underlying XML/XSL/XPath processors are informed that XHTML5's @id is
an ID.
I have read for instance:
http://www.whatwg.org/specs/web-apps/current-work/#the-id-attribute
http://relaxng.org/compatibility.html#id
http://www.oasis-open.org/committees/relax-ng/xsd.html#IDAOGYR
http://www.w3.org/TR/xml-id/#with-relax-ng-validation
In the current Relax NG schemas, @id (and @xml:id) are defined in
http://syntax.whattf.org/relaxng/common.rnc
common.attrs.id =
attribute id {
common.data.id
}
common.attrs.xml-id =
attribute xml:id {
xsd:NCName
} & XMLonly
...
common.data.id =
w:ID
# xsd:string {
# pattern = "\S+"
# }
...
common.data.name =
w:ID #FIXME
There does not seem to be a rule specifying that @id is an ID, which
can be understood by a general (i.e. not specially made for (X)HTML5)
processor. The fact that w:ID can also be used for @name without error
illustrates that there is no information regarding the uniqueness of
@id.
Here comes my problem: In the Schematron schema
http://syntax.whattf.org/relaxng/assertions.sch there are some rules
making use of the XPath id() function. How does my general XSL
processor (which I use for Schematron) should be informed that
(X)HTML5's @id is an ID that can be used for the id() function?
<pattern name='contextmenu must refer to a menu'>
<rule context='h:*[@contextmenu]'>
<assert test='id(@contextmenu)/self::h:menu'>
The “contextmenu” attribute must refer to a
“menu” element.
</assert>
</rule>
</pattern>
This could of course be rewritten to void the use of the id()
function. Or, would it be better to rewrite those rules avoiding the
@id() function?
Here is an example of valid XHTML5 document that my validator (written
in C#.NET) currently reports as erroneous due to this issue:
http://syntax.whattf.org/relaxng/tests/assertions/valid/001.xhtml
Best regards,
Alexandre Alapetite
http://alexandre.alapetite.fr
Received on Sunday, 16 November 2008 13:12:21 UTC