Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.xmlcalabash.library;
  
  /*
   * ValidateWithRNG.java
   *
   * Copyright 2008 Mark Logic Corporation.
   * All rights reserved.
   *
   * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 
 import java.net.URI;

Created by IntelliJ IDEA. User: ndw Date: Apr 28, 2009 Time: 8:02:33 AM To change this template use File | Settings | File Templates.
 
 public class ValidateJing extends DefaultStep {
     private static final QName _assert_valid = new QName("""assert-valid");
     private static final QName _dtd_attribute_values = new QName("""dtd-attribute-values");
     private static final QName _dtd_id_idref_warnings = new QName("""dtd-id-idref-warnings");
     private static final QName _encoding = new QName("encoding");
     private static final QName _line = new QName("line");
     private static final QName _column = new QName("column");
 
     private ReadablePipe source = null;
     private ReadablePipe schemaSource = null;
     private WritablePipe result = null;
     private URI docBaseURI = null;

    
Creates a new instance of Delete
 
     public ValidateJing(XProcRuntime runtimeXAtomicStep step) {
         super(runtime,step);
     }
 
     public void setInput(String portReadablePipe pipe) {
         if ("source".equals(port)) {
              = pipe;
         } else if ("schema".equals(port)) {
              = pipe;
         }
     }
 
     public void setOutput(String portWritablePipe pipe) {
          = pipe;
     }
 
     public void reset() {
         .resetReader();
         .resetWriter();
     }
 
     public void run() throws SaxonApiException {
         super.run();
 
         boolean assertValid = getOption(,true);
         boolean checkIdRefs = getOption(,false);
        boolean dtdAugment  = getOption(,false);
        ErrorHandler eh = new RNGErrorHandler();
        PropertyMapBuilder properties = new PropertyMapBuilder();
        properties.put(.eh);
        properties.put(..getResolver());
        properties.put(..getResolver());
        if (checkIdRefs) {
            ..add(properties);
        }
        
        XdmNode doc = .read();
        XdmNode schema = .read();
        XdmNode root = S9apiUtils.getDocumentElement(schema);
         = doc.getBaseURI();
        SchemaReader sr = null;
        boolean compact = ..equals(root.getNodeName());
        String contentType = root.getAttributeValue(.);
        if (contentType != null) {
            compact |= contentType.startsWith("text/") || contentType.equals("application/relax-ng-compact-syntax");
        }
        InputSource schemaInputSource = null;
        JingConfigurer configurer = .getConfigurer().getJingConfigurer();
        if (compact) {
            // Compact syntax
            configurer.configRNC(properties);
            sr = CompactSchemaReader.getInstance();
            // Grotesque hack!
            StringReader srdr = new StringReader(compactSchema(root));
            schemaInputSource = new InputSource(srdr);
            schemaInputSource.setSystemId(root.getBaseURI().toASCIIString());
        } else {
            // XML syntax
            configurer.configRNG(properties);
            sr = new AutoSchemaReader();
            schemaInputSource = S9apiUtils.xdmToInputSource(schema);
        }
        ValidationDriver driver = new ValidationDriver(properties.toPropertyMap(), sr);
        try {
            if (driver.loadSchema(schemaInputSource)) {
                InputSource din = S9apiUtils.xdmToInputSource(doc);
                if (!driver.validate(din)) {
                    if (assertValid) {
                        throw XProcException.stepError(53);
                    }
                }
            } else {
                throw new XProcException(.getNode(), "Error loading schema");
            }
        } catch (SAXParseException e) {
            if (assertValid) {
                throw XProcException.stepError(53);
            }
        } catch (SAXException e) {
            throw new XProcException("SAX Exception"e);
        } catch (IOException e) {
            throw new XProcException("IO Exception"e);
        }
        .write(doc); // At the moment, we don't get any augmentation
    }
    private String compactSchema(XdmNode doc) {
        if ("base64".equals(doc.getAttributeValue())) {
            byte[] decoded = Base64.decode(doc.getStringValue());
            String s = new String(decoded);
            return s;
        } else {
            return doc.getStringValue();
        }
    }
    class RNGErrorHandler implements ErrorHandler {
        SAXParseException err = null;
        public void fatalError(SAXParseException ethrows SAXException {
            error(e);
        }
        public void error(SAXParseException ethrows SAXException {
            TreeWriter treeWriter = new TreeWriter();
            treeWriter.startDocument();
            treeWriter.addStartElement(.);
            if (e.getLineNumber()!=-1) {
                treeWriter.addAttribute(""+e.getLineNumber());
            }
            if (e.getColumnNumber()!=-1) {
                treeWriter.addAttribute(""+e.getColumnNumber());
            }
            treeWriter.startContent();
            treeWriter.addText(e.toString());
            treeWriter.addEndElement();
            treeWriter.endDocument();
            .reportError(treeWriter.getResult());
            if ( != null) {
                 = e;
            }
        }
        public void warningSAXParseException e ) {
            // ignore warnings
        }
    }
New to GrepCode? Check out our FAQ X