XML validation using xml schema string 2003-01-23 - By Jeff Greif
I'm not able to give information correct in detail, but here is an outline of what must happen:
The entity resolver is called with a namespace URI or a schema location as an argument, I think. In the course of parsing your instance document (.xml file), it will be called to process your schema's namespace and possibly other namespaces (e.g. the XMLSchema-instance namespace) mentioned therein. Probably you should get the default entity resolver for the parser (which knows how to handle some things, presumably), and create your own entity resolver holding that one as a member. Then when asked for a particular schema by its namespace or location, if it's your schema, return the input source as your code below does, otherwise, pass the request to the member resolver which knows better than you what to do.
Jeff
----- Original Message ----- From: "Praveen Peddi" <ppeddi@(protected)> To: <xerces-j-user@(protected)> Sent: Thursday, January 23, 2003 7:44 AM Subject: Re: XML validation using xml schema string
> I posted a question yesterday about the validation of XML against the local > schema (in memory). Could anyone please look at the message below and reply > if you know the answer. > > Thanks in Advance. > > Praveen > ----- Original Message ----- > From: "Praveen Peddi" <ppeddi@(protected)> > To: <sandygao@(protected)>; <xerces-j-user@(protected)> > Sent: Wednesday, January 22, 2003 1:35 PM > Subject: Re: XML validation using xml schema string > > > > As you said I wrote an EntityResolver but it didn't work. Could you send > me > > a sample code (just the validation code) if u already have one. > > > > My validate method looks as follows: > > > > public static void validateXmlAgainstLocalSchema(String XMLString, String > > schemaString) throws SAXException{ > > long startTime = System.currentTimeMillis(); > > System.out.println("Files: XML:" + XMLString + " XSD:" + > > schemaString); > > XMLReader parser = null; > > // Instantiate a parser > > try{ > > parser = > > XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); > > } catch (org.xml.sax.SAXException ex){ > > System.out.println("SAXException Exception"); > > throw new SAXException("Error Obtaining the parser."); > > } > > > > try{ > > > > // Register the error handler > > parser.setErrorHandler(new SchemaErrorHandler()); > > > > > > > //parser.setFeature("http://apache.org/xml/features/continue-after-fatal-err > > or", true); > > // Turn on validation > > > > parser.setFeature("http://xml.org/sax/features/namespaces",true); > > > parser.setFeature("http://xml.org/sax/features/validation", > > true); > > > > > parser.setFeature("http://apache.org/xml/features/validation/schema",true); > > > > > parser.setFeature("http://apache.org/xml/features/validation/schema-full-che > > cking",true); > > > > > //parser.setProperty("http://apache.org/xml/properties/schema/external-noNam > > espaceSchemaLocation",Schema); > > parser.setEntityResolver(new SchemaEntityResolver(schemaString)); > > > > > > } catch (org.xml.sax.SAXNotRecognizedException ex){ > > ex.printStackTrace(); > > System.out.println("SAXNotRecognizedException > > Exception"); > > } catch (org.xml.sax.SAXNotSupportedException ex){ > > ex.printStackTrace(); > > System.out.println("SAXNotSupportedException > > Exception"); > > } > > > > // Parse the document > > try{ > > //String XMLSystemId = new > > File(XMLString).toURL().toExternalForm(); > > parser.parse(new InputSource(new > StringReader(XMLString))); > > //parser.parse(XMLSystemId); > > System.out.println("Parsed Successfully by SAX Parser"); > > } catch (org.xml.sax.SAXException ex){ > > System.out.println("SAXException Exception"); > > throw new SAXException("Error Validating the content XML."); > > } catch (java.io.IOException ex){ > > System.out.println("IOException Exception"); > > throw new SAXException("Error Validating the content XML."); > > } finally { > > long endTime = System.currentTimeMillis(); > > System.out.println("Total time of > > SAXValidate:"+(endTime-startTime)); > > } > > }//SAXValidate > > > > And SchemaEntityResolver looks as follows: > > > > public class SchemaEntityResolver implements EntityResolver { > > InputSource source = null; > > public SchemaEntityResolver(String schemaString) { > > source = new InputSource(new StringReader(schemaString)); > > } > > > > public InputSource resolveEntity(String publicID, String systemID) > > throws SAXException { > > return source; > > } > > } > > > > When I try to validate an xml with the schema string, I get the following > > error: > > Line: 1 > > URI: null > > Message: cvc-elt.1: Cannot find the declaration of element 'content'. > > > > > > Am I doing it wrong? If so please tell me how to use the entityresolver. > > > > Praveen > > > > > > ----- Original Message ----- > > From: <sandygao@(protected)> > > To: <xerces-j-user@(protected)> > > Sent: Monday, January 20, 2003 10:18 AM > > Subject: Re: XML validation using xml schema string > > > > > > > Write an entity resolver > > > > > > (http://xml.apache.org/xerces2-j/javadocs/api/org/xml/sax/EntityResolver.htm > > l), > > > > > > and returned an input source with a StringReader when the schema > document > > > is asked. > > > > > > HTH, > > > Sandy Gao > > > Software Developer, IBM Canada > > > (1-905) 413-3255 > > > sandygao@(protected) > > > > > > > > > > > > > > > "Praveen Peddi" > > > <ppeddi@(protected) To: > > <xerces-j-user@(protected)> > > > dia.com> cc: > > > Subject: Re: XML > > validation using xml schema string > > > 01/20/2003 09:16 > > > AM > > > Please respond to > > > xerces-j-user > > > > > > > > > > > > > > > > > > Hi all, > > > Last week I sent an email regarding the xml validation against the > schema, > > > but didn't get any reply. Please reply if any one has answer to my > > > question. Is it possible to validate an xml document using a schema > > > document (not the schema url) that is present with in the application. > If > > > its not possible, whats the best way of achieving it. Please read my > > > previous email below. > > > > > > Thanks > > > Praveen > > > > > > Hi all, > > > I want to validate an xml document with an existing schema. I know > there > > > is a code to do it when the schema is present as a URL. BUt in my case > > > schema is present with in the application memory (since it is stored in > > > the database) and that is not the url or on the hard disk. > > > I have the following method which validates only when the schema is > > > present externally. Note that the argument Schema is a URL: > > > public static void DOMValidate(String XMLfile, String Schema){ > > > long startTime = System.currentTimeMillis(); > > > > > > // Instantiate the DOM parser. > > > DOMParser parser = new DOMParser(); > > > > > > // set the features > > > try{ > > > parser.setFeature("http://xml.org/sax/features/namespaces > > > ",true); > > > parser.setFeature("http://xml.org/sax/features/validation", > > > true); > > > parser.setFeature(" > > > http://apache.org/xml/features/validation/schema",true); > > > parser.setFeature(" > > > http://apache.org/xml/features/validation/schema-full-checking",true); > > > // convert the xml file name to a URL > > > String SystemId = null; > > > try{ > > > SystemId = new File(Schema).toURL().toExternalForm(); > > > } catch(java.net.MalformedURLException ex){ > > > //ex.printStackTrace(); > > > log.error(ex); > > > } > > > parser.setProperty(" > > > > > http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation > > > ",SystemId); > > > // myErrorHandler is a descendant of ErrorHandler, it > should > > > be set here to be able to catch parse errors > > > parser.setErrorHandler(new SchemaErrorHandler()); > > > > > > } catch (SAXNotSupportedException ex){ > > > System.out.println("SAXNotSupportedException Exception"); > > > } catch (SAXNotRecognizedException ex){ > > > System.out.println("SAXNotRecognizedException > > Exception"); > > > } > > > > > > // parse the xml file, the errorhandler class has callbacks, > > > // so those will be called automatically there is a parse error > > > try{ > > > parser.parse(new > File(XMLfile).toURL().toExternalForm()); > > > //System.out.println("Parsed Successfully by DOM > > Parser"); > > > } catch (org.xml.sax.SAXException ex){ > > > //System.out.println("SAXException Exception"); > > > //ex.printStackTrace(); > > > log.error(ex); > > > } catch (java.io.IOException ex){ > > > System.out.println("IOException Exception"); > > > } finally { > > > long endTime = System.currentTimeMillis(); > > > //System.out.println("Total time of DOMValidate:" > > > +(endTime-startTime)); > > > > > > } > > > > > > } > > > > > > How can I do the validation if the Schema is the actual schema string > not > > > the url. This looks like a common problem. I assume that its not > > universal > > > that schema is not always stored externally. > > > > > > Any suggestions are appreciated. > > > > > > Praveen > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) > > > For additional commands, e-mail: xerces-j-user-help@(protected) > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) > > For additional commands, e-mail: xerces-j-user-help@(protected) > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) > For additional commands, e-mail: xerces-j-user-help@(protected) > >
--------------------------------------------------------------------- To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) For additional commands, e-mail: xerces-j-user-help@(protected)
|
|