/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.cocoon.components.validation; import java.io.IOException; import org.apache.excalibur.source.Source; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; /** * <p>The {@link Validator} interface provides the abstraction of a component able * to validate XML documents using schemas defined in different languages.</p> * * <p>This is basically the main entry point of the validation API, allowing users * to transparently access validators (in the form of {@link ValidationHandler}s * receiving SAX events for the documents to be validated), in different grammar * languages, using different implementations.</p> * * <p>As more than one {@link SchemaParser} might be able to parse and create * {@link Schema} instances for a particular grammar language, this interface * defines a unique lookup method to allow selection of a particular * {@link SchemaParser} implementation.</p> * * <p>Assuming that two different {@link SchemaParser}s called <code>first</code> * and <code>second</code> are both able to understand the * {@link #GRAMMAR_RELAX_NG RELAX NG} grammar (identified by the * <code>http://relaxng.org/ns/structure/1.0</code> identifier) one could select * between the two implementation using the following two strings:</p> * * <ul> * <li><code>first:http://relaxng.org/ns/structure/1.0</code></li> * <li><code>second:http://relaxng.org/ns/structure/1.0</code></li> * </ul> * * <p>As a rule (unless when this is impossible) the grammar identifier is * equivalent to the namespace of the root element of a schema.</p> * */ public interface Validator { /** <p>Avalon Role name of {@link Validator} components.</p> */ public static final String ROLE = Validator.class.getName(); /** <p>The <a href="http://www.schematron.com/">ISO Schematron</a/> grammar identifer.</p> */ public static final String GRAMMAR_ISO_SCHEMATRON = "http://purl.oclc.org/dsdl/schematron"; /** <p>The <a href="http://www.relaxng.org/">RELAX NG</a/> grammar identifer.</p> */ public static final String GRAMMAR_RELAX_NG = "http://relaxng.org/ns/structure/1.0"; /** <p>The <a href="http://www.xml.gr.jp/relax">RELAX Core</a/> grammar identifer.</p> */ public static final String GRAMMAR_RELAX_CORE = "http://www.xml.gr.jp/xmlns/relaxCore"; /** <p>The <a href="http://www.xml.gr.jp/relax">RELAX Namespace</a/> grammar identifer.</p> */ public static final String GRAMMAR_RELAX_NS = "http://www.xml.gr.jp/xmlns/relaxNamespace"; /** <p>The <a href="http://xml.ascc.net/schematron/">Schematron</a/> grammar identifer.</p> */ public static final String GRAMMAR_SCHEMATRON = "http://www.ascc.net/xml/schematron"; /** <p>The <a href="http://www.thaiopensource.com/trex/">Trex</a/> grammar identifer.</p> */ public static final String GRAMMAR_TREX = "http://www.thaiopensource.com/trex"; /** <p>The <a href="http://www.w3.org/XML/Schema">XML Schema</a/> grammar identifer.</p> */ public static final String GRAMMAR_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; /** <p>The <a href="http://www.w3.org/TR/REC-xml">XML DTD</a/> grammar identifer.</p> */ public static final String GRAMMAR_XML_DTD = "http://www.w3.org/TR/REC-xml"; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>The {@link Validator} will attempt to automatically detect the grammar * language of the specified schema, and each error or warning occurring while * validating the document will trigger a {@link SAXException} to be thrown back * to the caller.</p> * * @param uri the location of the schema to use to validate the document. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the grammar language of the specified schema * could not be detected or was not supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(String uri) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>Each error or warning occurring while validating the document will trigger * a {@link SAXException} to be thrown back to the caller.</p> * * @param uri the location of the schema to use to validate the document. * @param grammar the grammar language of the schema to parse. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the specified grammar language wasn't supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(String uri, String grammar) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>The {@link Validator} will attempt to automatically detect the grammar * language of the specified schema, while each validation error or warning will * be passed to the specified {@link ErrorHandler} which will have the ability * to generate and throw a {@link SAXException} back to the caller.</p> * * @param uri the location of the schema to use to validate the document. * @param errorHandler the {@link ErrorHandler} notified of validation problems. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the grammar language of the specified schema * could not be detected or was not supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(String uri, ErrorHandler errorHandler) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>Each validation error or warning will be passed to the specified * {@link ErrorHandler} which will have the ability to generate and throw a * {@link SAXException} back to the caller.</p> * * @param uri the location of the schema to use to validate the document. * @param grammar the grammar language of the schema to parse. * @param errorHandler the {@link ErrorHandler} notified of validation problems. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the specified grammar language wasn't supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(String uri, String grammar, ErrorHandler errorHandler) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>The {@link Validator} will attempt to automatically detect the grammar * language of the specified schema, and each error or warning occurring while * validating the document will trigger a {@link SAXException} to be thrown back * to the caller.</p> * * @param source the {@link Source} identifying the schema to use for validation. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the grammar language of the specified schema * could not be detected or was not supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(Source source) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>Each error or warning occurring while validating the document will trigger * a {@link SAXException} to be thrown back to the caller.</p> * * @param source the {@link Source} identifying the schema to use for validation. * @param grammar the grammar language of the schema to parse. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the specified grammar language wasn't supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(Source source, String grammar) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>The {@link Validator} will attempt to automatically detect the grammar * language of the specified schema, while each validation error or warning will * be passed to the specified {@link ErrorHandler} which will have the ability * to generate and throw a {@link SAXException} back to the caller.</p> * * @param source the {@link Source} identifying the schema to use for validation. * @param errorHandler the {@link ErrorHandler} notified of validation problems. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the grammar language of the specified schema * could not be detected or was not supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(Source source, ErrorHandler errorHandler) throws IOException, SAXException, ValidatorException; /** * <p>Return a {@link ValidationHandler} validating an XML document according to * the schema found at the specified location.</p> * * <p>Each validation error or warning will be passed to the specified * {@link ErrorHandler} which will have the ability to generate and throw a * {@link SAXException} back to the caller.</p> * * @param source the {@link Source} identifying the schema to use for validation. * @param grammar the grammar language of the schema to parse. * @param errorHandler the {@link ErrorHandler} notified of validation problems. * @return a <b>non null</b> {@link ValidationHandler} able to SAX events from * the original XML document to validate. * @throws IOException if an I/O error occurred parsing the schema. * @throws SAXException if a grammar error occurred parsing the schema. * @throws ValidatorException if the specified grammar language wasn't supported. * @see SchemaParser#parseSchema(Source, String) * @see Schema#createValidator(ErrorHandler) */ public ValidationHandler getValidationHandler(Source source, String grammar, ErrorHandler errorHandler) throws IOException, SAXException, ValidatorException; }