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