W3C home > Mailing lists > Public > www-forms@w3.org > November 2001

Re: How to parse an xform document with Xerces?

From: Curt Arnold <carnold@houston.rr.com>
Date: Thu, 29 Nov 2001 22:56:45 -0600
Message-ID: <00db01c1795b$69deabb0$7600a8c0@CurtMicron>
To: "Naresh Bhatia" <NBhatia@sapient.com>
Cc: <www-forms@w3.org>
How to parse an xform document with Xerces?Comments inline

----- Original Message -----
From: Naresh Bhatia
To: 'www-forms@w3.org'
Sent: Sunday, November 25, 2001 11:12 PM
Subject: How to parse an xform document with Xerces?


I am a newbie to xforms and xml schema. Just for kicks, I am trying to parse
the xml document in section 2.7 of the xform spec using the Xerces Java
Parser 1.4.4. I have set validating and namespaceAware to true. However I am
not getting too far with this exercise. Can someone help?

1) The first error I got was on line 2, which is the <!DOCTYPE> tag:
01 <?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN">
03 <html xmlns="http://www.w3.org/1999/xhtml"
04       xmlns:xform="http://www.w3.org/2001/08/xforms"
05       xmlns:pay="http://commerce.example.com/payment"
06       xml:lang="en">
org.xml.sax.SAXException: Stopping after fatal error: White space is
required between the public identifier and the system identifier.

[ca] Omitting the system identifier was permitted in SGML, but is not
allowed in XML.

2) So I changed line 2 as follows (after looking at some other xhtml
documents!):
01 <?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
03 <html xmlns="http://www.w3.org/1999/xhtml"
04       xmlns:xform="http://www.w3.org/2001/08/xforms"
05       xmlns:pay="http://commerce.example.com/payment"
06       xml:lang="en">
This allowed me to go a little further, but now I got the following error
when I hit the <xform:xform> tag:
org.xml.sax.SAXParseException: Element type "xform:xform" must be declared.

[ca] DTD validation is not namespace aware, so the xmlns:* namespace/prefix
bindings look like normal attributes.  xform:xform is not a defined
attribute in the standard xhtml.dtd.


3) So I added the two lines shown below (#7 & #8) to tell Xerces where to
find the xforms schema?
01 <?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
03 <html xmlns="http://www.w3.org/1999/xhtml"
04       xmlns:xform="http://www.w3.org/2001/08/xforms"
05       xmlns:pay="http://commerce.example.com/payment"
06       xml:lang="en"
07       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
08       xsi:schemaLocation="http://www.w3.org/2001/08/xforms xforms.xsd">
Here xforms.xsd is the xforms schema from appendix A of the spec. Anyway now
I am getting the following error when Xerces tries to parse xforms.xsd:
org.xml.sax.SAXParseException: Schema error: prefix : [xml] cannot be
resolved to a URI.
Where do I go from here? Also why did the changes #1 and #2 above fix the
initial errors?
Thanks for your help.

[ca] Schema validation occurs after DTD validation, since you still have a
document type declaration, Xerces (and any other processor) will still try
to DTD validate before schema validating.  If you want to schema validate
without DTD validation, you will need to remove the document type
declaration.

If you really want to DTD validate against the xhtml.dtd, you can augment
the external declaration with an internal subset (maybe not for the newbie).

01 <?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"
[
<!ATTLIST html
   xmlns:xform CDATA #IMPLIED
   xmlns:pay CDATA #IMPLIED
   xml:lang CDATA #IMPLIED
   xmlns:xml CDATA "http://www.w3.org/1999/xml" #FIXED
   xmlns:xsi CDATA #IMPLIED
   xmlns:schemaLocation CDATA #IMPLIED
]
>
03 <html xmlns="http://www.w3.org/1999/xhtml"
04       xmlns:xform="http://www.w3.org/2001/08/xforms"
05       xmlns:pay="http://commerce.example.com/payment"
06       xml:lang="en"
07       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
08       xsi:schemaLocation="http://www.w3.org/2001/08/xforms xforms.xsd">

However, you would have to add definitions for any non-XHTML attribute and
element that you use.
Received on Thursday, 29 November 2001 23:58:28 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 10 March 2012 06:21:50 GMT