org.opengion.fukurou.xml

## クラス HybsXMLHandler

- java.lang.Object
- - org.xml.sax.helpers.DefaultHandler
  - - org.opengion.fukurou.xml.HybsXMLHandler

- すべての実装されたインタフェース:
    org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

      public class HybsXMLHandler
      extends org.xml.sax.helpers.DefaultHandler

       このクラスは、拡張オラクル XDK形式のXMLファイルを処理するハンドラです。
       オラクルXDK形式のXMLとは、下記のような ROWSET をトップとする ROW の
       集まりで１レコードを表し、各ROWには、カラム名をキーとするXMLになっています。

         <ROWSET>
             <ROW num="1">
                 <カラム1>値1</カラム1>
                   ･･･
                 <カラムn>値n</カラムn>
             </ROW>
              ･･･
             <ROW num="n">
                ･･･
             </ROW>
         <ROWSET>

       この形式であれば、XDK(Oracle XML Developer's Kit)を利用すれば、非常に簡単に
       データベースとXMLファイルとの交換が可能です。

       XDK(Oracle XML Developer's Kit)

       拡張XDK形式とは、ROW 以外に、SQL処理用タグ(EXEC_SQL)を持つ XML ファイルです。
       また、登録するテーブル(table)を ROWSETタグの属性情報として付与することができます。
       (大文字小文字に注意)
       これは、オラクルXDKで処理する場合、無視されますので、同様に扱うことが出来ます。
       この、EXEC_SQL は、それそれの XMLデータをデータベースに登録する際に、
       SQL処理を自動的に流す為の、SQL文を記載します。
       この処理は、イベント毎に実行される為、その配置順は重要です。
       このタグは、複数記述することも出来ますが、BODY部には、１つのSQL文のみ記述します。

         <ROWSET tableName="XX" >
             <EXEC_SQL>                    最初に記載して、初期処理(データクリア等)を実行させる。
                 delete from GEXX where YYYYY
             </EXEC_SQL>
             <MERGE_SQL>                   このSQL文で UPDATEして、結果が０件ならINSERTを行います。
                 update GEXX set AA=[AA] , BB=[BB] where CC=[CC]
             </MERGE_SQL>
             <ROW num="1">
                 <カラム1>値1</カラム1>
                   ･･･
                 <カラムn>値n</カラムn>
             </ROW>
              ･･･
             <ROW num="n">
                ･･･
             </ROW>
             <EXEC_SQL>                    最後に記載して、項目の設定(整合性登録)を行う。
                 update GEXX set AA='XX' , BB='YY' where CC='ZZ'
             </EXEC_SQL>
         <ROWSET>

       DefaultHandler クラスを拡張している為、通常の処理と同様に、使用できます。

            InputSource input = new InputSource( reader );
            HybsXMLHandler hndler = new HybsXMLHandler();

            SAXParserFactory f = SAXParserFactory.newInstance();
            SAXParser parser = f.newSAXParser();
            parser.parse( input,hndler );

       また、上記の処理そのものを簡略化したメソッド:parse( Reader ) を持っているため、
       通常そのメソッドを使用します。

       HybsXMLHandler には、TagElementListener をセットすることができます。
       これは、ROW 毎に 内部情報を TagElement オブジェクト化し、action( TagElement )
       が呼び出されます。この Listener を介して、１レコードずつ処理することが
       可能です。

  バージョン
    4.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK5.0,

- - ### フィールドのサマリー

    フィールド
    修飾子とタイプ | フィールドと説明
    --- | ---
    `static java.lang.String` | `EXEC_SQL` このハンドラで取り扱えるタグ名 "EXEC_SQL"
    `static java.lang.String` | `MERGE_SQL` このハンドラで取り扱えるタグ名 "MERGE_SQL"
    `static java.lang.String` | `ROW` このハンドラで取り扱えるタグ名 "ROW"
    `static java.lang.String` | `ROW_NUM` このハンドラで取り扱える ROWタグの属性 "num"
    `static java.lang.String` | `ROWSET` このハンドラのトップタグ名 "ROWSET"
    `static java.lang.String` | `ROWSET_TABLE` このハンドラで取り扱える ROWSETタグの属性

  - ### コンストラクタのサマリー

    コンストラクタ
    コンストラクタと説明
    `HybsXMLHandler()` デフォルトコンストラクター

  - ### メソッドのサマリー

    すべてのメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッドと説明
    --- | ---
    `void` | `characters(char[] buffer, int start, int length)` 要素内の文字データの通知を受け取ります。
    `void` | `endElement(java.lang.String namespace, java.lang.String localName, java.lang.String qname)` 要素の終了通知を受け取ります。
    `void` | `parse(java.io.Reader reader)` パース処理を行います。
    `void` | `setDefaultMap(java.util.Map map)` TagElement オブジェクトを作成する時の 初期カラム/値を設定します。
    `void` | `setTagElementListener(TagElementListener listener)` 内部に TagElementListener を登録します。
    `void` | `startElement(java.lang.String namespace, java.lang.String localName, java.lang.String qname, org.xml.sax.Attributes attributes)` 要素の開始通知を受け取ります。

    - ### クラスから継承されたメソッド org.xml.sax.helpers.DefaultHandler

      `endDocument, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning`

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### フィールドの詳細

    - #### ROWSET

          public static final java.lang.String ROWSET

      このハンドラのトップタグ名 "ROWSET"
      関連項目:
        定数フィールド値

    - #### ROWSET_TABLE

          public static final java.lang.String ROWSET_TABLE

      このハンドラで取り扱える ROWSETタグの属性
      関連項目:
        定数フィールド値

    - #### ROW

          public static final java.lang.String ROW

      このハンドラで取り扱えるタグ名 "ROW"
      関連項目:
        定数フィールド値

    - #### ROW_NUM

          public static final java.lang.String ROW_NUM

      このハンドラで取り扱える ROWタグの属性 "num"
      関連項目:
        定数フィールド値

    - #### EXEC_SQL

          public static final java.lang.String EXEC_SQL

      このハンドラで取り扱えるタグ名 "EXEC_SQL"
      関連項目:
        定数フィールド値

    - #### MERGE_SQL

          public static final java.lang.String MERGE_SQL

      このハンドラで取り扱えるタグ名 "MERGE_SQL"
      関連項目:
        定数フィールド値

  - ### コンストラクタの詳細

    - #### HybsXMLHandler

          public HybsXMLHandler()

      デフォルトコンストラクター
      変更履歴:
        6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.

  - ### メソッドの詳細

    - #### parse

          public void parse(java.io.Reader reader)

      パース処理を行います。 通常のパース処理の簡易メソッドになっています。
      パラメータ:
        `reader` - パース処理用のReaderオブジェクト

    - #### setTagElementListener

          public void setTagElementListener(TagElementListener listener)

      内部に TagElementListener を登録します。 これは、<ROW> タグの endElement 処理毎に呼び出されます。 つまり、行データを取得都度、TagElement オブジェクトを作成し、 この TagElementListener の action( TagElement ) メソッドを呼び出します。 何もセットしない、または、null がセットされた場合は、何もしません。
      パラメータ:
        `listener` - TagElementListenerオブジェクト

    - #### setDefaultMap

          public void setDefaultMap(java.util.Map map)

      TagElement オブジェクトを作成する時の 初期カラム/値を設定します。 TagElements オブジェクトは、XMLファイルより作成する為、項目(カラム)も XMLファイルのROW属性に持っている項目と値で作成されます。 このカラム名を、外部から初期設定することが可能です。 その場合、ここで登録したカラム順(Mapに、LinkedHashMap を使用した場合) が保持されます。また、ROW属性に存在しないカラムがあれば、値とともに 初期値として設定しておくことが可能です。 なお、ここでのMapは、直接設定していますので、ご注意ください。
      パラメータ:
        `map` - 初期カラムマップ

    - #### characters

          public void characters(char[] buffer,
                                 int start,
                                 int length)
                          throws org.xml.sax.SAXException

      要素内の文字データの通知を受け取ります。 インタフェース ContentHandler 内の characters メソッドをオーバーライドしています。 各文字データチャンクに対して特殊なアクション (ノードまたはバッファへのデータの追加、 データのファイルへの出力など) を実行することができます。
      定義:
        `characters` インタフェース内 `org.xml.sax.ContentHandler`
      オーバーライド:
        `characters` クラス内 `org.xml.sax.helpers.DefaultHandler`
      パラメータ:
        `buffer` - 文字データ配列
        `start` - 配列内の開始位置
        `length` - 配列から読み取られる文字数
      例外:
        `org.xml.sax.SAXException`
      関連項目:
        `DefaultHandler.characters(char[] , int , int )`

    - #### startElement

          public void startElement(java.lang.String namespace,
                                   java.lang.String localName,
                                   java.lang.String qname,
                                   org.xml.sax.Attributes attributes)
                            throws org.xml.sax.SAXException

      要素の開始通知を受け取ります。 インタフェース ContentHandler 内の startElement メソッドをオーバーライドしています。 パーサは XML 文書内の各要素の前でこのメソッドを呼び出します。 各 startElement イベントには対応する endElement イベントがあります。 これは、要素が空である場合も変わりません。対応する endElement イベントの前に、 要素のコンテンツ全部が順番に報告されます。 ここでは、タグがレベル３以上の場合は、上位タグの内容として取り扱います。よって、 タグに名前空間が定義されている場合、その属性は削除します。
      定義:
        `startElement` インタフェース内 `org.xml.sax.ContentHandler`
      オーバーライド:
        `startElement` クラス内 `org.xml.sax.helpers.DefaultHandler`
      パラメータ:
        `namespace` - 名前空間 ＵＲＩ
        `localName` - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
        `qname` - 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列
        `attributes` - 要素に付加された属性。属性が存在しない場合、空の Attributesオブジェクト
      例外:
        `org.xml.sax.SAXException`
      関連項目:
        `DefaultHandler.startElement(String , String , String , Attributes )`

    - #### endElement

          public void endElement(java.lang.String namespace,
                                 java.lang.String localName,
                                 java.lang.String qname)
                          throws org.xml.sax.SAXException

      要素の終了通知を受け取ります。 インタフェース ContentHandler 内の endElement メソッドをオーバーライドしています。 SAX パーサは、XML 文書内の各要素の終わりにこのメソッドを呼び出します。 各 endElement イベントには対応する startElement イベントがあります。 これは、要素が空である場合も変わりません。
      定義:
        `endElement` インタフェース内 `org.xml.sax.ContentHandler`
      オーバーライド:
        `endElement` クラス内 `org.xml.sax.helpers.DefaultHandler`
      パラメータ:
        `namespace` - 名前空間 URI
        `localName` - 前置修飾子を含まないローカル名。名前空間処理が行われない場合は空文字列
        `qname` - 前置修飾子を持つ XML 1.0 修飾名。修飾名を使用できない場合は空文字列
      例外:
        `org.xml.sax.SAXException`
      関連項目:
        `DefaultHandler.endElement(String , String , String )`
      変更履歴:
        6.4.3.2 (2016/02/19) findBugs. element は、コンストラクタで初期化されません。, 6.9.9.0 (2018/08/20) body の最後の処理の修正。

Webアプリケーションフレームワーク openGion
Copyright (c) 2009 The openGion Project.