Hi all,

i've started working with  XML Schema support in the datatype package.

Here are some proposals for improvement :
(I'm not a Java-Pro, so my workarounds are q & d !)

 The SchemaParser class doesn't handle includes of other schemata.
 ------------------------------------
As a workaround, i added the following lines to SchemaParser.java:

private static final QName XSD_INCLUDE = QName.get("include", XSD_NAMESPACE);

    /** Parses the given schema document
     *
     * @param schemaDocument is the document of the XML Schema
     */
    public void build( Document schemaDocument ) {
        Element root = schemaDocument.getRootElement();
        if ( root != null ) {

            //handle schema includes
            Iterator includeIter = root.elementIterator( XSD_INCLUDE);
            while (includeIter.hasNext()) {
                Element includeElement = (Element) includeIter.next();
                String inclSchemaInstanceURI = 
includeElement.attributeValue("schemaLocation");
                EntityResolver resolver = schemaDocument.getEntityResolver();
                try {
                    if ( resolver == null ) {
                        throw new InvalidSchemaException( "No EntityResolver available 
so could not resolve the schema URI: " +
                                                           inclSchemaInstanceURI );
                    }
                    InputSource inputSource = resolver.resolveEntity( null, 
inclSchemaInstanceURI );
                    if ( inputSource == null ) {
                        throw new InvalidSchemaException( "Could not resolve the 
schema URI: " + inclSchemaInstanceURI );
                    }
                    SAXReader reader = new SAXReader();
                    Document inclSchemaDocument = reader.read( inputSource );
                    build( inclSchemaDocument );
                }
                catch (Exception e) {
                    System.out.println( "Failed to load schema: " + 
inclSchemaInstanceURI );
                    System.out.println( "Caught: " + e );
                    e.printStackTrace();
                    throw new InvalidSchemaException( "Failed to load schema: " + 
inclSchemaInstanceURI );
                }
            }

            //handle elements
   ....

Missing support of element types, derived from simpleType:
---------------------------------------------------------------------------------

    // Implementation methods
    //-------------------------------------------------------------------------

    /** processes an XML Schema <element> tag
     */
    protected void onDatatypeElement( Element xsdElement , DocumentFactory 
parentFactory ) {
        String name = xsdElement.attributeValue( "name" );
        String type = xsdElement.attributeValue( "type" );
        QName qname = getQName( name );

        DatatypeElementFactory elementFactory = getDatatypeElementFactory( qname );

        if ( type != null ) {
            // register type with this element name
            XSDatatype dataType = getTypeByName(type);
            if (dataType!=null) {
                elementFactory.setChildElementXSDatatype( qname, dataType );
            }
            else {
                QName typeQName=getQName(type);
                
namedTypeResolver.registerTypedElement(xsdElement,typeQName,parentFactory);
            }
            return;
        }

        // handle element types derrived from simpleTypes
        Element xsdSimpleType = xsdElement.element( XSD_SIMPLETYPE );
        if ( xsdSimpleType != null ) {
            System.out.println("Agfa-sg: handle element types derrived from 
simpleTypes for element: " + name);
            XSDatatype dataType = loadXSDatatypeFromSimpleType( xsdSimpleType );
            if (dataType != null) {
                System.out.println("dataType (from loadXSDatatypeFromSimpleType) = " + 
dataType);
                elementFactory.setChildElementXSDatatype( qname, dataType );
            }
        }


        Element schemaComplexType = xsdElement.element( XSD_COMPLEXTYPE );
     .....


Greetings
Stefan Graeber


_______________________________________________
dom4j-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-dev

Reply via email to