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.html#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(new
> > > 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]

Reply via email to