XML解析
XML解析 ステップは、ソーステーブルの1つの列に保持されたXMLを読み取り、行に変換します。入力行ごとに、指定した要素のすべての出現箇所を見つけ、一致するたびに1つの出力行を出力します。その要素の属性と子タグの値が列に展開されます。
Alteryxの XML Parse ツールに相当します。解析はワークフローエンジンで実行されるため(データベースはSQLでXMLを解析できません)、このステップはPlaidCloudネイティブで、SQLへのフォールバックはありません。
ソースとオプション
Section titled “ソースとオプション”- ソーステーブル — 解析するXMLを保持する行を持つテーブル。
- 出力テーブル — 解析した行を書き込むテーブル。
- XMLフィールド — XMLテキストを保持する列。
- 要素 — すべての出現箇所が出力行になる要素。空欄にすると、最上位の要素を解析します。
- 要素をXPath 1.0式として読み取る — 要素 を名前ではなくXPath 1.0式として扱います。これにより、述語、属性のテスト、ワイルドカード、
count()、name()、contains()などの関数を使用できます。相対パスは、ドキュメントのルート要素から始まります。式が選択した各項目が、1つの出力行になります。要素は通常どおり解析されます。属性やcount()の結果など、それ以外の項目は、その行の XMLフィールド の値をその項目の値で置き換えます。子の値がオンの場合、選択された属性は、代わりにその名前の独自の列を持ちます。XMLはエンティティとネットワークアクセスをオフにして読み取られ、整形式でないドキュメントは、そのような行をスキップしない限りステップを失敗させます。 - 子要素の値を列として出力 — 一致した要素ごとに、子タグごとの列を追加し、その子の値を保持します。
- Emit each child’s outer XML — さらに、各子のシリアル化されたXMLを保持する
<tag>_OuterXML列を追加します(子自体にさらにXMLが入れ子になっていて、後のステップで解析する場合に便利です)。 - XMLを解析できない行をスキップ — 値が整形式のXMLでない入力行を、ステップを失敗させる代わりに破棄します。
XMLをJSONに変換する
Section titled “XMLをJSONに変換する”出力 で、各ドキュメントを何にするかを選びます。
- 列(デフォルト)— 解析した値を、以下で設定する列として出力します。
- JSONとしての要素 — XMLフィールド の各ドキュメントを、そのJSONテキストで置き換え、入力行ごとに1つの出力行を出力します。属性は
@フィールド、要素自身のテキストは#text、繰り返される子は配列になります。要素、子の値、外部XML、XPathのオプションは無効になります。XMLを解析できない行をスキップ は引き続き適用されます。
JSONに型付きの値を持たせるには、Detect Value Types From First N Documents にドキュメント数を設定します。すると、JSONにはルートの子要素が入り、各要素の型は、最初のその数のドキュメントから整数、小数、ブール値、日付、タイムスタンプ、テキストのいずれかに判定され、それらすべてのドキュメントに収まるように拡張されます。これは、Sparkの schema_of_xml による推論と同じです。それらのドキュメントにないフィールドは省かれ、その型として読み取れない値はnullになります。0の場合、すべての値がテキストのままになります。
XPath列
Section titled “XPath列”XPathクエリ セクションは、KNIMEのXPathノードと同じように動作します。クエリ(xpaths)に行を追加すると、要素ごとに行を出力する代わりに、各入力行がコピーされ、XMLフィールド のXMLに対するXPath 1.0クエリごとに1つの列が追加されます。パススルー列は型を保持します。各クエリには、列(target)、XPath 1.0 式(path)、結果(kind)、複数の結果(multi)があります。
- 結果 — 値の型:
String、Integer、Double、Number、Boolean、Node、NodeSet。 - 複数の結果 — 複数の項目を選択するクエリが書き込む内容:
SingleCell(最初の項目)、CollectionCell(リスト値)、MultipleColumns(項目ごとに1列)、UngroupToRows(項目ごとに1行)、JoinedText(項目のテキストを 項目の区切り文字(separator)で連結したもの。デフォルトはスペースです。項目の部分 (XPath)(parts)を指定すると、代わりにこれらの相対パスの最初の一致から各項目のテキストを取り、部分の区切り文字(part_separator)で連結します)。 - 空は欠損(
empty_missing)— 何も選択しないクエリは欠損セルを返します。
セクションの次のフィールドは、クエリとともに適用されます。
- 名前空間(
xpath_namespaces)— クエリが使用する{prefix: namespace URI}のペア。ルートの名前空間プレフィックス(xpath_root_prefix)は、ドキュメントのルートのデフォルト名前空間をこのプレフィックスにバインドします。 - XML フィールドを出力に含めない(
xpath_remove_source)— XMLフィールド を出力に含めません。 - 偽になるブール クエリは欠損セルを返します(
xpath_missing_on_false)— 偽になるBooleanクエリは欠損セルを返します。何も選択しないコレクション クエリは欠損セルを返します(xpath_empty_set_missing)— 何も選択しないCollectionCellクエリは欠損セルを返します。 - XML フィールドを HTML ページとして読み取る(
xpath_html)— フィールドをHTMLページとして読み取り、htmlルートの下のXMLツリーに修復します。 - 「それぞれ 1 行」の項目番号列(
xpath_ungroup_index)—UngroupToRowsクエリで、各行の1から始まる項目番号をこの列に書き込みます。結果のない「それぞれ 1 行」(xpath_ungroup_empty)は、クエリが何も選択しないドキュメントに対する動作を決めます。値が欠損した1行(row、デフォルト)、行なし(drop)、またはステップの失敗(fail)です。 - 最初のクエリの要素が作るテーブルのみを書き込む(
xpath_table)— 最初のクエリの要素が作るテーブルのみを、要素ごとに1行(たとえばHTMLテーブルの各tr)として書き込み、その子要素をテキストセルにします。ヘッダーセルの最初の行が列に名前を付けます。ない場合、列はColumn <n>という名前になります。
列 タブは、パススルー 列、つまり各出力行に引き継ぐソース列のための標準のデータマッパーです。
解析で検出される列(要素の属性と子タグ)は出力に自動的に追加されるため、ここで列挙する必要はありません。抽出された名前がパススルー列(または先に抽出された列)と衝突する場合は、Alteryxと同様に、番号を付加して重複を解消します(id → id2 → id3)。
XML解析ステップを連鎖させる動作は、Alteryxと同じです。入力されるすべての列がそのまま渡されるため、後のステップは、先のステップが生成した列を再度解析したり、先のステップが抽出した列を参照したりできます。