Enregistrement d'un programme de résolution de schéma

Vous pouvez implémenter l'interface XSchemaResolver et enregistrer cette implémentation dans l'objet XFactory pour remplacer le comportement par défaut applicable à la résolution des schémas. Ceci comprend la résolution pour l'importation des schémas enregistrés dans XFactory à l'aide de la méthode registerSchema et la résolution des schémas importés dans les feuilles de style XSLT à l'aide d'une déclaration xsl:import-schema.

Pourquoi et quand exécuter cette tâche

Pour résoudre les importations dans un schéma, le comportement par défaut consiste à utiliser l'URI de base du schéma pour identifier l'emplacement du schéma importé. Plus précisément, le comportement par défaut consiste à utiliser l'URI de base de la déclaration xsl:import-schema pour identifier l'emplacement spécifié dans la déclaration.

Procédure

Utiliser la méthode setSchemaResolver sur la classe XFactory pour enregistrer un programme de résolution de schéma.

La méthode getSchema renvoie une instance de l'interface java.util.List. En effet, la définition des composants du schéma d'un espace de nom donné peut être divisée en plusieurs documents de schéma distincts. Vous pouvez utiliser dès lors la méthode getSchema pour renvoyer tous les document de schéma de l'espace de nom cible associé à tous les paramètres d'emplacement spécifiés.

Exemple

L'exemple suivant illustre comment utiliser un programme de résolution de schéma.
XFactory factory = XFactory.newInstance();

// Set validating to true.
factory.setValidating(true);

// Create the schema resolver and register it with the factory.
factory.setSchemaResolver(new ASchemaResolver(replacementBase));

// Prepare the stylesheet.
XSLTExecutable executable = factory.prepareXSLT(new StreamSource(stylesheetFile));

// Execute the transformation.
Source source = new StreamSource(inputFile);
Result result = new StreamResult(System.out);
executable.execute(source, result);
L'exemple suivant illustre comment implémenter une instance de XSchemaResolver.
class ASchemaResolver implements XSchemaResolver
{
    String _replacementBase;
    
    public ASchemaResolver(String replacementBase)
    {
        _replacementBase=replacementBase;
    }
    
    // Resolve URI, returning the Source that URI represents.
    // Implements the "rebase:" pseudo-scheme.
    public List<? extends Source> getSchema(String namespace, List<String> locations, String baseURI) {
        String rebasePrefix="rebase:";

        List<StreamSource> list = new ArrayList<StreamSource>();
        for (int i = 0; i < locations.size(); i++) {
            String href = locations.get(i);
            String base = baseURI;
            if(href.startsWith(rebasePrefix)) {
                href=href.substring(rebasePrefix.length());
                base=_replacementBase;
            }
        
            java.net.URI uri;
            StreamSource source=null;
            try {
                // Get base URI object
                uri = new java.net.URI(base);
                // Resolved relative reference against base URI
                URI resolvedURI = uri.resolve(href);
                // Try to read...
                source = new StreamSource(resolvedURI.toString());
            } catch (java.net.URISyntaxException use) {
                throw new RuntimeException(use);
            }

            list.add(source);
        }
        return list;
    }
}

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_schema
Nom du fichier : txml_resolvers_schema.html