パッケージ org.opengion.fukurou.xml

# クラス HybsXMLHandler

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

すべての実装されたインタフェース:
  `ContentHandler`, `DTDHandler`, `EntityResolver`, `ErrorHandler`

public class HybsXMLHandler extends 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 ) を持っているため、 通常そのﾒｿｯﾄﾞを使用します。 8.1.0.3 (2022/01/21) EXEC_SQLに、exists属性追加。 EXEC_SQL は、『;』で複数SQLを実行できます。 これに、属性 exists="0" があれば、最初のSQLを実行し、結果が 0 の場合のみ、 以下のSQLを実行します。 <EXEC_SQL exists="0"> select count(*) from user_tables where table_name=upper('BONUS'); CREATE TABLE BONUS ( ････ ) </EXEC_SQL> exists="0" があるため、1行目を実行後、結果が一致した場合(=0)は、CREATE TABLE文を実行します。 exists="1" を指定した場合は、(!=0)と同じで、0以外という意味になります。 値の判定は、検索処理後の1行目1列目の値で判定します。 HybsXMLHandler には、TagElementListener をｾｯﾄすることができます。 これは、ROW 毎に 内部情報を TagElement ｵﾌﾞｼﾞｪｸﾄ化し、action( TagElement ) が呼び出されます。この Listener を介して、１ﾚｺｰﾄﾞずつ処理することが 可能です。

導入されたバージョン:
  JDK5.0,

- ## フィールドの概要

  フィールド
  修飾子とタイプ
  フィールド
  説明
  `static final String`
  `EXEC_EXISTS`
  このﾊﾝﾄﾞﾗで取り扱える EXEC_SQLﾀｸﾞの属性 "exists"
  `static final String`
  `EXEC_SQL`
  このﾊﾝﾄﾞﾗで取り扱えるﾀｸﾞ名 "EXEC_SQL"
  `static final String`
  `MERGE_SQL`
  このﾊﾝﾄﾞﾗで取り扱えるﾀｸﾞ名 "MERGE_SQL"
  `static final String`
  `ROW`
  このﾊﾝﾄﾞﾗで取り扱えるﾀｸﾞ名 "ROW"
  `static final String`
  `ROW_NUM`
  このﾊﾝﾄﾞﾗで取り扱える ROWﾀｸﾞの属性 "num"
  `static final String`
  `ROWSET`
  このﾊﾝﾄﾞﾗのﾄｯﾌﾟﾀｸﾞ名 "ROWSET"
  `static final String`
  `ROWSET_TABLE`
  このﾊﾝﾄﾞﾗで取り扱える ROWSETﾀｸﾞの属性

- ## コンストラクタの概要

  コンストラクタ
  コンストラクタ
  説明
  `HybsXMLHandler()`
  ﾃﾞﾌｫﾙﾄｺﾝｽﾄﾗｸﾀｰ

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `void`
  `characters(char[] buffer, int start, int length)`
  要素内の文字ﾃﾞｰﾀの通知を受け取ります。
  `void`
  `endElement(String namespace, String localName, String qname)`
  要素の終了通知を受け取ります。
  `void`
  `parse(Reader reader)`
  ﾊﾟｰｽ処理を行います。
  `void`
  `setDefaultMap(Map<String,String> map)`
  TagElement ｵﾌﾞｼﾞｪｸﾄを作成する時の 初期ｶﾗﾑ/値を設定します。
  `void`
  `setTagElementListener(TagElementListener listener)`
  内部に TagElementListener を登録します。
  `void`
  `startElement(String namespace, String localName, String qname, 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`

  ### インタフェースから継承されたメソッド org.xml.sax.ContentHandler

  `declaration`

- ## フィールド詳細

  - ### ROWSET

    public static final String ROWSET
    このﾊﾝﾄﾞﾗのﾄｯﾌﾟﾀｸﾞ名 "ROWSET"
    関連項目:
      - 定数フィールド値

  - ### ROWSET_TABLE

    public static final String ROWSET_TABLE
    このﾊﾝﾄﾞﾗで取り扱える ROWSETﾀｸﾞの属性
    関連項目:
      - 定数フィールド値

  - ### ROW

    public static final String ROW
    このﾊﾝﾄﾞﾗで取り扱えるﾀｸﾞ名 "ROW"
    関連項目:
      - 定数フィールド値

  - ### ROW_NUM

    public static final String ROW_NUM
    このﾊﾝﾄﾞﾗで取り扱える ROWﾀｸﾞの属性 "num"
    関連項目:
      - 定数フィールド値

  - ### EXEC_SQL

    public static final String EXEC_SQL
    このﾊﾝﾄﾞﾗで取り扱えるﾀｸﾞ名 "EXEC_SQL"
    関連項目:
      - 定数フィールド値

  - ### EXEC_EXISTS

    public static final String EXEC_EXISTS
    このﾊﾝﾄﾞﾗで取り扱える EXEC_SQLﾀｸﾞの属性 "exists"
    関連項目:
      - 定数フィールド値

  - ### MERGE_SQL

    public static final 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(Reader reader)
    ﾊﾟｰｽ処理を行います。 通常のﾊﾟｰｽ処理の簡易ﾒｿｯﾄﾞになっています。
    パラメータ:
      `reader` - ﾊﾟｰｽ処理用のReaderｵﾌﾞｼﾞｪｸﾄ

  - ### setTagElementListener

    public void setTagElementListener(TagElementListener listener)
    内部に TagElementListener を登録します。 これは、<ROW> ﾀｸﾞの endElement 処理毎に呼び出されます。 つまり、行ﾃﾞｰﾀを取得都度、TagElement ｵﾌﾞｼﾞｪｸﾄを作成し、 この TagElementListener の action( TagElement ) ﾒｿｯﾄﾞを呼び出します。 何もｾｯﾄしない、または、null がｾｯﾄされた場合は、何もしません。
    パラメータ:
      `listener` - TagElementListenerｵﾌﾞｼﾞｪｸﾄ

  - ### setDefaultMap

    public void setDefaultMap(Map<String,String> map)
    TagElement ｵﾌﾞｼﾞｪｸﾄを作成する時の 初期ｶﾗﾑ/値を設定します。 TagElements ｵﾌﾞｼﾞｪｸﾄは、XMLﾌｧｲﾙより作成する為、項目(ｶﾗﾑ)も XMLﾌｧｲﾙのROW属性に持っている項目と値で作成されます。 このｶﾗﾑ名を、外部から初期設定することが可能です。 その場合、ここで登録したｶﾗﾑ順(Mapに、LinkedHashMap を使用した場合) が保持されます。また、ROW属性に存在しないｶﾗﾑがあれば、値とともに 初期値として設定しておくことが可能です。 なお、ここでのMapは、直接設定していますので、ご注意ください。
    パラメータ:
      `map` - 初期ｶﾗﾑﾏｯﾌﾟ

  - ### characters

    public void characters(char[] buffer, int start, int length) throws SAXException
    要素内の文字ﾃﾞｰﾀの通知を受け取ります。 ｲﾝﾀﾌｪｰｽ ContentHandler 内の characters ﾒｿｯﾄﾞをｵｰﾊﾞｰﾗｲﾄﾞしています。 各文字ﾃﾞｰﾀﾁｬﾝｸに対して特殊なｱｸｼｮﾝ (ﾉｰﾄﾞまたはﾊﾞｯﾌｧへのﾃﾞｰﾀの追加、 ﾃﾞｰﾀのﾌｧｲﾙへの出力など) を実行することができます。
    定義:
      `characters` インタフェース内 `ContentHandler`
    オーバーライド:
      `characters` クラス内 `DefaultHandler`
    パラメータ:
      `buffer` - 文字ﾃﾞｰﾀ配列
      `start` - 配列内の開始位置
      `length` - 配列から読み取られる文字数
    例外:
      `SAXException`
    関連項目:
      - `DefaultHandler.characters(char[], int, int)`

  - ### startElement

    public void startElement(String namespace, String localName, String qname, Attributes attributes) throws SAXException
    要素の開始通知を受け取ります。 ｲﾝﾀﾌｪｰｽ ContentHandler 内の startElement ﾒｿｯﾄﾞをｵｰﾊﾞｰﾗｲﾄﾞしています。 ﾊﾟｰｻは XML 文書内の各要素の前でこのﾒｿｯﾄﾞを呼び出します。 各 startElement ｲﾍﾞﾝﾄには対応する endElement ｲﾍﾞﾝﾄがあります。 これは、要素が空である場合も変わりません。対応する endElement ｲﾍﾞﾝﾄの前に、 要素のｺﾝﾃﾝﾂ全部が順番に報告されます。 ここでは、ﾀｸﾞがﾚﾍﾞﾙ３以上の場合は、上位ﾀｸﾞの内容として取り扱います。よって、 ﾀｸﾞに名前空間が定義されている場合、その属性は削除します。
    定義:
      `startElement` インタフェース内 `ContentHandler`
    オーバーライド:
      `startElement` クラス内 `DefaultHandler`
    パラメータ:
      `namespace` - 名前空間 ＵＲＩ
      `localName` - 前置修飾子を含まないﾛｰｶﾙ名。名前空間処理が行われない場合は空文字列
      `qname` - 前置修飾子を持つ修飾名。修飾名を使用できない場合は空文字列
      `attributes` - 要素に付加された属性。属性が存在しない場合、空の Attributesｵﾌﾞｼﾞｪｸﾄ
    例外:
      `SAXException`
    関連項目:
      - `DefaultHandler.startElement(String, String, String, Attributes)`
    変更履歴:
      8.1.0.3 (2022/01/21) EXEC_SQLに、exists属性追加。

  - ### endElement

    public void endElement(String namespace, String localName, String qname) throws SAXException
    要素の終了通知を受け取ります。 ｲﾝﾀﾌｪｰｽ ContentHandler 内の endElement ﾒｿｯﾄﾞをｵｰﾊﾞｰﾗｲﾄﾞしています。 SAX ﾊﾟｰｻは、XML 文書内の各要素の終わりにこのﾒｿｯﾄﾞを呼び出します。 各 endElement ｲﾍﾞﾝﾄには対応する startElement ｲﾍﾞﾝﾄがあります。 これは、要素が空である場合も変わりません。
    定義:
      `endElement` インタフェース内 `ContentHandler`
    オーバーライド:
      `endElement` クラス内 `DefaultHandler`
    パラメータ:
      `namespace` - 名前空間 URI
      `localName` - 前置修飾子を含まないﾛｰｶﾙ名。名前空間処理が行われない場合は空文字列
      `qname` - 前置修飾子を持つ XML 1.0 修飾名。修飾名を使用できない場合は空文字列
    例外:
      `SAXException`
    関連項目:
      - `DefaultHandler.endElement(String, String, String)`
    変更履歴:
      6.4.3.2 (2016/02/19) findBugs. element は、ｺﾝｽﾄﾗｸﾀで初期化されません。, 6.9.9.0 (2018/08/20) body の最後の処理の修正。