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]