I've had minor success by adding the setAttribute suggestion and by using the qualified form for elements (i.e. elementFormDefault="qualified" and explicitly prepending namespace prefixes everywhere). Unfortunetly, I still cannot specify a default namespace by specifying a targetNamespace in the schema; and either a matching xmlns="..." in the document with unqualified elements, or qualified elements. Doing it that way yields the following error:

org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content starting with element 'job'. The content must match '(("":job){0-1})'.

Thanks,
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"
            -->

    <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 -->

    <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]



Reply via email to