Hi,
This has already been proffered but I just checked the archives and they are
not available.
Does anyone know where I can get some code sample to "introspect" schemas? I
need to introspect a schema in order for me to generate a correct XML
document from it.
Briefly, I'm trying to introspect a schema (which is really composed of a
number of files (i.e., via includes)) and I'm able to get the global
elements, attributes etc. but I'm unsure how go from there? That is how do I
build the contents of a complex type or element which itself might be
composed of child complex types etc? For example, I tried getting the
complex type content (i.e., method getEnclosingCTDefinition ()) for the
following element and it came back unexpectedly (for me) as null:
<element name = "Customer">
<complexType>
<sequence>
<element name = "FirstName" type = "string" />
<element name = "MiddleInitial" type = "string" />
<element name = "LastName" type = "string" />
</sequence>
</complexType>
</element>
Here is a code snippet that gathers the schema grammar for me:
XMLSchemaLoader xmlSchemaLoader = new XMLSchemaLoader();
xmlSchemaLoader.setErrorHandler (this);
XMLInputSource xmlInputSource = new XMLInputSource (null, schemaFile.
getName (), schemaFile.toURI ().getPath ());
FileInputStream inputStream = null;
try
{
inputStream = new FileInputStream (schemaFile);
}
catch (Exception pException) { pException.printStackTrace (); }
xmlInputSource.setByteStream (inputStream);
XSGrammar schemaGrammar = null;
try
{
schemaGrammar = (XSGrammar) xmlSchemaLoader.loadGrammar (
xmlInputSource);
XSModel schemaModel = schemaGrammar.toXSModel();
XSNamedMap elementComponents = pSchemaModel.getComponents (
XSConstants.ELEMENT_DECLARATION);
System.out.println ("Element components begin (" +
elementComponents.
getLength () + ")");
for (int i = 0; i < elementComponents.getLength (); i++)
{
XSElementDeclaration elementDeclaration =
(XSElementDeclaration)
elementComponents.item (i);
System.out.println ("\tNamespace:Name: " +
elementDeclaration.
getNamespace () + ":" + elementDeclaration.getName
());
System.out.println ("\tConstraint value: \"" +
elementDeclaration.
getConstraintValue() + "\"");
System.out.println ("\tType def name: \"" +
elementDeclaration.
getTypeDefinition().getName () + "\"");
if (elementDeclaration.getEnclosingCTDefinition() !=
null)
{
System.out.println ("\tEnclosing ct type def
name: \"" +
elementDeclaration.getEnclosingCTDefinition().getParticle ().
getName () + "\"");
}
else
{
System.out.println ("\tNo complex type
definition...");
}
System.out.println ();
}
System.out.println ("Element components end...\n");
}
catch (Exception pException)
{
pException.printStackTrace ();
}
One final note: as I mentioned above my schema is really composed of a
number of files which are brought together by "include" statements and I'm
hoping that all I need to do is point Xerces to my "lead" .xsd file and that
all the included files will automatically be brought in.
Thanks.
_____________________________________________
Karl R. Mueller
[EMAIL PROTECTED]
_____________________________________________
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]