# XMLPARSE演算子

XMLPARSEは、文字列式を構文解析してDerbyXML値にするSQL/XML演算子です。

この演算子の結果を一時的な値として使うこともできますし、DerbyのXML列に値を格納することもできます。 一時的か永続的かにかかわらず、XMLの値をXMLEXISTSやXMLQUERYのような、他のDerbyXML演算子の入力とすることができます。

#### 構文

    XMLPARSE (DOCUMENT 文字列値式 PRESERVE WHITESPACE)

DOCUMENT

  この省略できないキーワードにより、Derbyが構文解析できるXMLの入力のタイプが記述されます。 Derbyが構文解析可能な文字列式は、整形式のXML文書を構成するものに限られます。 これは、DerbyがJAXP構文解析器を使って文字列を構文解析しているからです。 JAXP構文解析器は、文字列値式が整形式のXML文書を構成することを期待します。 もし文字列が整形式のXML文書を構成しない場合、JAXPはエラーを挙げます。 Derbyはそのエラーを補足して、SQLExceptionとしてエラーを挙げなおします。

`文字列値式`
  CHAR、VARCHAR、LONGVARCHAR、CLOB等の、SQLの文字型と評価されるあらゆる式を置くことができます。`文字列値式`の引数はパラメータであってもかまいません。パラメータに型をあたえるために、CAST関数を使う必要があります。Derbyは、XML文書として構文解析する前に、パラメータが正しい型であるかを検証する必要があります。 もしパラメータがCAST関数なしで指定されたり、CAST関数で文字のデータ型以外の型が与えられた場合、Derbyはエラーを挙げます。
PRESERVE WHITESPACE
  省略できないこのキーワードは、Derbyが連続したXMLの節の間にある空白文字をどのように扱うかを記述します。 PRESERVE WHITESPACEキーワードが指定されると、空白文字をそのままとするSQL/XMLの規則にそって、Derbyは空白文字をそのままにします。

整形式のXML文書については、次の仕様を参照してください。http://www.w3.org/TR/REC-xml/#sec-well-formed .

制約事項: SQL/XMLの標準に拠れば、XMLPARSE演算子の引数はバイナリの列でも可能です。しかし、DerbyでXMLPARSE演算子の引数にとることができるのは文字列のみです。

#### 例

次の文で、`x_table`表の`xcol`XML列に単純なXML文書を挿入すします。:

    INSERT INTO x_table VALUES
        (1,
        XMLPARSE(DOCUMENT '
            <roster>
              <student age="18">AB</student>
              <student age="23">BC</student>
              <student>NOAGE</student>
            </roster>'
          PRESERVE WHITESPACE)
        )

JDBCにより、`x_table`表の`xcol`XML列に、大きなXML文書を挿入するには、次の文を書きます。

    INSERT INTO x_table VALUES
        (2,
        XMLPARSE (DOCUMENT CAST (? AS CLOB) PRESERVE WHITESPACE)
        )

この文には、setCharacterStream()メソッドや、型変換した対照型に可能なJDBCの他のsetXXXメソッドを使って、値を与える必要があります。

#### 利用上の覚書

DerbyのXML機能が動作するためには、Apache XercesのようなJAXP構文解析器およびApache XalanがJavaのクラスパスに記述されている必要があります。もしどちらかが欠けていると、XMLPARSE演算子を使おうとしたときエラーが発生します。

親トピック: 組み込み関数