View Javadoc
1   /**
2    * Copyright (C) 2014-2016 Philip Helger (www.helger.com)
3    * philip[at]helger[dot]com
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    *         http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package com.helger.schematron;
18  
19  import javax.annotation.Nonnull;
20  import javax.annotation.Nullable;
21  import javax.xml.transform.Source;
22  
23  import org.oclc.purl.dsdl.svrl.SchematronOutputType;
24  import org.w3c.dom.Document;
25  
26  import com.helger.commons.id.IHasID;
27  import com.helger.commons.io.IHasInputStream;
28  import com.helger.commons.io.resource.IReadableResource;
29  import com.helger.commons.state.EValidity;
30  import com.helger.schematron.svrl.SVRLReader;
31  
32  /**
33   * Base interface for a Schematron resource. The implementation can e.g. be a
34   * SCH file that needs preprocessing to XSLT or an already precompiled XSLT
35   * file.
36   *
37   * @author Philip Helger
38   */
39  public interface ISchematronResource extends IHasID <String>
40  {
41    /**
42     * @return The non-<code>null</code> resource from which to read the
43     *         Schematron rules.
44     */
45    @Nonnull
46    IReadableResource getResource ();
47  
48    /**
49     * @return <code>true</code> if this Schematron can be used to validate XML
50     *         instances. If not, the Schematron is invalid and the log files must
51     *         be investigated.
52     */
53    boolean isValidSchematron ();
54  
55    /**
56     * A method to check if the passed XML DOM node matches the Schematron rules
57     * or not. This is the quick check method, as it breaks upon the first failed
58     * assertion or the first successful report, if the implementation supports it
59     * (as e.g. the native pure Schematron version).
60     *
61     * @param aXMLResource
62     *        The source XML to read and validate against the Schematron. May not
63     *        be <code>null</code>.
64     * @return {@link EValidity#VALID} if the document is valid,
65     *         {@link EValidity#INVALID} if it is invalid.
66     * @throws Exception
67     *         in case of a sever error validating the schema
68     */
69    @Nonnull
70    EValidity getSchematronValidity (@Nonnull final IHasInputStream aXMLResource) throws Exception;
71  
72    /**
73     * A method to check if the passed XML DOM node matches the Schematron rules
74     * or not. This is the quick check method, as it breaks upon the first failed
75     * assertion or the first successful report, if the implementation supports it
76     * (as e.g. the native pure Schematron version).
77     *
78     * @param aXMLSource
79     *        The source XML to be validated against the Schematron. May not be
80     *        <code>null</code>.
81     * @return {@link EValidity#VALID} if the document is valid,
82     *         {@link EValidity#INVALID} if it is invalid.
83     * @throws Exception
84     *         in case of a sever error validating the schema
85     */
86    @Nonnull
87    EValidity getSchematronValidity (@Nonnull final Source aXMLSource) throws Exception;
88  
89    /**
90     * Apply the Schematron validation on the passed XML resource and return an
91     * SVRL XML DOM Document.
92     *
93     * @param aXMLResource
94     *        The XML resource to validate via Schematron. May not be
95     *        <code>null</code>.
96     * @return <code>null</code> if the passed resource does not exist or the non-
97     *         <code>null</code> SVRL document otherwise.
98     * @throws Exception
99     *         In case the transformation somehow goes wrong.
100    * @see SVRLReader#readXML(org.w3c.dom.Node) on how to convert the document
101    *      into a domain object
102    */
103   @Nullable
104   Document applySchematronValidation (@Nonnull IHasInputStream aXMLResource) throws Exception;
105 
106   /**
107    * Apply the Schematron validation on the passed XML source and return an SVRL
108    * XML DOM Document.
109    *
110    * @param aXMLSource
111    *        The XML source to validate via Schematron. May not be
112    *        <code>null</code>.
113    * @return The SVRL XML document containing the result. May be
114    *         <code>null</code> when interpreting the Schematron failed.
115    * @throws Exception
116    *         In case the transformation somehow goes wrong.
117    * @see SVRLReader#readXML(org.w3c.dom.Node) on how to convert the document
118    *      into a domain object
119    */
120   @Nullable
121   Document applySchematronValidation (@Nonnull Source aXMLSource) throws Exception;
122 
123   /**
124    * Apply the Schematron validation on the passed XML resource and return a
125    * {@link SchematronOutputType} object.
126    *
127    * @param aXMLResource
128    *        The XML resource to validate via Schematron. May not be
129    *        <code>null</code>.
130    * @return The SVRL object containing the result. May be <code>null</code>
131    *         when interpreting the Schematron failed.
132    * @throws Exception
133    *         In case the transformation somehow goes wrong.
134    */
135   @Nullable
136   SchematronOutputType applySchematronValidationToSVRL (@Nonnull IHasInputStream aXMLResource) throws Exception;
137 
138   /**
139    * Apply the Schematron validation on the passed XML source and return a
140    * {@link SchematronOutputType} object.
141    *
142    * @param aXMLSource
143    *        The XML source to validate via Schematron. May not be
144    *        <code>null</code>.
145    * @return The SVRL object containing the result. May be <code>null</code>
146    *         when interpreting the Schematron failed.
147    * @throws Exception
148    *         In case the transformation somehow goes wrong.
149    */
150   @Nullable
151   SchematronOutputType applySchematronValidationToSVRL (@Nonnull Source aXMLSource) throws Exception;
152 }