1 /** 2 * Copyright (C) 2014-2018 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 import org.xml.sax.EntityResolver; 27 28 import com.helger.commons.id.IHasID; 29 import com.helger.commons.io.IHasInputStream; 30 import com.helger.commons.io.resource.IReadableResource; 31 import com.helger.commons.state.EValidity; 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> to use caching, if applicable. 51 * @since 5.0.2 in this interface 52 */ 53 boolean isUseCache (); 54 55 /** 56 * Enable or disable caching. 57 * 58 * @param bUseCache 59 * <code>true</code> to use the cache, <code>false</code> to not use 60 * it. 61 * @since 5.0.2 in this interface 62 */ 63 void setUseCache (boolean bUseCache); 64 65 /** 66 * @return The XML entity resolver to be used to read the Schematron or XML to 67 * be validated. May be <code>null</code>. 68 * @since 4.1.1 in implementation 69 * @since 5.0.2 in this interface 70 */ 71 @Nullable 72 EntityResolver getEntityResolver (); 73 74 /** 75 * @return <code>true</code> if this Schematron can be used to validate XML 76 * instances. If not, the Schematron is invalid and the log files must 77 * be investigated. 78 */ 79 boolean isValidSchematron (); 80 81 /** 82 * A method to check if the passed XML DOM node matches the Schematron rules 83 * or not. This is the quick check method, as it breaks upon the first failed 84 * assertion or the first successful report, if the implementation supports it 85 * (as e.g. the native pure Schematron version). 86 * 87 * @param aXMLResource 88 * The source XML to read and validate against the Schematron. May not 89 * be <code>null</code>. 90 * @return {@link EValidity#VALID} if the document is valid, 91 * {@link EValidity#INVALID} if it is invalid. 92 * @throws Exception 93 * in case of a sever error validating the schema 94 */ 95 @Nonnull 96 EValidity getSchematronValidity (@Nonnull IHasInputStream aXMLResource) throws Exception; 97 98 /** 99 * A method to check if the passed DOM node matches the Schematron rules or 100 * not. This is the quick check method, as it breaks upon the first failed 101 * assertion or the first successful report, if the implementation supports it 102 * (as e.g. the native pure Schematron version). 103 * 104 * @param aXMLNode 105 * The source DOM node to validate against the Schematron. May not be 106 * <code>null</code>. 107 * @param sBaseURI 108 * The Base URI of the XML document to be validated. May be 109 * <code>null</code>. 110 * @return {@link EValidity#VALID} if the document is valid, 111 * {@link EValidity#INVALID} if it is invalid. 112 * @throws Exception 113 * in case of a sever error validating the schema 114 */ 115 @Nonnull 116 EValidity getSchematronValidity (@Nonnull Node aXMLNode, @Nullable String sBaseURI) throws Exception; 117 118 /** 119 * A method to check if the passed XML DOM node matches the Schematron rules 120 * or not. This is the quick check method, as it breaks upon the first failed 121 * assertion or the first successful report, if the implementation supports it 122 * (as e.g. the native pure Schematron version). 123 * 124 * @param aXMLSource 125 * The source XML to be validated against the Schematron. May not be 126 * <code>null</code>. 127 * @return {@link EValidity#VALID} if the document is valid, 128 * {@link EValidity#INVALID} if it is invalid. 129 * @throws Exception 130 * in case of a sever error validating the schema 131 */ 132 @Nonnull 133 EValidity getSchematronValidity (@Nonnull Source aXMLSource) throws Exception; 134 135 /** 136 * Apply the Schematron validation on the passed XML resource and return an 137 * SVRL XML DOM Document. 138 * 139 * @param aXMLResource 140 * The XML resource to be validated via Schematron. May not be 141 * <code>null</code>. 142 * @return <code>null</code> if the passed resource does not exist or the non- 143 * <code>null</code> SVRL document otherwise. 144 * @throws Exception 145 * In case the transformation somehow goes wrong. 146 * @see com.helger.schematron.svrl.SVRLMarshaller on how to convert the 147 * document into a domain object 148 */ 149 @Nullable 150 Document applySchematronValidation (@Nonnull IHasInputStream aXMLResource) throws Exception; 151 152 /** 153 * Apply the Schematron validation on the passed DOM node and return an SVRL 154 * XML DOM Document. 155 * 156 * @param aXMLNode 157 * The DOM node to be validated via Schematron. May not be 158 * <code>null</code>. 159 * @param sBaseURI 160 * The Base URI of the XML document to be validated. May be 161 * <code>null</code>. 162 * @return <code>null</code> if the passed resource does not exist or the non- 163 * <code>null</code> SVRL document otherwise. 164 * @throws Exception 165 * In case the transformation somehow goes wrong. 166 * @see com.helger.schematron.svrl.SVRLMarshaller on how to convert the 167 * document into a domain object 168 */ 169 @Nullable 170 Document applySchematronValidation (@Nonnull Node aXMLNode, @Nullable String sBaseURI) throws Exception; 171 172 /** 173 * Apply the Schematron validation on the passed XML source and return an SVRL 174 * XML DOM Document. 175 * 176 * @param aXMLSource 177 * The XML source to be validated via Schematron. May not be 178 * <code>null</code>. 179 * @return The SVRL XML document containing the result. May be 180 * <code>null</code> when interpreting the Schematron failed. 181 * @throws Exception 182 * In case the transformation somehow goes wrong. 183 * @see com.helger.schematron.svrl.SVRLMarshaller on how to convert the 184 * document into a domain object 185 */ 186 @Nullable 187 Document applySchematronValidation (@Nonnull Source aXMLSource) throws Exception; 188 189 /** 190 * Apply the Schematron validation on the passed XML resource and return a 191 * {@link SchematronOutputType} object. 192 * 193 * @param aXMLResource 194 * The XML resource to be validated via Schematron. May not be 195 * <code>null</code>. 196 * @return The SVRL object containing the result. May be <code>null</code> 197 * when interpreting the Schematron failed. 198 * @throws Exception 199 * In case the transformation somehow goes wrong. 200 */ 201 @Nullable 202 SchematronOutputType applySchematronValidationToSVRL (@Nonnull IHasInputStream aXMLResource) throws Exception; 203 204 /** 205 * Apply the Schematron validation on the passed DOM Node and return a 206 * {@link SchematronOutputType} object. 207 * 208 * @param aXMLNode 209 * The DOM node to be validated via Schematron. May not be 210 * <code>null</code>. 211 * @param sBaseURI 212 * The Base URI of the XML document to be validated. May be 213 * <code>null</code>. 214 * @return The SVRL object containing the result. May be <code>null</code> 215 * when interpreting the Schematron failed. 216 * @throws Exception 217 * In case the transformation somehow goes wrong. 218 */ 219 @Nullable 220 SchematronOutputType applySchematronValidationToSVRL (@Nonnull Node aXMLNode, 221 @Nullable String sBaseURI) throws Exception; 222 223 /** 224 * Apply the Schematron validation on the passed XML source and return a 225 * {@link SchematronOutputType} object. 226 * 227 * @param aXMLSource 228 * The XML source to be validated via Schematron. May not be 229 * <code>null</code>. 230 * @return The SVRL object containing the result. May be <code>null</code> 231 * when interpreting the Schematron failed. 232 * @throws Exception 233 * In case the transformation somehow goes wrong. 234 */ 235 @Nullable 236 SchematronOutputType applySchematronValidationToSVRL (@Nonnull Source aXMLSource) throws Exception; 237 }