オンライン資格確認 導入記 (No.10)       2021.6.18 更新

回答XMLをインポートする        


前回までの試行錯誤で, 診察券番号(患者ID)と関連づけた要求XMLをreq Folderに投げ込んで, その結果XMLが res Folderに返ってくるところまで, 到達したことを記しました。

こんどは“読み込む”ことを Filemaker で やらねばなりません。投げ込んだ fileが

OQSsiquc01req_2021052921060.xml  なら 結果XMLファイルは

OQSsiquc01res_2021052921060.xml  で, “q”と”s”の違いなので, 簡単そうに思われました。




FilemakerでXML Fileを読み込もうとすると, XSL スタイルシートを作製して, それを指定しなければなりません。<abc> xxx </abc> に囲まれた値xxxを効率よく読み込むには至極当然な仕組みですが, これが, なかなか思うようにいきません。xsl スタイルシートの構文がよくわかりません。

https://fmhelp.filemaker.com/help/12/fmp/jp/html/import_export.17.33.html

https://community.claris.com/en/s/question/0D50H00006dshLkSAI/simplest-mod-for-xslt-example-to-import-xml-data (Community のやり取りです)

そもそも xml というのは, 同じ形式の多数のレコードを読み込む仕組みのように理解しています

が, オンライン資格確認のxml は 多数の項目からなる 1件のレコードなので, ちょっと特殊なタイプじゃないでしょうか? タグを明示するのが重要だというタイプのxmlですね。

ネットでスタイルシートを探して見るんですが, 適当なサンプルが見つかりません。

Clarisの 本家サイトから MSDSO_ELEM を見つけました。

https://www.claris.com/ja/resources/downloads/   

(このサイトの “テクニカルリソース”の “XMLサンプルファイル”を見てください)

msdso_elem.xml(サンプルxml) , msdso_elem.xslt (スタイルシート) 日本語版が載っています。試しに, この xslt を 少し改修して(<RESULTSET>以下の部分をいろいろいじってみるのですが, 思うような結果が得られません)


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/*">

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">

<ERRORCODE>0</ERRORCODE>

<PRODUCT BUILD="" NAME="" VERSION=""/>

<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="{count(/*/*)}" TIMEFORMAT="h:mm:ss a"/>

<METADATA>

<xsl:for-each select="/*/*[position()=1]/*">

<FIELD>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="処理実行日" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="文字コード識別" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="処理結果区分" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="資格確認日" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="照会区分" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="任意識別子" TYPE="TEXT"/>

<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="医療機関コード" TYPE="TEXT"/>

</FIELD>

</xsl:for-each>

</METADATA>

<RESULTSET>

<xsl:attribute name="FOUND"><xsl:value-of select="count(child::*)"/></xsl:attribute>

<xsl:for-each select="child::*">

<ROW>

<xsl:attribute name="MODID">0</xsl:attribute>

<xsl:attribute name="RECORDID">0</xsl:attribute>

<xsl:for-each select="child::*">

<COL>

<DATA>

<xsl:value-of select="."/>

</DATA>

</COL>

</xsl:for-each>

</ROW>

<xsl:text>&#13;&#10;</xsl:text>

</xsl:for-each>

</RESULTSET>

</FMPXMLRESULT>

</xsl:template>

</xsl:stylesheet>


オンライン資格確認xml を読み込んでみましたら,読めました。前半部は改修の結果 個々に読み込めますが,




<RESULTSET>で囲まれた本体部分は, ひとかたまりになって出力されました。



さらに<RESUTSET>より後半部もひとかたまりになって, タグが活かされていません。



桁数が固定の項目が多いので, なんとか項目に分解できそうですが….

ただ これらは “有効”であれば それ以上の解析は不要だと考えます。有効は<QualificationValidity>で回答されます。これは単独項目として最後に出力されます。


いろいろな マシン環境で 以上の作業をやってみると, 環境によって出力形態に差があることがわかりました。Windows10ではv16 ~19まで上記と同じです。(v17は手元になく未検証です)

Mac のv16までは Windows10 と同じなのですが, v18,19では <RESUTSET>本体部分が 各項目が改行されたかたちで出力されることに気がつきました。



これだと解析はラクです。

Filemaker v18からは Web-APIが使えるようになったとか, v19ではJavascriptが使いやすくなったとか, このあたりの改良が著しいので, 功を急ぐあまり, Version, 使用環境で同一の結果を実現させていないのかもしれません。それにしても, MacとWindows環境の差はなるべく消してほしいですね。

Macでv18を活かそうとするなら, オンライン資格確認端末(Windows)とMacをFile共有させて,Mac側でxmlを読み解くことで, うまくやれるかもしれません。


ところが ここまで来て, 顔認証のxml 読み込みに支障が出ることに気がつきました。

顔認証xml 自体は 確認xml と同質なのですが, File名を特定することができません。先に記したように, 結果xml は 前もってFile名がわかりますから, それを Scriptでインポートできるのですが, 顔認証の場合は, それができません。

OQSsiquc01res_face_67805684242db960911fae79ab7fa0_20210602135502.xml

上記のように 医療機関コードとマシンの固有コード, 日時のdataしかなく, Fileを特定してインポートすることができません。はじめて受診する人の場合, 当然と言えば当然です。

直近のFileをインポートすればいいのですが, そういうインポートの指定ができません。そうなると, face Folderを目視で確認して, 直近のものを手動でインポートするしかありません。それはいかにも味気ないし, 手間もかかって, せっかくの連携アプリを生かせません。


ここで XML 読み込みは いったん頓挫してしまいました。