The problem is, that I am already getting the Element-Objects.
Some framework is parsing the xml and I am not able to
change the DocumentBuilderFactory.

Is the only possibility to save the elements to a file and
load it again???

Thanks

Bernd



> -----Original Message-----
> From: Michael Glavassevich [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, January 10, 2007 6:33 AM
> To: j-users@xerces.apache.org
> Subject: RE: Add schema to xmldocument
> 
> "Bernd Kolb \([EMAIL PROTECTED])" <[EMAIL PROTECTED]> wrote on 01/09/2007
> 09:58:08 AM:
> 
> > 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);
> 
> setAttribute() creates non-namespace-aware attribute nodes. 
> You should be using setAttributeNS() instead though as I said 
> in a previous e-mail this will not do what you think. Adding 
> a namespace declaration to the tree has no effect on the 
> namespace URI of other nodes. To change the namespace URI of 
> the elements/attributes in the DOM you must use renameNode().
> 
> > DocumentBuilderFactory newInstance = DocumentBuilderFactory.
> >    newInstance();
> > newInstance.setNamespaceAware(true);
> 
> This needs to be set on the DocumentBuilder which created the 
> Document you're importing from. Setting this here has no effect.
> 
> > 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]
> 
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: [EMAIL PROTECTED]
> 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