View Javadoc
1   /**
2    * Copyright (C) 2014-2017 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  import org.w3c.dom.Node;
26  
27  import com.helger.commons.id.IHasID;
28  import com.helger.commons.io.IHasInputStream;
29  import com.helger.commons.io.resource.IReadableResource;
30  import com.helger.commons.state.EValidity;
31  import com.helger.schematron.svrl.SVRLReader;
32  
33  /**
34   * Base interface for a Schematron resource. The implementation can e.g. be a
35   * SCH file that needs preprocessing to XSLT or an already precompiled XSLT
36   * file.
37   *
38   * @author Philip Helger
39   */
40  public interface ISchematronResource extends IHasID <String>
41  {
42    /**
43     * @return The non-<code>null</code> resource from which to read the
44     *         Schematron rules.
45     */
46    @Nonnull
47    IReadableResource getResource ();
48  
49    /**
50     * @return <code>true</code> if this Schematron can be used to validate XML
51     *         instances. If not, the Schematron is invalid and the log files must
52     *         be investigated.
53     */
54    boolean isValidSchematron ();
55  
56    /**
57     * A method to check if the passed XML DOM node matches the Schematron rules
58     * or not. This is the quick check method, as it breaks upon the first failed
59     * assertion or the first successful report, if the implementation supports it
60     * (as e.g. the native pure Schematron version).
61     *
62     * @param aXMLResource
63     *        The source XML to read and validate against the Schematron. May not
64     *        be <code>null</code>.
65     * @return {@link EValidity#VALID} if the document is valid,
66     *         {@link EValidity#INVALID} if it is invalid.
67     * @throws Exception
68     *         in case of a sever error validating the schema
69     */
70    @Nonnull
71    EValidity getSchematronValidity (@Nonnull IHasInputStream aXMLResource) throws Exception;
72  
73    /**
74     * A method to check if the passed DOM node matches the Schematron rules or
75     * not. This is the quick check method, as it breaks upon the first failed
76     * assertion or the first successful report, if the implementation supports it
77     * (as e.g. the native pure Schematron version).
78     *
79     * @param aXMLNode
80     *        The source DOM node to validate against the Schematron. May not be
81     *        <code>null</code>.
82     * @return {@link EValidity#VALID} if the document is valid,
83     *         {@link EValidity#INVALID} if it is invalid.
84     * @throws Exception
85     *         in case of a sever error validating the schema
86     */
87    @Nonnull
88    EValidity getSchematronValidity (@Nonnull Node aXMLNode) throws Exception;
89  
90    /**
91     * A method to check if the passed XML DOM node matches the Schematron rules
92     * or not. This is the quick check method, as it breaks upon the first failed
93     * assertion or the first successful report, if the implementation supports it
94     * (as e.g. the native pure Schematron version).
95     *
96     * @param aXMLSource
97     *        The source XML to be validated against the Schematron. May not be
98     *        <code>null</code>.
99     * @return {@link EValidity#VALID} if the document is valid,
100    *         {@link EValidity#INVALID} if it is invalid.
101    * @throws Exception
102    *         in case of a sever error validating the schema
103    */
104   @Nonnull
105   EValidity getSchematronValidity (@Nonnull Source aXMLSource) throws Exception;
106 
107   /**
108    * Apply the Schematron validation on the passed XML resource and return an
109    * SVRL XML DOM Document.
110    *
111    * @param aXMLResource
112    *        The XML resource to be validated via Schematron. May not be
113    *        <code>null</code>.
114    * @return <code>null</code> if the passed resource does not exist or the non-
115    *         <code>null</code> SVRL document otherwise.
116    * @throws Exception
117    *         In case the transformation somehow goes wrong.
118    * @see SVRLReader#readXML(org.w3c.dom.Node) on how to convert the document
119    *      into a domain object
120    */
121   @Nullable
122   Document applySchematronValidation (@Nonnull IHasInputStream aXMLResource) throws Exception;
123 
124   /**
125    * Apply the Schematron validation on the passed DOM node and return an SVRL
126    * XML DOM Document.
127    *
128    * @param aXMLNode
129    *        The DOM node to be validated via Schematron. May not be
130    *        <code>null</code>.
131    * @return <code>null</code> if the passed resource does not exist or the non-
132    *         <code>null</code> SVRL document otherwise.
133    * @throws Exception
134    *         In case the transformation somehow goes wrong.
135    * @see SVRLReader#readXML(org.w3c.dom.Node) on how to convert the document
136    *      into a domain object
137    */
138   @Nullable
139   Document applySchematronValidation (@Nonnull Node aXMLNode) throws Exception;
140 
141   /**
142    * Apply the Schematron validation on the passed XML source and return an SVRL
143    * XML DOM Document.
144    *
145    * @param aXMLSource
146    *        The XML source to be validated via Schematron. May not be
147    *        <code>null</code>.
148    * @return The SVRL XML document containing the result. May be
149    *         <code>null</code> when interpreting the Schematron failed.
150    * @throws Exception
151    *         In case the transformation somehow goes wrong.
152    * @see SVRLReader#readXML(org.w3c.dom.Node) on how to convert the document
153    *      into a domain object
154    */
155   @Nullable
156   Document applySchematronValidation (@Nonnull Source aXMLSource) throws Exception;
157 
158   /**
159    * Apply the Schematron validation on the passed XML resource and return a
160    * {@link SchematronOutputType} object.
161    *
162    * @param aXMLResource
163    *        The XML resource to be validated via Schematron. May not be
164    *        <code>null</code>.
165    * @return The SVRL object containing the result. May be <code>null</code>
166    *         when interpreting the Schematron failed.
167    * @throws Exception
168    *         In case the transformation somehow goes wrong.
169    */
170   @Nullable
171   SchematronOutputType applySchematronValidationToSVRL (@Nonnull IHasInputStream aXMLResource) throws Exception;
172 
173   /**
174    * Apply the Schematron validation on the passed DOM Node and return a
175    * {@link SchematronOutputType} object.
176    *
177    * @param aXMLNode
178    *        The DOM node to be validated via Schematron. May not be
179    *        <code>null</code>.
180    * @return The SVRL object containing the result. May be <code>null</code>
181    *         when interpreting the Schematron failed.
182    * @throws Exception
183    *         In case the transformation somehow goes wrong.
184    */
185   @Nullable
186   SchematronOutputType applySchematronValidationToSVRL (@Nonnull Node aXMLNode) throws Exception;
187 
188   /**
189    * Apply the Schematron validation on the passed XML source and return a
190    * {@link SchematronOutputType} object.
191    *
192    * @param aXMLSource
193    *        The XML source to be validated via Schematron. May not be
194    *        <code>null</code>.
195    * @return The SVRL object containing the result. May be <code>null</code>
196    *         when interpreting the Schematron failed.
197    * @throws Exception
198    *         In case the transformation somehow goes wrong.
199    */
200   @Nullable
201   SchematronOutputType applySchematronValidationToSVRL (@Nonnull Source aXMLSource) throws Exception;
202 }