Views: 303
コアインボイスによる中小企業のデジタル化
Nobuyuki SAMBUICHI
ISO/TC295 Audit data services/SG1 Semantic model Convener
東京税理士会「情報通8月号」に同名の記事 (外部リンク) を掲載していますが、紙面の関係で技術者向けの内容を全て削除してあるので、この記事で技術的な内容も含めて解説します。
日本版コアインボイスは、欧州規格のコアインボイスに触発されて命名しました。欧州規格のコアインボイスは、欧州で使用されている電子請求書の標準形式です。
コアインボイスゲートウェイ試行版は、 三分一技術士事務所 が、次のURLから公開しています。
https://www.wuwei.space/core-japan/
仕訳情報検索専用ブラウザ試行版は、次から公開しています。
https://www.wuwei.space/core-japan/journal_entry/
構文バインディングに関心がある方は、6. 以降も含めてお読みください。
標準形式CSVは、 階層型の整然データ(Hierarchical Tidy Data)[1]で定義します。
階層型の整然データ(Hierarchical Tidy Data)については、次の記事で説明しています。
『階層型の整然データ(Hierarchical Tidy Data)とデータ変換』
『データ変換の新時代: 階層型の整然データ(Hierarchical Tidy Data)』 も併せてご確認ください。
1. JP PINTは万能薬か
電子請求書の普及により、会計データの標準化や情報共有が進み、税理士や企業の業務効率化が期待されています。これにより、データの一元管理やミスの削減、情報の検索や分析が容易になり、経営の効率化とコスト削減が可能となります。
『電子インボイスに係る取組状況について』
出典: 『電子インボイスに係る取組状況について』 内閣官房 IT総合戦略室 令和2年12月
『デジタルインボイスの普及に向けた取組』
出典: 『デジタルインボイスの普及に向けた取組』 デジタル庁 令和4年3月
令和2年12月、内閣官房IT総合戦略室は、電子インボイスの仕様を標準化するために、国際的な電子商取引ネットワークの標準の一つであるPeppolを採用することを発表しました。令和4年10月には、日本版のPeppol(JP PINT)の第一版が公開され、その運用はデジタル庁によって監督されています。
図1に示すように、JP PINTのサービスプロバイダは、オープンペポルの電子請求書しか受け付けていないため対象範囲が限定されています。

OpenPeppolの管轄はC2-C3ですから、事業者とアクセスポイントの接続はプロバイダ次第です。例えば、C2のプロバイダが中小企業共通EDIとの接続を提供することで、図2に示すように、事業者Z(C1)が中小企業共通EDIの利用企業であっても変換された電子請求書を事業者Y(C4)に送ることが可能となります。これは、JP PINTをサポートする会計ソフトがプロバイダ経由でOpenPeppolと接続するときと同じ形態です。

具体的には、図3のように、中小企業共通EDIとJP PINTという異なるデータ形式間のデータ変換を行うゲートウェイを利用することで、中小企業共通EDI参加企業もPeppolという世界的な電子請求書ネットワークのアクセスポイントに接続できます。
ここで重要な役割を果たすのが「構文バインディング」です。欧州の統一市場を目指すCEF(Connecting Europe Facility)におけるeInvoiceでは、異なるシステムや国で使用されるさまざまな電子請求書の形式を統合するために構文バインディングを提供しています。これにより、企業や公共機関は異なる形式の電子請求書を共通のデータ項目でやり取りすることができ、データの相互運用性が向上します。
各種の電子請求書を相互連携させるには、電子データ交換(EDI)も含む全ての電子請求書を対象とする「日本版コアインボイスモデル」 が必要です。その標準データ項目定義にもとづいて、異なる構文を相互変換する「日本版コアインボイスゲートウェイ」を使用することで相互接続することが可能になります。
日本版コアインボイスゲートウェイは、こちらから現在試行中です。

日本版コアインボイスゲートウェイは、中小企業が電子請求書を利用するためにも便利なツールです。
2. 貨物船コンテナの積み替え作業に例えると
貨物船の輸送におけるコンテナの積み替え作業を例えに取りながら、コアインボイスというシステムについて説明します。
コアインボイスは、中小企業共通EDIやJP PINTなどの異なるデータ形式で表現された請求書を、共通の形式で統一的に扱うためのシステムです。港でコンテナを積み替える際に、ピッキングリストに従って請求金額、商品名、数量、金額、税率などを取り出し、指定された船倉に異なったまとめ方で格納します。
この作業は、自動運転されるクレーンによって行われ、コアインボイスの標準データ項目定義やピッキングシート、格納指示リストなどに基づいて指示されます。これらの指示は、タクソノミで定義された辞書によって表現されます。
このように、コアインボイスは異なるデータ形式を統一的に扱い、効率的な請求書の処理を可能にするシステムです。日本版コアインボイスゲートウェイは、このシステムを実現するための機能を提供するものです。まるで自動運転されるクレーンを使ったコンテナ積み替えのように、異なる形式の請求書を一つの共通形式に変換し、それを統一的に管理する役割を果たします。
3. 構文バインディング
構文バインディングは、異なる形式のデータを統一された形式に変換するためのルールや手順のことです。これにより、電子請求書の情報を容易に取得・設定できます。
例えば、ある情報を表すために異なる会社がそれぞれ違う形式を用いていたとします。一方は「商品名-数量-価格」の順で、もう一方は「数量-商品名-価格」の順で情報を表現しているとします。このような場合、同じ情報でも表現の仕方が異なるため、それぞれ異なる読み取り方をしなければならず、その都度読み方を変える(プログラムを改修する)のは非効率的です。 そこで、構文バインディングを導入して「商品名-数量-価格」の形式に統一するといった具体的なルールや手順を設けるのです。これにより、どの会社からの情報であっても同じ読み取り方ができ、効率的に情報を取り扱うことが可能になります。
欧州では、欧州議会および理事会の「指令 2014/55/EU」に基づいて、欧州規格EN 16931シリーズが規定され、デジタルインボイスの推進が進められています。2014年当時は各加盟国それぞれでeInvoiceやeProcurementを政府調達を中心として進めていましたが、国ごとに異なる標準を採用していたため国境を越えた商取引が阻害されていました。欧州議会は、電子請求書の最低限の共通構成要素を「電子請求書のコア要素」(コアインボイス)として規定し、各国で採用されているXML構文のなかから普及しているものを選択し、「構文バインディング」を規定することとしました。
eInvoicing from a user’s perspective
JP PINTは、UBLを採用し、中小企業共通EDIは、UN/CEFACT CIIを採用しています。それぞれの構文バインディングでは、共通の要素があるものの、UBLとCIIの要素名や構造が異なるため、対応付けが必要です。欧州規格では、EN 16931-1で論理モデルを定義し、CEN/TS 16931-3-1で構文バインディングを規定し、CEN/TS 16931-3-2でUBLとの、16931-3-3でUN/CEFACT CIIとの構文バインディングを定義しています。
例えば、請求書の発行者に相当する要素が、UBLではcac:AccountingSupplierPartyに、CIIではram:SellerCITradePartyにあたり、これらを対応付けるために、日本版コアインボイスゲートウェイでは、論理モデルで「売り手」を定義し、その項目とUBLおよびCIIへの構文バインディング定義しています。
CEN/TS 16393-3-1では、XML構文間のクロスマッピングについても説明されています。マッピングに問題がある場合は情報の損失が発生することがあります。マッピングの問題は、論理レベル、構造レベル、繰返し回数の相違レベル、またはデータ型レベルで発生する可能性があります。マッピングは、異なる構文間のバインディングを可能にするための重要な手段です。正確なマッピングは情報の損失を最小限に抑えることができます。
CEN/TS 16931-3-1 Electronic invoicing – Part 3-1: Methodology for syntax bindings of the core elements of an electronic invoice
注: 5.Cross-mapping between syntaxesでは、異なる構文の間のマッピングについて考慮すべき事項が規定されています。
CEN/TS 16931-3-2 Electronic invoicing – Part 3-2: Syntax binding for ISO/IEC 19845 (UBL 2.1) invoice and credit note
CEN/TS 16931-3-2 Electronic invoicing – Part 3-2: Syntax binding for ISO/IEC 19845 (UBL 2.1) invoice and credit note
CEN/TS 16931-3-3 Electronic invoicing – Part 3-3: Syntax binding for UN/CEFACT XML Industry Invoice D16B
CEN/TS 16931-3-3 Electronic invoicing – Part 3-3: Syntax binding for UN/CEFACT XML Industry Invoice D16B
EN 16931-1 で定義されている請求書番号 BT-1 Invoice number (A unique identification of the Invoice.) は、UBL 2.1 では、/Invoice /cbc:ID に UN/CEFACT CII 16B では、/rsm:CrossIndustryInvoice /rsm:ExchangedDocument/ram:ID に、それぞれ対応付けられています。
欧州規格に基づいた構文バインディングは、XML文書の特定の位置に存在するXML要素の値を読み書きすることで、ビジネスシステムとXML文書との間でデータのやり取りを可能にします。
日本版コアインボイスでは、業務上必要な電子請求書の全項目を包含した論理モデルと、それぞれの構文(例えばペポルのJP PINTインボイスや中小企業共通EDIのUN/CEFACT CIIなど)の対応関係をXPathで定義しています。これらの情報は、業務辞書(タクソノミ)で管理されます。これにより、論理モデルのアップデートや電子請求書の構文の改訂も容易に管理できるようになります。
会計データの過去の情報を活用することも必要な場合があります。まだ詳細な議論は進んでいませんが、デジタル化の観点から見ると、これらの蓄積データをうまく活用することが重要です。業務辞書(タクソノミ)を使えば、蓄積された電子データをその時点の業務辞書(タクソノミ)と照らし合わせて利用することができます。業務辞書(タクソノミ)では、全国共通の標準定義だけでなく、各企業の特有の定義も連携させて管理することが必要とされます。
詳しくは、構文バインディング詳解 をご確認ください。
4. 仕訳情報検索専用ブラウザ
日本版コアインボイスゲートウェイでは、社内システムとの連携を容易にするために複数のインタフェースを組み合わせることもできます。一例として、構文バインディングを利用した「仕訳情報検索専用ブラウザ」を紹介します。
仕訳情報検索専用ブラウザは、会計ソフトからデータを取り出し、より確認しやすい形に変換するサービスとして試作し、こちらから公開しています 。

一般的な会計ソフトは、CSVでデータを出力できる機能を持っていますが、このブラウザはそれをさらに便利な形に進化させる役割を果たします。
仕訳情報検索専用ブラウザは、まず、会計ソフトから出力されたCSVファイルをISO/TC 295 監査データサービスで改訂作業中の標準形式CSVに変換します。この標準形式CSVから、「仕訳日記帳」「総勘定元帳」「残高試算表」を自動的に生成して表示します。
さらに便利な点は、会計ソフトや利用者ごとに特有な情報も 階層型の整然データ(Hierarchical Tidy Data)形式を利用することで、この標準形式CSVに登録できるということです。
例えば、会計ソフトから出力したCSVには、固有の管理項目として「税情報」や「資産区分」、「原価部門」、「取引金融機関」、「仕入先」、「得意先」などがあるかもしれません。これらの項目は固有のCSV欄に記載されて出力されますので、その欄を取り出す個別のプログラムがないと確認できません。仕訳情報検索専用ブラウザは、構文バインディング定義表に基づいて独自項目も標準形式CSVに変換するので、プログラムを変更することなく統一的な画面で確認することができます。
仕訳情報検索専用ブラウザは、会計ソフトのデータをそのベンダーやバージョンによる違いにかかわらず、より使いやすい標準形式CSVに変換し一元的に確認できるサービスです。例えば10年以上前の現在提供されていないソフトが出力したCSVでもそのデータ定義仕様があれば、構文バインディングを定義することで、標準形式CSVに変換可能です。これにより会計データのアクセス性と利便性が大幅に向上します。
詳しくは、仕訳情報検索専用ブラウザと論理バインディング をご確認ください。
5. 電子請求書を契機とする会計のデジタル化
電子請求書を契機とする会計のデジタル化が重要です。
中小企業にとって、日本版コアインボイスゲートウェイと構文バインディングは重要なツールです。日本版コアインボイスゲートウェイは、異なる形式の請求書を統一的に処理し、請求書処理の高度化を促進します。構文バインディングは、自動的にデータを抽出し、正確な情報を含む標準形式の請求書として処理することで、業務の効率化を図ります。

会計データの標準化(標準形式CSV)により、中小企業は取引先とのビジネス関係も改善できます。上の図に示すような共通のインタフェースを使用することで、データのやり取りがスムーズに行われ、取引先とのコミュニケーションが円滑になります。また、会計データの標準化により、会計処理の効率化や精度向上が期待できます。
標準形式CSVファイルの構造や意味はタクソノミで定義されており、タクソノミの維持変更管理と連動させることで、システムの維持管理を自動化することも可能です。
会計データの標準化や共通インタフェースの導入に関するアドバイスや支援を通じて、企業の経営に貢献することができますので会計データの標準化(標準形式CSV)を検討されてはいかがでしょうか。
6. XML技術者向け解説
6.1. デジタルインボイスの論理モデル
デジタルインボイスの論理モデルは、インボイス情報を構造化し、標準化されたフォーマットで表現する方法です。これにより、情報の取得や効率的な処理が可能になります。データ構造化では、事業者、住所、期間、取引明細、品目情報、価格、税情報など共通のデータ構造を持つグループを定義し、階層構造で表現します。
6.2. デジタルインボイスの要素
請求書番号
請求書日付
発行企業情報
企業名
住所
電話番号
メールアドレス
受領企業情報
企業名
住所
電話番号
メールアドレス
商品・サービス情報
内容
数量
単位価格
金額
消費税額
税込み金額
支払情報
支払期日
支払方法
このような階層構造によって、デジタルインボイスの情報が標準化され、効率的に処理されることができます。また、各項目は業界標準に準拠したデータ型やコードリストを使用して定義されることで、異なるシステムや企業間でも容易にデータ交換が可能になります。デジタルインボイスの普及に伴い、企業は効率的な会計処理や税務申告を行い、経営の効率化やコスト削減が実現できるでしょう。
適格請求書では、次の項目を記載することが要請されています。
1 適格請求書発行事業者の氏名又は名称及び登録番号
2 課税資産の譲渡等を行った年月日
3 課税資産の譲渡等に係る資産又は役務の内容(課税資産の譲渡等が軽減対象資産の譲渡等である場合には、資産の内容及び軽減対象資産の譲渡等である旨)
4 課税資産の譲渡等の税抜価額又は税込価額を税率ごとに区分して合計した金額及び適用税率
5 税率ごとに区分した消費税額等
6 書類の交付を受ける事業者の氏名又は名称
これらの項目を含んだデジタルインボイスの論理モデルは、次のような階層構成で定義されます。
請求書
請求書の番号
請求書の日付
売り手
氏名又は名称(1)
登録番号(1)
買い手
氏名又は名称(6)
税率ごとに区分した適用税情報 -複数回繰り返し-
合計した金額(4)
適用税率(4)
消費税額(5)
明細行 -複数回繰り返し-
課税資産の譲渡等を行った年月日(2)
商品やサービスの品目情報(3)
商品やサービスの課税区分および税率(3)
商品やサービスの数量、単位価格、金額
この論理的な階層定義情報が論理モデルです。
ここで、国税庁Q&Aの問45 適格請求書の記載例を論理モデルで表現してみましょう。
注:合計金額や税額合計は、Q&Aに記載された明細行に基づいて3件を合計した値に訂正しています。
出典: 適格請求書に記載が必要な事項
このデータを論理モデルの階層構造に当てはめた表を次に示します。
項目名 | C1 | C2 | C3 | C4 | C5 | C6 |
---|---|---|---|---|---|---|
請求書番号 |
156 |
|||||
請求書発行日 |
2023-12-01 |
|||||
請求期間開始日 |
2023-11-01 |
|||||
請求期間終了日 |
2023-11-30 |
|||||
売り手登録番号(1) |
T1234567890123 |
|||||
売り手名称(1) |
株式会社 △△商事 |
|||||
買い手名称(6) |
株式会社 〇〇 |
|||||
請求書明細行金額の合計 |
17000 |
|||||
請求書合計金額(税抜き) |
17000 |
|||||
請求書消費税合計金額 |
1400 |
|||||
請求書合計金額(税込み) |
18400 |
|||||
差引請求金額 |
18400 |
|||||
税内訳情報(1..n) |
1 |
2 |
||||
* 課税分類毎の課税基準額(4) |
15000 |
2000 |
||||
* 課税分類毎の消費税額(5) |
1200 |
200 |
||||
* 課税分類コード(4) |
AA |
S |
||||
* 課税分類毎の税率(4) |
8 |
10 |
||||
請求書明細行(1..n) |
1 |
2 |
3 |
|||
* 請求書明細行ID |
1 |
2 |
3 |
|||
* 請求する数量 |
1 |
1 |
1 |
|||
* 請求書明細行金額(税抜き) |
5000 |
10000 |
2000 |
|||
* 請求書明細行の期間開始日(2) |
2023-11-01 |
2023-11-01 |
2023-11-02 |
|||
* 請求書明細行の期間終了日(2) |
2023-11-01 |
2023-11-01 |
2023-11-02 |
|||
* 品名(3) |
小麦粉 |
牛肉 |
キッチンペーパー |
|||
* 品目の課税分類(3) |
AA |
AA |
S |
|||
* 品目の税率(3) |
8 |
8 |
10 |
|||
* 品目単価(税抜き) |
5000 |
10000 |
2000 |
この表の縦と横を転置して階層軸を左に寄せたた形式が、XBRL-CSVが提供する階層定義がある整然データ( 階層型の整然データ(Hierarchical Tidy Data))です。
整然データは、ここで示す表の縦と横を転置した形で、各行が一意の観測値を持ち、各列が一意の変数を持つような形式のデータです。この形式は、データを処理する上で非常に便利であり、データの分析や可視化、統合などが容易になります。
請求書番号 | 税内訳情報(1..n) | 請求書明細行(1..n) | 請求書発行日 | 請求期間開始日 | 請求期間終了日 | 売り手登録番号(1) | 売り手名称(1) | 買い手名称(6) | 請求書明細行金額の合計 | 請求書合計金額(税抜き) | 請求書消費税合計金額 | 請求書合計金額(税込み) | 差引請求金額 | 課税分類毎の課税基準額(4) | 課税分類毎の消費税額(5) | 課税分類コード(4) | 課税分類毎の税率(4) | 請求書明細行ID | 請求する数量 | 請求書明細行金額(税抜き) | 請求書明細行の期間開始日(2) | 請求書明細行の期間終了日(2) | 品名(3) | 品目の課税分類(3) | 品目の税率(3) | 品目単価(税抜き) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
156 |
2023-12-01 |
2023-11-01 |
2023-11-30 |
T1234567890123 |
株式会社 △△商事 |
株式会社 〇〇 |
17000 |
17000 |
1400 |
18400 |
18400 |
|||||||||||||||
1 |
15000 |
1200 |
AA |
8 |
||||||||||||||||||||||
2 |
2000 |
200 |
S |
10 |
||||||||||||||||||||||
1 |
1 |
1 |
5000 |
2023-11-01 |
2023-11-01 |
小麦粉 |
AA |
8 |
5000 |
|||||||||||||||||
2 |
2 |
1 |
10000 |
2023-11-01 |
2023-11-01 |
牛肉 |
AA |
8 |
10000 |
|||||||||||||||||
3 |
3 |
1 |
2000 |
2023-11-02 |
2023-11-02 |
キッチンペーパー |
S |
10 |
2000 |
この表は、 階層型の整然データ(Hierarchical Tidy Data)と呼ばれる形式で記述されています。 階層型の整然データ(Hierarchical Tidy Data)は、文書単位のデータと明細行で繰り返されるデータを一つの表で記載する方法で、以下のような特徴があります。
各行が一つの観測値を表し、各列が一つの変数を表します。
各表が一つの観測単位に対応し、データを分割せずに一つの表に記録します。
各明細行のデータは、文書単位のデータと同じ変数名で表現され、各明細行の数だけ新しい行が追加されます。
例えば、この表の場合、請求書番号や請求期間など、文書単位のデータは一つの行で表現され、課税分類毎の課税基準額や消費税額など、明細行で繰り返されるデータは複数の行で表現されています。
階層型の整然データ(Hierarchical Tidy Data)を使用すると、データの加工や集計が容易になり、データの可視化や機械学習などの応用もしやすくなります。例えば、この表の場合、請求書番号が同じ明細行の課税分類毎の課税基準額や消費税額を一つの表にまとめて集計したり、特定の買い手名称に対する売り手名称の売り上げをグラフ化することができます。
このように、 階層型の整然データ(Hierarchical Tidy Data)はデータの扱いを統一的にすることでデータの管理や分析を容易にし、ビジネス上の意思決定に役立ちます。
例えば、企業の財務データを分析する場合、データの整形や加工を行う必要があります。しかし、 階層型の整然データ(Hierarchical Tidy Data)のデータは、処理のしやすい形式であるため、データ分析のプロセスを効率化することができます。また、XBRL-CSVのような標準規格を採用することで、複数の企業間でのデータ共有が容易になります。これにより、業界全体でのデータの可視化や分析が可能になり、より深い洞察やビジネスチャンスを発見することができます。
6.3. XML構文とXPath
デジタルインボイスはXML文書データです。論理モデルをXML構文に適用し、該当するXML要素の値として登録したXMLファイルを対応付けることを「構文バインディング」と呼びます。構文バインディングでは、論理モデルで定義された項目とXML要素を対応付けるために、XML文書中のデータがどの位置に定義されているかを指定する必要があります。XML文書中のXML要素の位置を指定するのがXPathです。次に、XPathについて簡単に紹介します。以下にXML構文のComplexType定義の架空の例を示します。例として、複数の商品やサービスを含むインボイスの場合を考えます。定義する文書の論理モデルは以下のようなものです。
Invoice 請求書
* InvoiceHeader 請求書ヘッダ
** InvoiceNumber 請求書番号
** InvoiceDate 請求書日付
...
* InvoiceLine 請求書明細行(複数回繰返し)
** ItemNameme 品名
** Quantity 数量
** Price 価格
...
この論理モデルの階層定義に基づいて定義したXML構文(XML Schema)のComplexType定義(xs:complexType定義)を次に示します。
<xs:complexType name="InvoiceType">
<xs:sequence>
<xs:element name="InvoiceHeader" type="InvoiceHeaderType"/>
<xs:element name="InvoiceLine" type="InvoiceLineType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InvoiceHeaderType">
<xs:sequence>
<xs:element name="InvoiceNumber" type="xs:string"/>
<xs:element name="InvoiceDate" type="xs:date"/>
<xs:element name="..." type="..."/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InvoiceLineType">
<xs:sequence>
<xs:element name="LineNumber" type="xs:string"/>
<xs:element name="ItemName" type="xs:string"/>
<xs:element name="Quantity" type="xs:decimal"/>
<xs:element name="Price" type="xs:decimal"/>
<xs:element name="..." type="..."/>
</xs:sequence>
</xs:complexType>
上記の例では、InvoiceTypeがトップレベルの要素となり、その中にInvoiceHeaderTypeとInvoiceLineTypeが含まれています。InvoiceLineTypeは、maxOccurs属性にunboundedを指定しているため、複数のInvoiceLine要素を含むことができます。また、InvoiceHeaderTypeとInvoiceLineTypeはそれぞれ、ItemName、Quantity、Priceなどの要素を含むことができます。
次は、このXML Schema定義に基づいて作成したデジタルインボイスのXML文書です。
<Invoice>
<InvoiceHeader>
<InvoiceNumber>abc-123</InvoiceNumber>
<InvoiceDate>2023-12-011</InvoiceDate>
</InvoiceHeader>
<InvoiceLine>
<LineNumber>1</LineNumber>
<ItemName>小麦粉</ItemName>
<Quantity>1</Quantity>
<Price>5000</Price>
</InvoiceLine>
<InvoiceLine>
<LineNumber>2</LineNumber>
<ItemName>牛肉</ItemName>
<Quantity>1</Quantity>
<Price>10000</Price>
</InvoiceLine>
</Invoice>
このXML文書で定義された2件目の明細に何が記載されているか取り出したいとします。ここで使用するのがXPathです。XPathでは、どの要素のどの子孫要素かを /親要素/子要素/孫要素 といった形で指定します。上記のXML文書に対して、明細行を指定するには、 /Invoice/InvoiceLine と記述します。この指定条件では、2件の明細行が指定されます。それでは、次のXPathはどの要素を指しているのでしょう。
/Invoice/InvoiceLine[LineNumber=2]
このXPathは、/Invoice/InvoiceLine と指定することで、2件の明細行を指定していますが、それだけでなく[ ]の中に記述した条件文を用いることでどのような条件を満たす明細行か指定しています。ここでは、いくつかあるInvoiceLine要素の中でも、その子要素であるLineNumberの値が 2 の明細行を指定しています。
このように、XPathを使用すれば、XML文書中の特定の要素を明確に指定することができます。会計ソフトや業務ソフトから取り出した論理モデルで定義されているデータをXML文書のどこに設定するかを指定するときや、XML文書から論理モデルで定義されている必要なデータを取り出すときに使用するのがXPathです。
他の例を紹介します。AllowanceChargeという要素には、ChargeIndicatorという子要素があります。ChargeIndicatorが「false」に設定されている場合、この要素は「返金」として扱われます。一方、ChargeIndicatorが「true」に設定されている場合、この要素は「追加請求」として扱われます。XPathでは、AllowanceCharge[ChargeIndicator=false()]と書くことで、ChargeIndicatorが「false」に設定されているAllowanceCharge要素(返金)を選択できます。また、AllowanceCharge[ChargeIndicator=true()]と書くことで、ChargeIndicatorが「true」に設定されているAllowanceCharge要素(追加請求)を選択できます。このように、XPathを使って条件を指定することで、異なるXML構文の間の対応関係を定義することができます。
蛇足:
JP PINT 1.0において、Syntax bindingでの選択条件の記載は、Syntax Elementの要素名の下に[条件]として示されています。しかしながら、cac:PartyTaxSchemeに対して[cac:TaxScheme = “VAT”]といった記述があり、XMLの正確な理解が疑われる部分が存在します。
次のリンクでは、JP PINT V1.0に関する問題点を詳しく説明しています。確認してください: 『JP PINT V1.0間違い探し』
また、Syntax bindingの定義は、以下の当事務所の検証用サイトからも確認いただけます: https://www.wuwei.space/jp_pint/billing-japan/syntax2/ubl-invoice/tree/en/
XPathを使用することで、XML文書中の特定の要素を明確に指定できます。会計ソフトや業務ソフトから取り出した論理モデルで定義されているデータをXML文書のどこに設定するかを指定する際や、XML文書から論理モデルで定義されている必要なデータを取り出す際に役立ちます。
例として、AllowanceCharge要素にはChargeIndicator子要素があります。ChargeIndicatorが「false」に設定されている場合、「返金」として扱われます。一方で、「true」に設定されている場合、「追加請求」として扱われます。XPathを使って、AllowanceCharge[ChargeIndicator=false()]と記述することで、「false」に設定されたAllowanceCharge要素(返金)を選択できます。また、AllowanceCharge[ChargeIndicator=true()]と記述することで、「true」に設定されたAllowanceCharge要素(追加請求)を選択できます。このように、XPathを利用して条件を指定し、異なるXML構文間の対応関係を定義することが可能です。
このような問題点を踏まえ、JP PINTの改善が求められています。今後のバージョンでは、XMLの理解に基づいた適切な条件指定が行われることが期待されます。XPathを活用して、適切な条件を指定し、異なるXML構文間の対応関係を定義することで、JP PINTの改善が図られるでしょう。
7. XML構文とXPathの基本
XMLとは、データを構造化して記述するための言語で、インターネット上で情報をやり取りする際に広く利用されています。XPathは、XML文書内の特定の要素や属性にアクセスするための言語です。このドキュメントでは、XML構文とXPathの基本について初心者にもわかりやすく説明します。
7.1. XMLの基本
XMLでは、データを要素と呼ばれるタグで囲むことで構造化します。以下は、簡単なXML文書の例です。
<book>
<title>XML入門</title>
<author>山田 太郎</author>
<price>1500</price>
</book>
この例では、<book>要素の中に<title>、<author>、<price>という子要素が含まれています。
7.2. XPathの基本
XPathを使って、XML文書内の特定の要素や属性にアクセスすることができます。以下は、先ほどのXML文書から<author>要素を選択するためのXPathの例です。
/book/author
このXPathは、<book>要素の子要素である<author>要素を指定しています。
7.3. XML構文とXPathの使い方
XML構文とXPathを使って、データの追加や変更、検索が容易になります。例えば、以下のようなXML文書があるとします。
<books>
<book id="1">
<title>XML入門</title>
<author>山田 太郎</author>
<price>1500</price>
</book>
<book id="2">
<title>HTML入門</title>
<author>佐藤 次郎</author>
<price>1800</price>
</book>
</books>
このXML文書に対して、次のようなXPathを使ってデータを検索できます。
-
すべての<book>要素を選択: /books/book
-
id属性が1の<book>要素を選択: /books/book[@id=’1′]
-
すべての<book>要素の<title>要素を選択: /books/book/title
このように、XML構文とXPathを使ってデータを簡単に検索、整理できます。初心者でもわかりやすい形でデータの構造化と操作が可能となります。
8. 構文バインディング詳解
8.1. JP PINT 構文バインディング
請求書の通貨で記載されている課税区分別税額グループの構文バインディングを抜粋したのが次の表です。
ここでは、請求書の通貨で記載されている課税区分別税額グループ /Invoice /cac:TaxTotal を指定するために税額の通貨が請求書の文書通貨であることを条件として指定しています。
次の箇所がその条件です。
[cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode]
下位要素であるcbc:TaxAmountの@currencyID属性が文書レベルで指定されている文書通貨コード/Invoice /cbc:DocumentCurrencyCodeであるところの /Invoice /cac:TaxTotal を指定するXPath表現です。
/Invoice /cac:TaxTotal [cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode]
[source,txt]
core_id | level | 項目名 | 繰返し | Id | Level | Business Term ja | Card. | UBL XPath |
---|---|---|---|---|---|---|---|---|
NC39-NC57 |
2 |
文書ヘッダ課税分類 |
1..n |
IBG-23 |
1 |
税内訳情報 |
1..n |
/Invoice /cac:TaxTotal [cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode] /cac:TaxSubtotal |
NC57-01 |
3 |
文書ヘッダ課税分類税額 |
1..1 |
IBT-117 |
2 |
課税分類毎の消費税額 |
1..1 |
/Invoice /cac:TaxTotal [cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode] /cac:TaxSubtotal /cbc:TaxAmount |
NC57-03 |
3 |
文書ヘッダ課税分類譲渡資産合計金額(税抜き) |
1..1 |
IBT-116 |
2 |
課税分類毎の課税基準額 |
1..1 |
/Invoice /cac:TaxTotal [cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode] /cac:TaxSubtotal /cbc:TaxableAmount |
NC57-04 |
3 |
文書ヘッダ課税分類コード |
1..1 |
IBT-118 |
2 |
課税分類コード |
1..1 |
/Invoice /cac:TaxTotal [cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode] /cac:TaxSubtotal /cac:TaxCategory /cbc:ID |
NC57-07 |
3 |
文書ヘッダ税率 |
1..1 |
IBT-119 |
2 |
課税分類毎の税率 |
0..1 |
/Invoice /cac:TaxTotal [cbc:TaxAmount /@currencyID = /Invoice /cbc:DocumentCurrencyCode] /cac:TaxSubtotal /cac:TaxCategory /cbc:Percent |
この構文バインディングの指定に対応する電子請求書の箇所を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:ccts="urn:un:unece:uncefact:documentation:2"
xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"
xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
途中省略
<cac:TaxTotal>
<cbc:TaxAmount currencyID="JPY">25250</cbc:TaxAmount> <!-- IBT-110 - Invoice total TAX amount -->
<cac:TaxSubtotal> <!-- IBG-23 - TAX BREAKDOWN -->
<cbc:TaxableAmount currencyID="JPY">252500</cbc:TaxableAmount> <!-- IBT-116 - TAX category taxable amount -->
<cbc:TaxAmount currencyID="JPY">25250</cbc:TaxAmount> <!-- IBT-117 - TAX category tax amount -->
<cac:TaxCategory>
<cbc:ID>S</cbc:ID> <!-- IBT-118 - TAX category code -->
<cbc:Percent>10</cbc:Percent> <!-- IBT-119 - TAX category rate -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- IBT-118, qualifier -->
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal> <!-- IBG-23 - TAX BREAKDOWN -->
<cbc:TaxableAmount currencyID="JPY">3490</cbc:TaxableAmount> <!-- IBT-116 - TAX category taxable amount -->
<cbc:TaxAmount currencyID="JPY">0</cbc:TaxAmount> <!-- IBT-117 - TAX category tax amount -->
<cac:TaxCategory>
<cbc:ID>E</cbc:ID> <!-- IBT-118 - TAX category code -->
<cbc:Percent>0</cbc:Percent> <!-- IBT-119 - TAX category rate -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- IBT-118, qualifier -->
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
以降省略
8.2. 中小企業共通EDI 構文バインディング
請求書の通貨で記載されている課税区分別税額グループの構文バインディングを抜粋したのが次の表です。
ここでは、請求書の通貨で記載されている課税区分別税額グループ /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax を指定するために、税額の通貨が請求書の文書通貨であることを条件として指定しています。
次がその条件です。
[ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode]
下位要素である ram:CurrencyCode が文書レベルで指定されている文書通貨コード /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode であるところの /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax を指定するXPath表現です。
/rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax [ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode]
core_id | level | 項目名 | 繰返し | UN_CCL_ID | Level | 項目名 | 繰返し | SME CII XPath |
---|---|---|---|---|---|---|---|---|
NC39-NC57 |
2 |
文書ヘッダ課税分類 |
1..n |
UN01005996 |
5 |
文書ヘッダ決済/文書ヘッダ税グループ |
1..n |
/rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax [ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode] |
NC57-01 |
3 |
文書ヘッダ課税分類税額 |
1..1 |
UN01005833 |
6 |
文書ヘッダ課税分類税額 |
1..1 |
/rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax [ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode] /ram:CalculatedAmount |
NC57-03 |
3 |
文書ヘッダ課税分類譲渡資産合計金額(税抜き) |
1..1 |
UN01005839 |
6 |
文書ヘッダ課税分類譲渡資産合計金額(税抜き) |
1..1 |
/rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax [ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode] /ram:BasisAmount |
NC57-04 |
3 |
文書ヘッダ課税分類コード |
1..1 |
UN01005841 |
6 |
文書ヘッダ課税分類コード |
1..1 |
/rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax [ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode] /ram:CategoryCode |
NC57-07 |
3 |
文書ヘッダ税率 |
1..1 |
UN01007174 |
6 |
文書ヘッダ税率 |
1..1 |
/rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:IncludedCIILSupplyChainTradeLineItem /ram:SpecifiedCIILSupplyChainTradeSettlement /ram:ApplicableCITradeTax [ram:CurrencyCode = /rsm:SMEinvoice /rsm:CIIHSupplyChainTradeTransaction /ram:ApplicableCIIHSupplyChainTradeSettlement /ram:InvoiceCurrencyCode] /ram:RateApplicablePercent |
この構文バインディングの指定に対応する電子請求書の箇所を次に示します。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<rsm:SMEinvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:SMEinvoice"
xmlns:qdt="urn:un:unece:uncefact:data:standard:QualifiedDataType:31"
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:31"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:31"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:un:unece:uncefact:data:standard:SMEinvoice https://www.wuwei.space/core-japan/server/data/schema/data/standard/SMEinvoice.xsd">
途中省略
<ram:IncludedCIILSupplyChainTradeLineItem>
<ram:SpecifiedCIILSupplyChainTradeSettlement>
<ram:ApplicableCITradeTax>
<ram:CalculatedAmount>25250</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>252500</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:CurrencyCode>JPY</ram:CurrencyCode>
<ram:RateApplicablePercent>10</ram:RateApplicablePercent>
</ram:ApplicableCITradeTax>
<ram:ApplicableCITradeTax>
<ram:CalculatedAmount>0</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>3490</ram:BasisAmount>
<ram:CategoryCode>E</ram:CategoryCode>
<ram:CurrencyCode>JPY</ram:CurrencyCode>
<ram:RateApplicablePercent>0</ram:RateApplicablePercent>
</ram:ApplicableCITradeTax>
以降省略
8.3. テスト用の中小企業共通EDIのXMLスキーマとXMLインスタンスについて
今年に入ってコアインボイスゲートウェイの試作に着手しました。UN/CEFACTの構文バインディング定義は、CEN/TS 16931-3-3を参考に定義しています。
XMLスキーマは、リファレンスデータモデルのアプローチを参考に独自定義していますので、今後は公開版のver.4に移行予定です。また、中小企業共通EDIのXMLインスタンスは、リファレンスデータモデルのアプローチを参考に独自定義しています。
4.1.1 ドキュメント中心のメッセージ構築手順
(1) UN/CEFACT標準メッセージは、ドキュメント中心のメッセージを組み立てるためのテンプレートとして使用できます。
(2) ユーザーグループ(ビジネスドメインやローカル産業)によって定義されたビジネスプロセスのニーズに従って、CCLでメッセージに使用される特定のABIEを選択します。
(3) CCBDAのルールに従って、選択されたAggregate Business Entities(ABIEs)、Associated Business Information Entities(ASBIEs)、およびBasic Business Entities(BBIEs)のためのMBIEsを定義します。
(4) すべてのMBIE XMLステートメントは、NDRルールに従ってRootスキーマモジュールまたはInternalスキーマモジュールで指定することができます。4.2 リファレンスデータモデルのアプローチ
リファレンスデータモデル(RDM)のアプローチの利点は、RDMがUN/CEFACT Core Component Library(CCL)内の全体的に利用可能なReference Aggregate Business Information Entities(ABIEs)を基にして、セグメント(特定の業界ドメイングループやサブドメイン)のニーズに特化した完全で焦点の絞られたサブセットを作成することです。UN/CEFACT RDMの例として、商品の供給契約を網羅するSupply Chain Reference Data Model(SCRDM)があります。RDMは、CCLの文脈化されたサブセットであり、CCLの別の文脈化されたサブセット(subRDM)に基づくこともできます。SCRDMとMultimodal Transport(MMT)RDMは、Buy-ShipPay(BSP)RDMの文脈化されたサブセットです。
(中略)
![]()
NDRでは、下記に引用したように rsm: ram: udt: などの名前空間識別子を規定していますので、それに従ってXMLインスタンス文書を作成しています。
スキーマ設計のモジュール化は再利用を促進し、管理機能を強化します。UN/CEFACTは、このアプローチをサポートするためのスキーマモジュールを定義しています。モジュールは、ビジネス情報ペイロードと外部スキーマモジュールに分類されます。ビジネス情報ペイロードは、ルートスキーマと同じ名前空間に存在する内部スキーマモジュールで構成されています。外部スキーマモジュールは、再利用可能なスキーマのセットから構成されています。各スキーマモジュールは独自の名前空間に存在し、モジュール間の依存関係が存在します。これにより、循環インポートが存在しないように設計されています。
注:これは簡略に整理した翻訳ですので、原文を参照願います。図5-5 UN/CEFACT XSDスキーマのモジュール化スキームでは、これらのモジュールとその関係を具体的に示しています。
![]()
名前空間トークンの標準化のため、すべてのスキーマモジュールは以下の表でその正式名またはトークン値で参照されます。
![]()
次の引用したNDRの規定に従い、XMLインスタンス文書では、<some_element>NA</some_element>のように”NA”が明示的に使用されています。
8.3 空の内容
空の要素は、ビジネス情報交換に必要な信頼性を提供しないため、使用されません。
[R200] UN/CEFACTに準拠したインスタンスドキュメントには、内容がない要素を含めてはなりません。
[R201] 任意の準拠するインスタンスにxsi:nil属性を含めてはなりません。
9. 仕訳情報検索専用ブラウザと論理バインディング
仕訳情報検索専用ブラウザは、会計ソフトが出力するデータ(CSVやXML形式)を、標準形式CSVに変換することができます。
これは、論理バインディング(標準CSVバインディング)定義というルールに従って行われます。
このブラウザは「汎用プログラム」なので、バインディング定義を正しく設定すれば、過去のソフトウェアや現在開発中のソフトウェアから出力されるデータでも問題なく扱うことができます。これにより、どのようなデータでもブラウザで簡単に表示できます。
次に、会計ソフトが出力するデータを示します。

通常、会計ソフトが生成するデータは、特定のデータ項目とユーザーがカスタマイズできる拡張項目が含まれています。これらはそれぞれ個別にプログラムで処理する必要があり、これにより使用している会計ソフトやそのバージョンによっては異なるプログラムが必要となっていました。
しかしながら、仕訳情報検索専用ブラウザでは、バインディング定義(データとプログラムとのリンクを設定する部分)を独立させ、調整が容易になるようにしています。これにより、プログラム自体を変更せずに、様々な種類やバージョンのデータに対応することができます。結果として、バインディング定義を適切に設定することで、あらゆるデータ形式に対応することを可能としています。
この会計ソフトが提供するCSVと標準形式CSVのバインディング定義を次に示します。

標準形式CSVは、明確に階層が定義された構造を持つ論理モデルです。それに対し、会計ソフトウェアが出力するCSVは平面的(フラット)な構造を持っています。そのため、このフラットなCSVの各カラム名と、標準形式CSVの各項目がどの階層にあたるのかを結びつけ、対応させています。

標準形式CSVは、階層構造を定義する論理モデルです。これは、フラットな構造のCSVを提供する通常の会計ソフトとは異なる概念です。この階層的な構造は、 階層型の整然データ(Hierarchical Tidy Data)を使用して表現されています。つまり、一つのCSVファイル内に複数の階層を持つ構造を表すことができるのです。
この仕訳情報検索専用ブラウザは、既述の日付日記帳に加えて、以下の二つの画面も標準形式CSVに従って表示することができます。


10. まとめ 標準形式CSV = 階層型の整然データ(Hierarchical Tidy Data)
この記事で紹介している技術の肝は、論理階層モデルを標準形式CSVで表現する 階層型の整然データ(Hierarchical Tidy Data)です。
コアインボイスゲートウェイと仕訳情報検索専用ブラウザは、標準形式CSVとして 階層型の整然データ(Hierarchical Tidy Data)を採用しています。さらに、バインディング定義を用いることで、既存システムとのデータ変換を可能にしています。つまり、これまで連携システムの形を変える必要があった共通API対応や共通インタフェースの対応を必要とせず、効率的なシステム連携を可能にします。
連携プログラムは、「汎用プログラム」です。これは様々な構文と論理階層モデルをバインディング定義に従って対応付け、特定の位置のデータを読み書きする機能を持ちます。これにより、既存のソフトやシステムを変更することなく、バインディング定義を記述するだけでシステム間の連携が可能になります。
なお、バインディング定義は業務辞書(タクソノミ)で管理されています。これにより、過去や将来のデータも含めて一貫したデータ連携が可能になります。これは、データの一貫性を保つと同時に、システムの拡張性と柔軟性を向上させます。