[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution

 #freeze
 RIGHT:(2005/06/01 溝口@アドス)
 
 &color(red){編集中};
 
 目次
 
 #contents
 
 #br
 
 *概要
 *概要 [#jac75d84]
 
 Xalan-Javaは[[Apache XML プロジェクト:http://xml.apache.org/]]で開発された、オープンソースのXSLTプロセッサです。JavaプログラムのAPIを持つほか、コマンドラインで起動し、XSLT変換を実行できます。ここでは、コマンドラインでの実行方法を解説します。
 Xerces2 Java Parserは[[Apache XML プロジェクト:http://xml.apache.org/]]で開発された、オープンソースのXMLパーサです。JavaプログラムのDOM APIを持つほか、XSDバリデーションの機能を持ちます。ここでは、簡単なXSDバリデーションのプログラムを用意し、コマンドラインでのXSDバリデーション実行方法を解説します。
 
 Xalan-Javaの実行にはJDK or JRE 1.2.2、1.3.x、1.4.x 相当が必要です。
 Xerces2 Java Parserの実行にはJDK or JRE 1.2以上相当が必要です。
 
 -Sun J2SE~
 http://java.sun.com/j2se/
 -Sun J2SE 1.4.2 download~
 http://java.sun.com/j2se/1.4.2/ja/download.html
 
 ここでは、Xalan-Java 2.6.0 / J2SE 1.4.2_08 / Windows2000 の環境を例に説明します。
 ここでは、Xerces2 Java Parser 2.6.2 / J2SE 1.4.2_08 / Windows2000 の環境を例に説明します。
 
 #br
 
 *Xalan-Javaのダウンロードとインストール
 *Xerces2 Java Parserのダウンロードとインストール [#yf73e08d]
 
 Xalan-Javaプロジェクトのページは下記URLです。
 Xerces2 Java Parserプロジェクトのページは下記URLです。
 
 http://xml.apache.org/xalan-j/
 http://xml.apache.org/xerces2-j/
 
 #ref(m1.gif,center)
 
 このページからダウンロードページのミラーサイトを辿ることができます。([[ショートカット:http://www.meisei-u.ac.jp/mirror/apache/dist/xml/xalan-j/]]) ([[他のミラーサイトの一覧:http://www.apache.org/dyn/closer.cgi/xml/xalan-j]])
 このページからダウンロードページのミラーサイトを辿ることができます。([[ショートカット:http://www.meisei-u.ac.jp/mirror/apache/dist/xml/xerces-j/]])
 
 #ref(m2.gif,center)
 
 ミラーサイトから、xalan-j-current-bin.zip または xalan-j-current-bin.tar.gz をダウンロードします。このアーカイブには xalan.jar ファイルが含まれています。 xalan.jar ファイルを適当なフォルダへコピーします。ここで、このフォルダを&color(red){{XALAN_HOME}};とします。
 ミラーサイトから、Xerces-J-bin.2.6.2.zip または Xerces-J-bin.2.6.2.tar.gz をダウンロードします。このアーカイブには xercesImpl.jar ファイルおよび xml-apis.jar ファイルが含まれています。この2つのファイルを適当なフォルダへコピーします。ここで、このフォルダを&color(red){{XERCES_HOME}};とします。
 
 #br
 
 *XSLTファイルとソースファイルの用意
 *バリデーションプログラムの用意 [#ae5acbf1]
 
 XSLTファイルを適当なフォルダへコピーします。ここで、XSLTファイルのパスを&color(red){{XSLT_PATH}};とします。(サンプル:&ref(sample.xsl);)
 Xerces2にはコマンドラインで利用できるXSDバリデーションツールが付属していません。そのため、下記のプログラムを利用します。このプログラムのjarファイル(&ref(xsdvalid.jar);)を&color(red){{XERCES_HOME}};へコピーします。
 
 ソースファイルを適当なフォルダへコピーします。ここで、ソースファイルのパスを&color(red){{SRC_PATH}};とします。(サンプル:&ref(sample.xml);)
 【ValidatingXMLDOMParser.java】
  /* This source comes from http://www.experts-exchange.com/Web/Web_Languages/XML/Q_21058568.html */
  import org.xml.sax.SAXException;
  import org.xml.sax.SAXParseException;
  import org.xml.sax.helpers.DefaultHandler;
  import org.apache.xerces.parsers.DOMParser;
  import org.apache.xerces.parsers.XMLParser;
  import java.io.File;
  import org.w3c.dom.Document;
  
  public class ValidatingXMLDOMParser {
    public void validateSchema(String SchemaUrl, String XmlDocumentUrl) {
      try {
        DOMParser domParser = new DOMParser();
        domParser.setFeature("http://xml.org/sax/features/validation",true);
        domParser.setFeature("http://apache.org/xml/features/validation/schema",true);
        domParser.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
        domParser.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"
           ,SchemaUrl);
  
        Validator handler=new Validator();
        domParser.setErrorHandler(handler);  
        domParser.parse(XmlDocumentUrl);
  
        if(!handler.validationError)
          System.out.println("XML Document is valid");
      }
      catch(java.io.IOException e) {
        System.out.println(e);
      }
      catch (SAXException e) {
        System.out.println(e);
      }
    }
   
    private class Validator extends DefaultHandler {
      public boolean  validationError = false;
      
      public void error(SAXParseException e) throws SAXException {
        validationError = true;
        System.out.println(e);
      }
      public void fatalError(SAXParseException e) throws SAXException {
        validationError = true;
        System.out.println(e);
      }
      public void warning(SAXParseException e) throws SAXException {
        validationError = true;
        System.out.println(e);
      }
    }
  
  
    public static void main(String[] argv) {
      String SchemaUrl=argv[0];
      String XmlDocumentUrl=argv[1];
      ValidatingXMLDOMParser validator=new ValidatingXMLDOMParser();
      validator.validateSchema(SchemaUrl, XmlDocumentUrl);
  
    }
  }
 
 このプログラムでは、&color(red){外部};の(XMLファイルにおいてxsi:noNamespaceSchemaLocation属性やxsi:schemaLocation属性で指定されていない)、かつ&color(red){対象名前空間の指定されていない};XSDファイルを利用します。
 
 #br
 
 *XSLT変換の実行
 *XSDファイルとXMLファイルの用意 [#nd0fe8b1]
 
 以下のフォーマットでコマンドを実行します。ここで、&color(red){{OUT_PATH}};を出力ファイルのパスとします。下記2行は一行のコマンドとして記述します。
 XSDファイルを適当なフォルダへコピーします。ここで、XSDファイルのパスを&color(red){{XSD_PATH}};とします。(サンプル:&ref(sample.xsd);)
 
 > java -classpath &color(red){{XALAN_HOME}};\xalan.jar  org.apache.xalan.xslt.Process
 > -in  &color(red){{SRC_PATH}};  -xsl  &color(red){{XSLT_PATH}};  -out  &color(red){{OUT_PATH}};
 XMLファイルを適当なフォルダへコピーします。ここで、XMLファイルのパスを&color(red){{XML_PATH}};とします。(不正なXMLのサンプル:&ref(sample.xml);)
 
 #br
 
 *XSDバリデーションの実行 [#v9a3798c]
 
 以下のフォーマットでコマンドを実行します。下記2行は一行のコマンドとして記述します。
 
 > java -classpath &color(red){{XERCES_HOME}};\xercesImpl.jar;&color(red){{XERCES_HOME}};\xml-apis.jar;
 > &color(red){{XERCES_HOME}};\xsdvalid.jar  ValidatingXMLDOMParser &color(red){{XSD_PATH}};  &color(red){{XML_PATH}};
 
 
 具体的なコマンドの例
 
  java -classpath C:\work\tool\xalan.jar  org.apache.xalan.xslt.Process
     -in C:\work\src\sample.xml  -xsl C:\work\xslt\sample.xsl -out C:\work\temp\out.xml
  java -classpath .\xercesImpl.jar;.\xml-apis.jar;.\xsdvalid.jar ValidatingXMLDOMParser sample.xsd sample.xml
 
 #ref(m3.gif,center)
 
 他のアーギュメントは[[こちら:http://xml.apache.org/xalan-j/commandline.html]]を参照してください。
 XMLファイルがXSDファイルに対して正常であれば、下記の文字列を出力します。
 
  XML Document is valid
 
 #br
 XMLファイルがXSDファイルに対して不正であれば、下記のようなエラーメッセージを出力します。
 
 ----
 【エラーメッセージ例】
  org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '1.1' is not a valid value for 'boolean'.
  org.xml.sax.SAXParseException: cvc-type.3.1.3: The value '1.1' of element 'cell'
  is not valid.
 
 #comment
 #br

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved.