Sorry, can't say much there. I undersand the
problem now, but I haven't dealt with it precisely. Wish you luck.
Milan
----- Original Message -----
Sent: Friday, August 08, 2003 15:14
Subject: Re: validation against schema
that imports other namespaces
> Are all necessary prefixes declared in both schemas?
Yes. I have continued to try and here is what I have
found:
- validation works if one the schemas is referenced
through schemaLocation in the document. The reference is absolute and
really refer to the schema file. In all other cases thing does not
work.
This is not what I want; I simply want that schemaLocation
attribute is not considered, if any value exist. The reason: during
runtime, I would discover where the schema is located (somewhere in my
classpath) and then I want to provide this information during validation to
the parser. Therefore, I could move my application quite easy anywhere
and not to change anything.
Here is the code
snippet:
String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
XML_SCHEMA = "http://www.w3.org/2001/XMLSchema",
SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
try { DocumentBuilderFactory
factory
= DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setNamespaceAware(true);
factory.setValidating(true);
try
{
factory.setAttribute(SCHEMA_LANGUAGE,XML_SCHEMA);
factory.setAttribute(SCHEMA_SOURCE,ClassLoader.getSystemResourceAsStream("de/fhg/ipsi/oasys/mgn/spec/test2.xsd")); }
catch(IllegalArgumentException
x)
{
System.err.println("Your DOM parser is not JAXP
1.2 compliant.");
} DocumentBuilder builder =
factory.newDocumentBuilder();
builder.setErrorHandler(new
ErrorPrinter()); builder.parse(ClassLoader.getSystemResourceAsStream("de/fhg/ipsi/oasys/mgn/spec/test.xml"));
} catch (Exception e) {e.printStackTrace();}
and here are two schemas
and a document:
test.xsd: ========= <xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xml.netbeans.org/examples/targetNS"
xmlns="http://xml.netbeans.org/examples/targetNS"
xmlns:ns2="http://xml.netbeans.org/examples/targetNS2"
elementFormDefault="qualified">
<xsd:import namespace="http://xml.netbeans.org/examples/targetNS2" schemaLocation="blatest2.xsd"
/>
<xsd:element name="r" type="test" />
<xsd:element
name="r2" type="test" />
<xsd:complexType name="test"
>
<xsd:sequence>
<xsd:element name="rootns1" type="ns2:Root" />
</xsd:sequence> </xsd:complexType>
</xsd:schema>
test2.xsd: ==========
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xml.netbeans.org/examples/targetNS2"
xmlns="http://xml.netbeans.org/examples/targetNS2"
elementFormDefault="qualified">
<xsd:element name="rootns2"
type="Root" />
<xsd:complexType name="Root"
>
<xsd:sequence>
<xsd:element name="root" type="xsd:string" />
</xsd:sequence> </xsd:complexType>
</xsd:schema>
test.xml ========
<r
xmlns='http://xml.netbeans.org/examples/targetNS'
xmlns:ns2='http://xml.netbeans.org/examples/targetNS2'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://xml.netbeans.org/examples/targetNS file:/usr/local/home/pedjak/projects/mgn/src/de/fhg/ipsi/oasys/mgn/spec/test.xsd'> <rootns1>
<ns2:root>bla
</ns2:root></rootns1> </r>
=======================
I have tried to provide to factory.setAttribute an array of
two InputStreams, but it does not help.
Still any idea? Is
is possible to do that under JAXP
1.2?
Predrag
--------------------------------------------------------------------- To
unsubscribe, e-mail: [EMAIL PROTECTED] For
additional commands, e-mail: [EMAIL PROTECTED]
|