jlibs.xml.xsd.XSParser Maven / Gradle / Ivy
/**
* Copyright 2015 Santhosh Kumar Tekuri
*
* The JLibs authors license 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 jlibs.xml.xsd;
import jlibs.core.lang.ImpossibleException;
import org.apache.xerces.dom.DOMInputImpl;
import org.apache.xerces.dom.DOMXSImplementationSourceImpl;
import org.apache.xerces.impl.Constants;
import org.apache.xerces.impl.xs.SchemaGrammar;
import org.apache.xerces.impl.xs.XSImplementationImpl;
import org.apache.xerces.impl.xs.XSModelImpl;
import org.apache.xerces.impl.xs.util.StringListImpl;
import org.apache.xerces.xs.LSInputList;
import org.apache.xerces.xs.XSLoader;
import org.apache.xerces.xs.XSModel;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMErrorHandler;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.LSResourceResolver;
import java.util.Arrays;
/**
* @author Santhosh Kumar T
*/
public class XSParser{
private XSLoader xsLoader;
public XSParser(){
this(null, null);
}
public XSParser(LSResourceResolver entityResolver, DOMErrorHandler errorHandler){
System.setProperty(DOMImplementationRegistry.PROPERTY, DOMXSImplementationSourceImpl.class.getName());
DOMImplementationRegistry registry;
try{
registry = DOMImplementationRegistry.newInstance();
}catch(Exception ex){
throw new ImpossibleException(ex);
}
XSImplementationImpl xsImpl = (XSImplementationImpl)registry.getDOMImplementation("XS-Loader");
xsLoader = xsImpl.createXSLoader(null);
DOMConfiguration config = xsLoader.getConfig();
config.setParameter(Constants.DOM_VALIDATE, Boolean.TRUE);
if(entityResolver!=null)
config.setParameter(Constants.DOM_RESOURCE_RESOLVER, entityResolver);
if(errorHandler!=null)
config.setParameter(Constants.DOM_ERROR_HANDLER, errorHandler);
}
/**
* for schema version "1.1", xerces 2.11.0-beta must be in classpath
*/
public void enableSchema11(){
xsLoader.getConfig().setParameter(
Constants.XERCES_PROPERTY_PREFIX + "validation/schema/version",
"http://www.w3.org/XML/XMLSchema/v1.1");
}
public XSModel parse(String uri){
XSModel xsModel = xsLoader.loadURI(uri);
if(xsModel==null)
throw new RuntimeException("Couldn't load XMLSchema from "+uri);
return xsModel;
}
public XSModel parse(String... uris){
XSModel xsModel = xsLoader.loadURIList(new StringListImpl(uris, uris.length));
if(xsModel==null)
throw new RuntimeException("Couldn't load XMLSchema from "+ Arrays.asList(uris));
return xsModel;
}
public XSModel parse(LSInputList inputList){
XSModel xsModel = xsLoader.loadInputList(inputList);
if(xsModel==null)
throw new RuntimeException("Couldn't load XMLSchema from "+ inputList);
return xsModel;
}
/**
* Parse an XML Schema document from String specified
*
* @param schema String data to parse. If provided, this will always be treated as a
* sequence of 16-bit units (UTF-16 encoded characters). If an XML
* declaration is present, the value of the encoding attribute
* will be ignored.
* @param baseURI The base URI to be used for resolving relative
* URIs to absolute URIs.
*/
public XSModel parseString(String schema, String baseURI){
return xsLoader.load(new DOMInputImpl(null, null, baseURI, schema, null));
}
public static XSModel getBuiltInSchema(){
return new XSModelImpl(new SchemaGrammar[0]);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy