XMLフラット化:外部公開されているXMLデータを活用する

デザイナの [新しい手順]-[抽出データを作成する]-[XMLファイルから] メニューを選び、「変換(XML→抽出データ)」手順種を作成することができます。
「変換(XML→抽出データ)」の機能を一言でいうと、「外部XMLデータを xoBlos 用にフラット化する」機能となります。

外部公開されているXMLデータで有用なものは数多く、ネット検索すると色々と見つかります。

国立国会図書館メタデータXML
気象庁防災情報XML
国税庁法人番号公表XML
・行政オープンデータXML山口県、芦屋市、藤沢市和光市、など)
科学技術振興機構「科学技術情報発信・流通総合システム(J-STAGE)」XML
総務省「e-Gov 法令」XML
など、など。
これらの外部公開XMLの利用に関しては、各サイトの利用規約をお読みください。

次回の「XMLフラット化」記事では、「e-Gov 法令」XMLを例にして、xoBlos(ゾブロス)の法令研究(法令データサイエンス)での活用方法を考えてみます。

xoBlos(ゾブロス)の製品に関するお問い合わせは、下記のURLまでお寄せください。
https://www.xoblos.com/inquiry/q9/

xoBlos データナビゲーションマップ

データナビゲーションマップ

楕円形の図形は、データを登場人物としたステージ(舞台)であり、xoBlos の各手順種(ツール種類)に対応します。画像をクリックすると拡大します。

f:id:xoblos:20210812122845p:plain

凡例:登場人物ならぬ、登場データ

f:id:xoblos:20210809121223p:plain

Excel ファイル(xls、xlsx、xlsm ファイル)。

ブック、シート(表形式)、行・列、セルというデータ構成を持つ。

f:id:xoblos:20210809123325p:plain

CSV ファイル。

テキスト+カンマ区切り、またはテキスト+タブ区切りデータ。

f:id:xoblos:20210809123341p:plain

xoBlos 標準XMLファイル。

xoBlos で抽出されたXMLデータ(抽出データ、XML形式)。xoBlos で作成されたXMLデータ。

f:id:xoblos:20210809121237p:plain

テキストファイル。

固定長テキスト、不定型テキストなど。

f:id:xoblos:20210809123937p:plain

XML形式のML(マークアップランゲージ)ファイル。

xoBlos 以外の外部XML、HTML(XHTML)ファイルなど。

f:id:xoblos:20210809124111p:plain

DB(データベース)データ。RDB(リレーショナルデータベース)の table(テーブル)データ。テーブルは表としての形式を持つ。

xobQuery(ゾブクエリ)特設ステージ

f:id:xoblos:20210809200451p:plain

凡例:楕円形で表記したステージ(舞台)

図形略号 [新しい手順] メニュー 手順種名
Exporter [抽出データを作成する]-[Excelファイルから] Excel表から抽出
CSVXML [抽出データを作成する]-[CSVファイルから] 変換(CSV→抽出データ)
DB→XML [抽出データを作成する]-[データベースから] 変換(DB→抽出データ)
Importer [抽出データから出力する]-[Excel表を生成] Excel表を生成
XMLCSV [抽出データから出力する]-[CSVファイルを生成] 変換(抽出データ→CSV)
XMLXML

[抽出データを作成する]-[XMLファイルから]

[抽出データを作成する]-[他の抽出データから(並べ替え/連結を行って)]
[抽出データを作成する]-[他の抽出データから(抽出データ同士を比較して)]
[抽出データを作成する]-[他の抽出データから(編集を行って)]
[抽出データを作成する]-[他の抽出データから(番号を振って)]

変換(XML→抽出データ)
抽出データの並べ替え
抽出データの比較


抽出データの編集
抽出データの番号付け

XSLT [コピー/削除/その他]-[XMLを任意の形式に変換] 変換(XSLTで)
xobQuery

[外部のアプリケーションを実行]

実行するファイル
::\helper\xobquery.exe

外部アプリの実行

xobQuery

XSLT:xoBlos 流タグの手繰り(たぐり)方

次のようなXMLファイル(xoBlos 抽出データ)を、練習用に用意しました。

input.xml

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <ROWS>
    <商品コード>3001</商品コード>
    <商品名>みかん</商品名>
    <単価>238</単価>
    <産地名>愛媛</産地名>
  </ROWS>
  <ROWS>
    <商品コード>3002</商品コード>
    <商品名>りんご</商品名>
    <単価>313</単価>
    <産地名>青森</産地名>
  </ROWS>
  <ROWS>
    <商品コード>3003</商品コード>
    <商品名>かき</商品名>
    <単価>252</単価>
    <産地名>和歌山</産地名>
  </ROWS>
  <ROWS>
    <商品コード>3004</商品コード>
    <商品名>メロン</商品名>
    <単価>485</単価>
    <産地名>茨城</産地名>
  </ROWS>
  <ROWS>
    <商品コード>3005</商品コード>
    <商品名>バナナ</商品名>
    <単価>217</単価>
    <産地名>沖縄</産地名>
  </ROWS>
</Root>

前回記事で作ってみた、XMLファイルをコピーする原型ですが、

XSLT:探検の始まり
https://xoblos.hatenablog.jp/entry/2021/07/16/022255

この処理と同等の設定を、xoBlos 標準XMLファイル(抽出データ)(上記の input.xml)を入力ファイルにして行ってみましょう。

xml.xslt 変換設定(XSLTスタイルシート)ファイル

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />

  <xsl:template match="Root">
    <Root><xsl:apply-templates/></Root>
  </xsl:template>

  <xsl:template match="ROWS">
    <ROWS><xsl:apply-templates/></ROWS>
  </xsl:template>

  <xsl:template match="node()">
	<xsl:copy-of select="."/>
  </xsl:template>

</xsl:stylesheet>

次の箇所でルート要素(Root)をマッチさせています。

 <xsl:template match="Root"> <Root><xsl:apply-templates/></Root> </xsl:template>

次の箇所でレコード(行)要素(ROWS)をマッチさせています。

<xsl:template match="ROWS"> <ROWS><xsl:apply-templates/></ROWS> </xsl:template>

これらの RootROWS を手繰っていく手法では、下記のような xoBlos XML形式の構造特性を利用しています。

表データと相性の良いxoBlos XML構造
https://xoblos.hatenablog.jp/entry/2018/11/23/153425

QRコード認証:オフラインで認証する

xoBlos のクライアント製品(デザイナ)のライセンス認証では、インターネット接続でのオンライン認証ができない環境のために、オフライン認証の仕組みが用意されています。

製品バージョン 1.7.5 以上には、オフライン認証としてQRコード認証の機能があります。QRコード認証の手順は次のようになります。


1. 初回起動時にライセンスキー入力ダイアログが表示されます。
※起動後のメニュー「ヘルプ」→「ライセンスキーの入力」からも表示できます。

f:id:xoblos:20210805001435p:plain

2. 割り当てられたライセンスキーを入力します。

f:id:xoblos:20210805001454p:plain

3.「オフラインで認証する」リンクを押下します。

f:id:xoblos:20210805001511p:plain

4. オフライン認証画面が表示されるため、スマートフォンなどのQRコードが読み込める端末でQRコードを読み取り、読み取ったリンク先を開きます。

f:id:xoblos:20210805001526p:plain

5.リンクを読み取ると、QRコード認証画面が表示されるため、「認証を開始する」ボタンを押下します。

f:id:xoblos:20210805001543p:plain

6. 認証が成功すると、認証成功の旨が表示され、回答キーが作成されます。

f:id:xoblos:20210805001604p:plain

7. 入力欄に手順6で表示された回答キーを入力します。

f:id:xoblos:20210805001626p:plain

8.「有効化」ボタンを押下すると、ライセンス認証が完了します。

f:id:xoblos:20210805001647p:plain

スマートフォンが使えないなど、 QRコードが読み込めない場合は、QRコードが読み込めない環境の場合」リンクを押下し、表示されるガイダンスの通りに進めてください。

xobQuery:クエリファイル(.sql ファイル)にSQLを記述する

前回記事では、47の都道府県データを全件(全レコード)選択するサンプルをご紹介しました。

xobQuery:DB処理の原型から始めよう https://xoblos.hatenablog.jp/entry/2021/08/02/232238

次に、クエリファイル(.sql ファイル)に記述したSQLで、全件ではなく、関東1都6県のみを選択出力するなど、いくつかパターン登録して実行してみましょう。

コマンドライン引数の3つのパターン

-i INPUT\input.csv/work -h -Q SQL\P1.sql -o OUTPUT\output1.xml

-i INPUT\input.csv/work -h -Q SQL\P2.sql -o OUTPUT\output2.xml

-i INPUT\input.csv/work -h -Q SQL\P3.sql -o OUTPUT\output3.xml

パターン1 関東1都6県

P1.sql

/* パターン1  関東1都6県(茨城、栃木、群馬、埼玉、千葉、東京、神奈川) */

SELECT * FROM work WHERE
			都道府県コード = '08' or 
			都道府県コード = '09' or
			都道府県コード = '10' or
			都道府県コード = '11' or
			都道府県コード = '12' or
			都道府県コード = '13' or
			都道府県コード = '14';

出力結果(output1.xml

f:id:xoblos:20210803202939p:plain

パターン2 四国4県

P2.sql

/* パターン2  四国4県(徳島、香川、愛媛、高知) */

SELECT * FROM work WHERE
			都道府県コード = '36' or 
			都道府県コード = '37' or
			都道府県コード = '38' or
			都道府県コード = '39';

出力結果(output2.xml

f:id:xoblos:20210803203002p:plain

パターン3 東北6県

P3.sql

/* パターン3  東北6県(青森、岩手、宮城、秋田、山形、福島) */

SELECT * FROM work WHERE
			都道府県コード = '02' or 
			都道府県コード = '03' or
			都道府県コード = '04' or
			都道府県コード = '05' or
			都道府県コード = '06' or
			都道府県コード = '07';

出力結果(output3.xml

f:id:xoblos:20210803203029p:plain

更なる課題

それでは問題(課題)を出してみます。

「業務の設定」画面に、入力パラメータ(業務変数)として「パターン番号」(1-3)を設定し、ユーザーが入力できるようにします。

1が入力されたら「パターン1 関東1都6県」、2が入力されたら「パターン2 四国4県」、3が入力されたら「パターン3 東北6県」のクエリ処理が実行され、3通りの出力結果となるよう、手順を組み立ててみましょう。解答は後日掲載します。

xobQuery:DB処理の原型から始めよう

xobQuery(ゾブクエリ)入門者の皆様のために、DB処理の原型(ひな形)をご用意しました。CSVファイルをスクラッチDBに投入し、クエリ(SQLで処理した結果をXMLファイルに出力する最初のモデルです。

DB処理原型の青写真

f:id:xoblos:20210803001841p:plain

フォルダ構成例

f:id:xoblos:20210802232821p:plain

 [DB]   DBファイル(temp.db)を残すときの置き場所。

[INPUT]  入力ファイルを置きます。

[OUTPUT] 出力ファイルを置きます。

[SQL]   クエリ(SQL)を .sql ファイルに記述するときの置き場所。

原型.xbt(または .xob) 業務定義ファイル

原型.xbt(または .xob)の設定画面

[新しい手順]-[外部のアプリケーションを実行] メニューで手順を作成し、設定します。

「実行するファイル」::\helper\xobquery.exe にし、「作業フォルダ」は通常 .(ピリオド)として xbt(xob)ファイルのあるカレントフォルダとします。

f:id:xoblos:20210803153645p:plain

コマンドライン引数

-i INPUT\input.csv/work -h -q "SELECT * FROM work;" -o OUTPUT\output.xml

-i INPUT\input.csv/work    … INPUTフォルダのinput.csvをworkテーブルに投入
-h                         … 入力ファイルの1行目をヘッダー(項目名)とする
-o OUTPUT\output.xml       … クエリの結果を、OUTPUTフォルダのoutput.xmlに出力する

-q "SELECT * FROM work;" の部分で、クエリ(SQL)を直接コマンドラインで指定しています。

-Q SQL\all.sql のように、クエリ(SQL)を記述したファイル名(パス)を指定することもできます。この場合は、[SQL] フォルダの all.sql の中に "SELECT * FROM work;" と記述してファイル保存しておきます。

-i INPUT\input.csv/work -h -Q SQL\all.sql -o OUTPUT\output.xml

INPUT\input.csv の例

都道府県コード,都道府県名
01,北海道
02,青森県
03,岩手県
04,宮城県
05,秋田県
06,山形県
07,福島県
08,茨城県
09,栃木県
10,群馬県
11,埼玉県
12,千葉県
13,東京都
14,神奈川県
15,新潟県
16,富山県
17,石川県
18,福井県
19,山梨県
20,長野県
21,岐阜県
22,静岡県
23,愛知県
24,三重県
25,滋賀県
26,京都府
27,大阪府
28,兵庫県
29,奈良県
30,和歌山県
31,鳥取県
32,島根県
33,岡山県
34,広島県
35,山口県
36,徳島県
37,香川県
38,愛媛県
39,高知県
40,福岡県
41,佐賀県
42,長崎県
43,熊本県
44,大分県
45,宮崎県
46,鹿児島県
47,沖縄県

OUTPUT\output.xml 出力結果

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <ROWS>
    <都道府県コード>01</都道府県コード>
    <都道府県名>北海道</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>02</都道府県コード>
    <都道府県名>青森県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>03</都道府県コード>
    <都道府県名>岩手県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>04</都道府県コード>
    <都道府県名>宮城県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>05</都道府県コード>
    <都道府県名>秋田県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>06</都道府県コード>
    <都道府県名>山形県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>07</都道府県コード>
    <都道府県名>福島県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>08</都道府県コード>
    <都道府県名>茨城県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>09</都道府県コード>
    <都道府県名>栃木県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>10</都道府県コード>
    <都道府県名>群馬県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>11</都道府県コード>
    <都道府県名>埼玉県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>12</都道府県コード>
    <都道府県名>千葉県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>13</都道府県コード>
    <都道府県名>東京都</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>14</都道府県コード>
    <都道府県名>神奈川県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>15</都道府県コード>
    <都道府県名>新潟県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>16</都道府県コード>
    <都道府県名>富山県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>17</都道府県コード>
    <都道府県名>石川県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>18</都道府県コード>
    <都道府県名>福井県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>19</都道府県コード>
    <都道府県名>山梨県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>20</都道府県コード>
    <都道府県名>長野県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>21</都道府県コード>
    <都道府県名>岐阜県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>22</都道府県コード>
    <都道府県名>静岡県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>23</都道府県コード>
    <都道府県名>愛知県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>24</都道府県コード>
    <都道府県名>三重県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>25</都道府県コード>
    <都道府県名>滋賀県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>26</都道府県コード>
    <都道府県名>京都府</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>27</都道府県コード>
    <都道府県名>大阪府</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>28</都道府県コード>
    <都道府県名>兵庫県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>29</都道府県コード>
    <都道府県名>奈良県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>30</都道府県コード>
    <都道府県名>和歌山県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>31</都道府県コード>
    <都道府県名>鳥取県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>32</都道府県コード>
    <都道府県名>島根県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>33</都道府県コード>
    <都道府県名>岡山県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>34</都道府県コード>
    <都道府県名>広島県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>35</都道府県コード>
    <都道府県名>山口県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>36</都道府県コード>
    <都道府県名>徳島県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>37</都道府県コード>
    <都道府県名>香川県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>38</都道府県コード>
    <都道府県名>愛媛県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>39</都道府県コード>
    <都道府県名>高知県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>40</都道府県コード>
    <都道府県名>福岡県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>41</都道府県コード>
    <都道府県名>佐賀県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>42</都道府県コード>
    <都道府県名>長崎県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>43</都道府県コード>
    <都道府県名>熊本県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>44</都道府県コード>
    <都道府県名>大分県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>45</都道府県コード>
    <都道府県名>宮崎県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>46</都道府県コード>
    <都道府県名>鹿児島県</都道府県名>
  </ROWS>
  <ROWS>
    <都道府県コード>47</都道府県コード>
    <都道府県名>沖縄県</都道府県名>
  </ROWS>
</Root>

編集変換:2パターン以上の文字列変換

項目中の文字列を置換するには、通常Excel表を生成」手順で、制御シートキーワード「文字列編集」置換、全置換を指定して行います。この手法では、変換パターンが1種類しか指定できないため、2種類以上の変換パターンが必要な場合は、「抽出データの編集」手順を使用します。

「抽出データの編集」手順の設定画面

f:id:xoblos:20210801145945p:plain

f:id:xoblos:20210801181617p:plain

「入力ファイル名」で指定したファイルの例

抽出データ(xoBlos XML形式)のファイル名(パス名)を指定します。この例では、業務要件として多い「(株)への表記統一」をとりあげます。「株式会社」、「(株)」半角カッコ挟み、「㈱」環境依存文字を、「(株)」全角カッコ挟みに統一する要件です。

input.xml の内容

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <ROWS>
    <会社コード>1001</会社コード>
    <会社名>オフピーク(株)</会社名>
    <所在地>中央区</所在地>
  </ROWS>
  <ROWS>
    <会社コード>1002</会社コード>
    <会社名>株式会社マーボーパラダイス</会社名>
    <所在地>品川区</所在地>
  </ROWS>
  <ROWS>
    <会社コード>1003</会社コード>
    <会社名>㈱マシュマロプラネット</会社名>
    <所在地>港区</所在地>
  </ROWS>
</Root> 

「変換設定ファイル名」で指定したファイルと、その変換結果例

変換設定ファイル(XML形式)のファイル名(パス名)を指定します。「会社名」の表記統一のため、<置換> を3パターン指定しています。XMLファイルはメモ帳やテキストエディタで編集し、文字コードUTF-8で保存してください。

[CTL] フォルダの「編集_株式会社.xml」の内容

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <Convert>
    <Stages>
      <Stage>
        <NewTags>
<NewTag> <TagName>会社名</TagName> <Operations> <置換>株式会社,(株)</置換> <置換>(株),(株)</置換> <置換>㈱,(株)</置換> </Operations> </NewTag>
</NewTags> </Stage> </Stages> </Convert> </Root>


デザイナでの出力結果(output.xml

f:id:xoblos:20210801155056p:plain

「全置換」の設定例、および「置換」との合わせ技

半角スペース、全角スペースをすべて削除したいという要件も加えての複合指定例です。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <Convert>
    <Stages>
      <Stage>
        <NewTags>

          <NewTag>
            <TagName>会社名</TagName>
            <Operations>
              <全置換> ,</全置換>
              <全置換> ,</全置換>

              <置換>株式会社,(株)</置換>
              <置換>(株),(株)</置換>
              <置換>㈱,(株)</置換>
            </Operations>
          </NewTag>

          <NewTag>
            <TagName>所在地</TagName>
            <Operations>
              <全置換> ,</全置換>
              <全置換> ,</全置換>
            </Operations>
          </NewTag>

        </NewTags>
      </Stage>
    </Stages>
  </Convert>
</Root>

項目名(XMLタグ)の並び順制御

前述の出力結果のように、<NewTag> で指定した項目が行グループ先頭に行きますので、項目名(XMLタグ名)の並び順を入力時と同じにしたいときは、次の例のように <Source> <CopyFrom> を使用して制御します。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <Convert>
    <Stages>
      <Stage>
        <NewTags>

          <NewTag>
            <TagName>会社コード</TagName>
            <Source>
              <CopyFrom>会社コード</CopyFrom>
            </Source>
          </NewTag>

          <NewTag>
            <TagName>会社名</TagName>
            <Operations>
              <置換>株式会社,(株)</置換>
              <置換>(株),(株)</置換>
              <置換>㈱,(株)</置換>
            </Operations>
          </NewTag>

        </NewTags>
      </Stage>
    </Stages>
  </Convert>
</Root>

出力結果の項目名(XMLタグ名)が、入力時と同じ並び順になりました。

f:id:xoblos:20210801172021p:plain

ただし、後続手順がExcel表を生成」手順の場合は、入力する項目名(XMLタグ)の並び順が処理に影響することはありませんので、並び順の制御が必要となるケースは、XMLファイルをそのままCSVファイル(入力時と同じ項目並び順)に変換するときぐらいとなります。