Validating a complete XML document is OK. What I want is to
validate a node. Here is my TEST program ( modified from example
program DOMVerifier.java):
public static void main(String[] args)
throws Exception {
if (args.length
< 2) {
System.out.println("Usage: DOMVerifier <schema> <instance>
...");
return;
}
// setup JARV and
compile a schema.
VerifierFactory
factory = new
com.sun.msv.verifier.jarv.TheFactoryImpl();
Verifier verifier =
factory.compileSchema(args[0]).newVerifier();
// instead, you can call
factory.newVerifier(args[0])
//
this will result in the same behavior.
// setup
JAXP
DocumentBuilderFactory domf =
DocumentBuilderFactory.newInstance();
domf.setNamespaceAware(true);
DocumentBuilder builder = domf.newDocumentBuilder();
for (int i = 1; i
< args.length; i++)
{
// parse
a document into a
DOM.
Document dom = builder.parse(new File(args[i]));
//
performs the validation on the whole
tree.
//
instead, you can pass an Element to the verify method,
too.
//
e.g.,
verifier.verify(dom.getDocumentElement())
if
(verifier.verify(dom))
System.out.println("valid :" +
args[i]);
else
System.out.println("invalid:" + args[i]);
// or
you can pass an Element to validate that subtree
//////////////////////// problems here
////////////////////////////////////////////////
//No,
this does not work
//For
example, if you try the following
code
//
you always
get
//tag
name xxxxx is not allowed. Possible tag names are: ...
validateAllChildren(verifier, dom);
}
}
public static void validateAllChildren(Verifier
verifier, Node node) throws Exception {
System.out.println("getLocalName()=" +
node.getLocalName());
System.out.println("getNodeName()=" +
node.getNodeName());
System.out.println("getNodeType()=" +
node.getNodeType());
System.out.println("");
try
{
if
(verifier.verify(node))
{
//
...
System.out.println(node.getNodeName() + " is
valid");
}
else
{
System.out.println(node.getNodeName() + " is not
valid");
}
}
catch (SAXException e)
{
//e.printStackTrace(); //To change body of catch statement use Options |
File
Templates.
System.out.println("\n"+e.getMessage()+"\n");
}
System.out.println("-----------------------------------");
NodeList nodes =
node.getChildNodes();
for (int j = 0; j
< nodes.getLength(); j++) {
Node
n0 = nodes.item(j);
validateAllChildren(verifier, n0);
}
}
----- Original Message -----
Sent: 04 March 2004 15:07
Subject: Re: [xml-dev] Node Level
Validation against XML schema
At 2004-03-04 15:01 +0000, Albert Yu wrote:
>I am looking
for a Node Level Validation( against XML schema) package. I
>tried MSV
from Sun. Its documentation says it can do node level
>validation, but
actually it do not work, it can only validate root element.
Check again
... I use MSV to validate complete XML documents against their
schemas. Perhaps you are invoking the software incorrectly or
misinterpreting the messages that you see.
.................
Ken
--
US XSL training: Washington,DC March 15; San Francisco,CA
March 22
World-wide on-site corporate, government & user group XML
training
G. Ken
Holman
mailto:gkholman@CraneSoftwrights.com
Crane
Softwrights Ltd. http://www.CraneSoftwrights.com/x/
Box
266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999
(F:-0995)
Male Breast Cancer Awareness http://www.CraneSoftwrights.com/x/bc
-----------------------------------------------------------------
The
xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of
OASIS <http://www.oasis-open.org>
The
list archives are at http://lists.xml.org/archives/xml-dev/
To
subscribe or unsubscribe from this list use the subscription
manager:
<http://www.oasis-open.org/mlmanage/index.php>