Thanks Michael for your explanations.

I have tried to add your remarks to my code,
without success

I am using JDK 1.4.2_13 with xerces 2.9.0

-------------------------------------------------------------

Here is the code:

element.setAttribute("xmlns", 
        "http://example.com/zedv/services/Logger/log";);
element.setAttribute("xmlns:xsi", 
        XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI);

DocumentBuilderFactory newInstance = DocumentBuilderFactory.
        newInstance();
newInstance.setNamespaceAware(true);
Document doc2Validate = newInstance.newDocumentBuilder().newDocument();
        
Element importNode = (Element) doc2Validate.importNode(element, true);
doc2Validate.appendChild(importNode);
doc2Validate.normalize();

Schema schema = SchemaFactory.newInstance(
        XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(
                new StreamSource(this.getClass().
                        getResourceAsStream("/LoggerLog.xsd")));
Validator newValidator = schema.newValidator();
newValidator.setErrorHandler(new ValidationErrorHandler());
newValidator.validate(new DOMSource(doc2Validate));

-------------------------------------------------------------

The XSD looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
        xmlns="http://example.com/zedv/services/Logger/log"; 
        targetNamespace="http://example.com/zedv/services/Logger/log"; 
        elementFormDefault="qualified">  
  <xs:element name="log" type="log"/>  
  <xs:complexType name="log"> 
    <xs:attribute name="info" type="xs:string"/> 
  </xs:complexType> 
</xs:schema>

-------------------------------------------------------------

The XML is here:

<?xml version="1.0" encoding="UTF-8" ?> 
<log info="starting test"/> 

-------------------------------------------------------------

I have added xerces 2.9.0 to the classpath an have run
the code above with jdk 1.4.3_13

The result was this exception

org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration 
        of element 'log'.
        at org.apache.xerces.util.ErrorHandlerWrapper.
                createSAXParseException(Unknown Source)
        at org.apache.xerces.util.ErrorHandlerWrapper.
                error(Unknown Source)
        at org.apache.xerces.impl.XMLErrorReporter.
                reportError(Unknown Source)
        at org.apache.xerces.impl.XMLErrorReporter.
                reportError(Unknown Source)
        at org.apache.xerces.impl.xs.XMLSchemaValidator.
                handleStartElement(Unknown Source)
        at org.apache.xerces.impl.xs.XMLSchemaValidator.
                startElement(Unknown Source)
        at org.apache.xerces.jaxp.validation.DOMValidatorHelper.
                beginNode(Unknown Source)
        at org.apache.xerces.jaxp.validation.DOMValidatorHelper.
                validate(Unknown Source)
        at org.apache.xerces.jaxp.validation.DOMValidatorHelper.
                validate(Unknown Source)
        at org.apache.xerces.jaxp.validation.ValidatorImpl.
                validate(Unknown Source)
        at javax.xml.validation.Validator.validate(Unknown Source)
        at XMLValidation.<init>(XMLValidation.java:58)
        at XMLValidation.main(XMLValidation.java:23)
Exception in thread "main" 


Then I changed the jdk to 1.5_6 and the same code is working fine....

Do you have any idea?

Regards

Bernd

> -----Original Message-----
> From: Michael Glavassevich [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, January 09, 2007 3:21 PM
> To: j-users@xerces.apache.org
> Subject: RE: Add schema to xmldocument
> 
> Each node in a DOM [1] carries its own namespace URI. Adding 
> a namespace declaration to the tree has no effect on the 
> namespace URI of other nodes. 
> If you want to change the namespace URI of a node (element or 
> attribute) you need to use renameNode() [2]. Also if you're 
> going to be validating this DOM against an XML schema it 
> needs to have been constructed from a namespace aware parser. 
> In other words you need to explicitly set namespace awareness 
> to true (docBuilderFactory.setNamespaceAware(true)) on the 
> instance of the DocumentBuilderFactory since the default 
> value is false.
> 
> Once you've done all that there's no need to add the 
> xsi:schemaLocation attribute to the document. The validator 
> will work just fine without it (and in fact it will ignore it).
> 
> [1] http://www.w3.org/DOM/faq.html#namespacefixup
> [2]
> http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.h
tml#Document3-renameNode
> 
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: [EMAIL PROTECTED]
> E-mail: [EMAIL PROTECTED]
> 
> "Bernd Kolb \([EMAIL PROTECTED])" <[EMAIL PROTECTED]> wrote on 01/09/2007
> 03:15:58 AM:
> 
> > 
> > Yes, that's true.
> > 
> > Is it somehow possible to add
> > 
> > xmlns="http://sample.com"; 
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> > 
> > to an already parsed document?
> > As I said, I tried to add these arguments to the documents root 
> > element, without success.
> > 
> > Thanks again
> > 
> > Regards
> > 
> > Bernd Kolb
> > 
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Dick Deneer [mailto:[EMAIL PROTECTED]
> > > Sent: Tuesday, January 09, 2007 8:19 AM
> > > To: j-users@xerces.apache.org
> > > Subject: Re: Add schema to xmldocument
> > > 
> > > 
> > > Apparently your schema simple.xsd has a targetnamespace http:// 
> > > sample.com.
> > > Your test.xml has no namespace decaration, so it is in the "null" 
> > > namespace  and has to be validated against a schema thas 
> als has a 
> > > "null" targetnamespace.
> > > 
> > > Either you must remove the targetnamespace in your xsd or 
> you have 
> > > to add xmlns="http://sample.com";
> > > xmlns:xsi="http://www.w3.org/2001/
> > > XMLSchema-instance" to your test.xml.
> > > 
> > > 
> > > Regards
> > > Dick Deneer
> > > 
> > > 
> > > 
> > > Op 8-jan-2007, om 23:43 heeft Bernd Kolb (([EMAIL PROTECTED])) het 
> > > volgende
> > > geschreven:
> > > 
> > > > Hi,
> > > >
> > > > I have a question: I am using xerces 2.9.0.
> > > >
> > > > I have a XML-Document witch was not created by me and I am
> > > not able to
> > > > load it from a file. I am getting the XML-Document Object.
> > > >
> > > > Now I want to validate this document against a schema.
> > > > This schema might not be in the document.
> > > >
> > > > So I want to add the schema programmatically.
> > > >
> > > > How can I achieve this?
> > > >
> > > >
> > > > Document doc =
> > > > 
> DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(ne
> > > > w
> > > > File("test.xml"));
> > > >
> > > > Schema schema =
> > > > SchemaFactory.newInstance
> > > > (XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(new
> > > > StreamSource("simpleSchema.xsd"));
> > > > schema.newValidator().validate(new DOMSource(doc));
> > > >
> > > >
> > > > test.xml looks like this
> > > >
> > > > <?xml version="1.0" encoding="UTF-8"?> <persons age="0">
> > > >   <name>name</name>
> > > >   <surname>surname</surname>
> > > > </persons>
> > > >
> > > > But I'd like xerces to act as if it looked like the 
> following one:
> > > > <?xml version="1.0" encoding="UTF-8"?> <persons age="0" 
> > > > xmlns="http://sample.com";
> > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> > > > xsi:schemaLocation="http://sample.com simpleSchema.xsd ">
> > > >   <name>name</name>
> > > >   <surname>surname</surname>
> > > > </persons>
> > > >
> > > > I tried to add the xmlns, xmlns:xsi and xsi:schemaLocation
> > > attributes
> > > > to the root element by code, without success...
> > > >
> > > >
> > > > Any idea?
> > > >
> > > > Thanks a lot!
> > > >
> > > >
> > > > Best wishes
> > > >
> > > > Bernd Kolb
> > > >
> > > >
> > > > 
> > > 
> --------------------------------------------------------------------
> > > -
> > > > 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