Hi Peter,
P.S. For reference, this is how everything looks now:
Schema:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://schemas.gridforum.org/gridServices/rsl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:rsl="http://schemas.gridforum.org/gridServices/rsl"
xmlns="http://schemas.gridforum.org/gridServices/rsl">
<!-- Add this AND ns prefixes in document to make it work elementFormDefault="qualified" -->
If you want the instance document to use qualified names everywhere then you should have this attribute in the schema.
<xsd:element name="rsl" type="rslType"/>
<xsd:complexType name="rslType"> <xsd:sequence> <xsd:element name="job" type="xsd:string" minOccurs="0"/> </xsd:sequence> </xsd:complexType>
</xsd:schema>
Document:
<?xml version="1.0" encoding="UTF-8"?> <rsl xmlns:rsl="http://schemas.gridforum.org/gridServices/rsl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.gridforum.org/gridServices/rsl" xsi:schemaLocation=" http://schemas.gridforum.org/gridServices/rsl schema/test.xsd">
<!-- the following fails without ns prefixes AND elementFormDefault="qualified".
ns prefixes alone don't cut it either -->
If you have elementFormDefault="qualified" in your schema then the instance should validate as it is. I've tried this with Xerces 2.0.3 and it works fine. Here is the schema and instance:
Schema: <?xml version="1.0" encoding="UTF-8"?> <xsd:schema targetNamespace="http://schemas.gridforum.org/gridServices/rsl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:rsl="http://schemas.gridforum.org/gridServices/rsl" xmlns="http://schemas.gridforum.org/gridServices/rsl" elementFormDefault="qualified">
<xsd:element name="rsl" type="rslType"/>
<xsd:complexType name="rslType">
<xsd:sequence>
<xsd:element name="job" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>Instance:
<?xml version="1.0" encoding="UTF-8"?>
<rsl xmlns:rsl="http://schemas.gridforum.org/gridServices/rsl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.gridforum.org/gridServices/rsl"
xsi:schemaLocation="http://schemas.gridforum.org/gridServices/rsl 1.xsd">
<job> Jobby Job Job </job> </rsl>
Cheers, /Eddie
<job> Jobby Job Job </job> </rsl>
Code:
DocumentBuilderFactory parserFactory = null; DocumentBuilder xmlParser = null; try { parserFactory = DocumentBuilderFactory.newInstance(); parserFactory.setNamespaceAware(true); parserFactory.setValidating(true); //The following added per Sandy Gao's suggestion parserFactory.setAttribute( "http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); xmlParser = parserFactory.newDocumentBuilder(); xmlParser.setErrorHandler(this); } catch (javax.xml.parsers.ParserConfigurationException pce) { logger.error("problem getting parser factory instance", pce); return null; }
BufferedReader bufferedReader = new BufferedReader(xmlReader); return xmlParser.parse(new InputSource(bufferedReader));
[EMAIL PROTECTED] wrote:
parserFactory.setAttribute ("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
Sandy Gao Software Developer, IBM Canada (1-905) 413-3255 [EMAIL PROTECTED]
Peter Lane <[EMAIL PROTECTED] To: [EMAIL PROTECTED] > cc: Subject: Re: AW: Not an FAQ: still unable to validate against XSD 10/07/2002 10:06 AM Please respond to xerces-j-user
I just signed up to this list and stumbled accross this thread which illustrates exactly (as far as I can tell) the problem I'm having. Furthermore, I do not accept this solution (even if it works) as a valid "fix" to the problem. The fact remains that namespace-enabled schemas are not being processed correctly when referenced normally within an XML document. My example that doesn't work is as follows:
Schema:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://schemas.gridforum.org/gridServices/rsl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:rsl="http://schemas.gridforum.org/gridServices/rsl"
xmlns="http://schemas.gridforum.org/gridServices/rsl"
version="0.2">
<xsd:element name="rsl" type="rslType"/>
<xsd:complexType name="rslType"> <xsd:sequence> <xsd:element name="job" type="xsd:string" minOccurs="0"/> </xsd:sequence> </xsd:complexType>
</xsd:schema>
Document:
<?xml version="1.0" encoding="UTF-8"?> <rsl xmlns:rsl="http://schemas.gridforum.org/gridServices/rsl" xmlns="http://schemas.gridforum.org/gridServices/rsl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://schemas.gridforum.org/gridServices/rsl schema/test.xsd"> <job> Bastard! </job> </rsl>
Xerces code:
DocumentBuilderFactory parserFactory = null;
DocumentBuilder xmlParser = null;
try {
parserFactory = DocumentBuilderFactory.newInstance();
parserFactory.setNamespaceAware(true);
parserFactory.setValidating(true);
xmlParser = parserFactory.newDocumentBuilder();
xmlParser.setErrorHandler(this);
} catch (javax.xml.parsers.ParserConfigurationException pce) {
logger.error("problem getting parser factory instance", pce);
return null;
}
BufferedReader bufferedReader = new BufferedReader(xmlReader); return xmlParser.parse(new InputSource(bufferedReader));
I would really appreciate some feedback on this as my project is basically stalled until I get this resolved.
Thanks, Peter
Amthauer, Heiner wrote:
Hi!
Finally, I found a way to get it work. By setting the namespace-feature
to
true and setting the XSD definition with the
http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation
property, the parser actually validates using my schema defintion.
Thanx for your efforts.
greetings Heiner
-----Urspr�ngliche Nachricht----- Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Gesendet am: Montag, 7. Oktober 2002 16:32 An: [EMAIL PROTECTED] Betreff: Re: Not an FAQ: still unable to validate against XSD
Have you tried turning on namespace? (SAXParserFactory#setNamespaceAware)
Sandy Gao Software Developer, IBM Canada (1-905) 413-3255 [EMAIL PROTECTED]
"Amthauer, Heiner"
<[EMAIL PROTECTED] To: "'Xerces'" <[EMAIL PROTECTED]> ystems.com> cc:
Subject: Not an FAQ: still unable to validate against XSD 10/07/2002 06:04 AM
Please respond to
xerces-j-user
Hi there!
I'm still unable to validate my xml file against an XSD. Here ist the
code,
I use to load the file via SAX, using XERCES 2.0 (JRE1.3.1):
private static final String FLAG_VALIDATE = "http://xml.org/sax/features/validation"; private static final String FLAG_SCHEMA = "http://apache.org/xml/features/validation/schema";
private SAXParserFactory factory = null; private org.xml.sax.SAXParser saxParser = null;
... factory = SAXParserFactory.newInstance(); ... saxParser = factory.newSAXParser(); ... saxParser.getXMLReader().setFeature(FLAG_VALIDATE, true); saxParser.getXMLReader().setFeature(FLAG_SCHEMA, true); saxParser.parse(new File(file), this); ...
This always gives me an error saying "cvc-elt.1: Cannot find the declaration of element 'whatever'".
Since then, I've tried to use an EntityResolver for loading the XSD. I've
started with writing a little test code for the EntryResolver like this:
public class SAXEntityResolver implements EntityResolver {
public InputSource resolveEntity(String publicID, String
systemID)
throws SAXException, IOException { System.out.println(publicID+", "+systemID); return null; }
}
...
private static final String FLAG_VALIDATE = "http://xml.org/sax/features/validation"; private static final String FLAG_SCHEMA = "http://apache.org/xml/features/validation/schema";
private SAXParserFactory factory = null; private SAXParser saxParser = null;
... factory = SAXParserFactory.newInstance(); ... saxParser = factory.newSAXParser(); ... saxParser.getXMLReader().setFeature(FLAG_VALIDATE, true); saxParser.getXMLReader().setFeature(FLAG_SCHEMA, true); saxParser.getXMLReader().setEntityResolver(new SAXEntityResolver()); saxParser.parse(new File(file), this); ...
In result, my programm still reads the xml file with the same error as before. The println() in the EntityResolver is never reached.
I woulde really appreciate any help on this. Next on schedule is testing and I'm still unable to validate the xml file. Btw., loading the file with
any
other XML/XSD aware application works fine.
regards Heiner
--------------------------------------------------------------- Dipl. Ing. Heiner Amthauer
T-Systems GEI GmbH
Hausanschrift: Magirusstr. 39/1, 89077 Ulm Postanschrift: Postfach 20 64, 89010 Ulm Telefon: +49 ( 731) 9344-4422 Telefax: +49 (731) 9344-4409 Mobil: +49 (1 78) 4269335 E-Mail: [EMAIL PROTECTED] Internet: http://www.t-systems.com
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
