Views: 41
Open Peppolのコアインボイスモデルは、UBL 2.1へマッピングされるが、対応するXML要素の繰り返し回数のUBLでの定義が必ずしもモデルと一致している保証は無く、不一致の場合の対応が必要となることがある。
繰返し回数制限の違いの回避策
CEN/TS 16931-3-1は、繰返し回数制限の違いの回避策を規定している。
繰返し回数制限の問題を回避するには、繰返し回数制限の問題に基づくルールが必要。
ID | Peppol UBL |
問題 | 対策 |
CAR1 | 任意(0..x)必須(1..x) | 値が存在しない場合、UBLスキーマ検証でエラー | 「欠落している場合のデフォルト値」(例:0、1-1-1970、AAA) |
CAR2 | 必須(1..x)任意(0..x) | なし | 要素が存在しなけれべならないというルールをスキーマトロンに追加 |
CAR3 | 単数(x..1)複数(x..n) | なし | 要素が繰り返されないというルールをスキーマトロンに追加 |
CAR4 | 複数(x..n)単数(x..1) | 繰返す要素は処理できない | 1)可能であれば、親要素を繰り返す。 2)テキスト要素の場合、繰り返し要素を連結する。 |
CAR5 | 未定義 必須 |
問題 | 「欠落している場合のデフォルト値」に同意する(例:0、1-1-1970、AAA) |
ー | 未定義 任意 |
警告 | 処理されない |
CAR1およびCAR5の場合には、デフォルト値を決めておく。 CAR2およびCAR3の場合、スキーマトロンでルールを定義する必要がある。 CAR4では、いずれかの可能な解決策を選択する必要がある。また、CEN/TS 16931-3-1では規定されていないが、Open Peppolのコアインボイスモデルで定義されていないにもかかわらず、UBLで定義されている要素が使用されるときには、スキーマトロンは、警告(warning)を報告する必要がある。
スキーマトロン定義例
Open PeppolのBIS Billing 3.0の定義例を紹介する。
rule要素のcontext属性でXPathを用いて対象とする要素を特定し、assert要素のtest属性に検証ルールを記述する。text属性での検証の際に用いるXPathは、rule要素のcontext属性で指定したXPathからの相対指定。
CAR2
インボイスには仕様ID(Specification identifier)がなければならない。
<rule context="/ubl:Invoice | /cn:CreditNote"> <assert id="BR-01" flag="fatal" test="(cbc:CustomizationID) != ''"> [BR-01]-An Invoice shall have a Specification identifier (BT-24). </assert> </rule>
CAR3
インボイスの支払い銀行口座は最大1件
<rule context="/ubl:Invoice | /cn:CreditNote"> <assert id="BR-66" flag="fatal" test="count(cac:PaymentMeans/cac:CardAccount) <= 1"> [BR-66]-An Invoice shall contain maximum one Payment Card account (BG-18). </assert> </rule>
BIS Billing 1.0 では、次の表現も検討されていた。
<rule context="ubl:Invoice/cac:PaymentMeans"> <assert flag="fatal" id="BASIC-00175" test="not(cac:CardAccount[2])"> No more than a single instance of cac:CardAccount are allowed. </assert> </rule>
ここでは、2つ目の<cac:CardAccount>が無いことを条件としている。
CAR4
ID | Level | Business Term | Card | XPath | Card |
BG-4 | 1 | SELLER | 1..1 | 略/ cac:Party | 1..1 |
TB-34 | 2 | Seller electronic address | 0..1 | 略/ cac:Party/ cbc:EndpointID | 0..1 |
TB-29 | 2 | Seller identifier | 0..n | 略/ cac:Party/ cac:PartyIdentification/ cbc:ID | 1..1 |
Seller identifier (BT-29)は、モデル定義では複数指定な任意要素とされているが、UBLで対応する要素