cXML B2B PunchOut

History of B2B Punchout eCommerce
 1996年にサンフランシスコ郊外のパロアルトで、急速に普及しつつあったインターネットを電子購買・資材調達に使用する目的でAriba社(現在はSAP Ariba)が誕生しました。そして1999年にcXMLを通信方式やデータの仕様のプロトコルとして発表し現在の電子購買・資材調達の原型がスタートしました。Aribaが提唱したcXMLは、まずはIntelやMicrosoftといったIT企業を筆頭にFortune500に並ぶグローバルなアメリカの企業に受け入れられ、ヨーロッパの企業にも広まり、cXMLの普及から数年で多くのグローバル企業がcXMLを使用した電子購買・資材調達に馴染んでいきました。日本の企業ではソニーや松下電器(現:パナソニック)が積極的に導入を進めていきました。cXMLを追うようにRosettaNetやebXMLやxCBLといった電子購買・資材調達の仕様も発表され、SAPやOracleはOCIという電子カタログにフォーカスした仕様を展開していきました。しかし、適用範囲の広さと汎用性の高さからcXMLがデファクトスタンダードとしての位置を保っていました。日本ではcXMLから派生した仕様をAskulの関連会社であるSOLOELが展開するなどしています。
 このように、cXMLの大元は1999年に発表され、技術革新の速いIT業界で改編を行ってきたわけですが、発表当時には仕様として明確に定義し解説を加えなくては行けない技術であったものが今日では当たり前の技術になっていたり(例:Request-Responseモデル)、今日用いられている新しい技術の仕様には言及が無かったりします(例:OpenAuthやAJAX)。しかし、cXML自体は骨格となるプロトコルでありその時々の最新の技術自体を指定したものではなく、cXMLは国連の物資調達にも使用されるほど多岐にわたる物資の電子購買・資材調達に利用でき、グローバルに電子購買・資材調達を行ううえでcXMLに準拠したシステムを用いる以上に秀でた方式は無いと考えます。Aribaの利用費用が高額なため超大企業のみしか利用できなかったり、技術的に多岐にわたる分野への造詣が深くないと使えないなど敷居が高かった経緯はありますが、弊社は、このcXMLを用いた電子購買・資材調達は個人事業主からグローバル企業まで幅広く利用価値の高い仕組みであると考え、現在のIT技術や社会動向にフィットした仕組みとして、安価で容易に利用できる環境の提供を進めます。
cXML DTD
 DTDはXMLのフォーマットが規定に沿っている(well-formed)か検証するのに用いるファイルです。あらゆるバージョンの cXML に対応した DTD は、cXML.org から入手できます。2023年6月現在で最新バージョンと直近改訂版のDTDは下記の弊社サイトで取得できます。

DTD ドキュメント バージョンごとのDTD
A 基本 cXML ドキュメント 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
B 確認と出荷通知 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
C 請求書 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
D タイプ定義 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
E 支払送金 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
F 見積依頼書 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
G 契約 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
H 物流 1.2.048 | 1.2.052 | 1.2.054 | 1.2.056 | 1.2.057 | 1.2.058 | 1.2.059 | 1.2.060
※現時点での最新版はcxml.orgにてダウンロードできます。
※cXML 1.2.054から配布されるDTDにPrivate.dtdというDTDが含まれるようになりましたが実際はなくても問題ないものです。
XMLヘッダー解説
 cXMLで規定され送受信されるRequestとMessageのXMLドキュメントは「Header(ヘッダー)」と「Body(ボディー)」で構成されます。上記の返答として送られる「Response(レスポンス)」はもっと単純な構成ですが。Header領域には手紙の宛名書きに相当する情報や、宛名書きに書かれたユーザーが偽装ではないかを判別する認証情報などが含まれます。ここではHeaderの生成や仕様に関する具体的な説明を行います。XMLヘッダー解説へ。
トランザクション個別解説
発注までのトランザクション

 バイヤーがサプライヤのリモートカタログでバスケットカートを取得して発注するまでの処理群です。cXMLでは一般的に「商品」とみなされる有形の物体だけではなく無形のサービスなども発注できます。また、公に見積もりの公募と入札も可能ですし、契約書を電子的に締結することもプロトコルの範疇です。

グループ 概要 Req Msg DTD
00 Profile サーバーへのプロファイル問い合わせ 1 0 A
01 PunchOut サプライヤのリモートカタログでのカートの取得 1 1 A
02 PurchaseRequisition バイヤー内での購入申請 1 0 A
03 Quote 相見積公募と入札 1 1 F
04 Order バイヤーによる注文 1 0 A
05 PathRouting 注文書のコピーを送付 1 0 A
06 Contract 電子的な契約書のやりとり 3 0 G
07 ServiceSheet サービスの注文書に応じ実行した特定の明細を記述 1 0 B

発注後のトランザクション

 法人向け商取引では「掛売り(後払い)」が一般的です。その場合、サプライヤはバイヤーに受注後に請求書を送り支払いを受けることになります。また、配送・物流に関しては一括で発注した商品の配送先を複数指定することなど複雑です。下記のトランザクションはそのような法人向けの「請求」「支払」「配送・物流」についてのやりとりを電子的に行うことを可能にします。

グループ 概要 Req Msg DTD
08 Invoice 電子的な請求書のやりとり 1 0 C
09 Payment 電子的な支払い 7 0 E
10 Transport 配送・物流 2 0 H
11 StatusUpdate 逐次の情報の更新 5 0 A B

その他のトランザクション

 cXMLは1990年台後半に最初に規定され、その後の時代の変化に合わせて改訂がされてきました。しかし、常時高速回線でのインターネット接続が現在よりもコスト高であった頃に有効であった仕様も残存しているのが実情です。そのような仕様や現在でもあまり多用されないであろうトランザクションの仕様については「その他のトランザクション」として記載します。弊社ではこれらのトランザクションのいくつかはOut of scope(実装対応外)としています。

グループ 概要 Req Msg DTD
12 TimeCard 臨時社員および契約社員の勤務実績記録 2 0 B
13 CatalogOut of scope Networkにアップロードして使う静的なカタログ 7 3 A
14 DataOut of scope 待機データのダウンロード 2 0 A
15 ProviderPunchOut サービスプロバイダへのパンチアウト 1 1 A
16 SupplyChainColab サプライチェーンタスクのコラボレーション 7 1 A
17 Auth その他の認証方法(現状でのOpenAuthに近い) 1 0 A
18 StatusOut of scope ステータス管理 3 0 A
Status Code
 cXMLに準拠してRequestおよびMessageを送った際に返されるResponceに含まれるステータスコードの一覧です。
国際規格・標準コード一覧
ISO(国際標準化機構 – International Organization for Standardization)
規格 概要
ISO 639 言語コード(言語の名称の略号を規定した国際規格)
ISO 3166-1 国コード(独立国や非独立地域につけられる符号)
ISO 3166-2 国細分コード(都道府県や州といった地域コード)
ISO 4217 通貨コード(通貨と債券の表現のためのコード)
ISO 8601 時刻表記(日付と時刻の表記に関する国際規格)
ISO 9362 金融機関識別コード(金融機関識別コードの標準書式、別名:SWIFT, BIC)
ISO 13616 国際銀行コード(銀行口座の所在国・支店・口座番号を特定するための国際標準、別名:IBAN)
UNDP(国際連合開発計画 – United Nations Development Programme)
規格 概要
UNSPSC 国連基準製品/サービス分類コード(eコマースで使用するための製品とサービスの分類)
UNECE(国際連合欧州経済委員会 – United Nations Economic Commission for Europe)
規格 概要
UOM 数量単位コード(種々の物理量を表す単位として選ばれた基準の量(例:個、箱、ガロン))
ICC(国際商業会議所 – International Chamber of Commerce)
規格 概要
Incoterms 貿易条件(運賃、保険料、リスク負担等の条件に関する売主と買主の合意内容取り決め)
IMO(国際海事機関 – International Maritime Organization)
規格 概要
IMO number IMO船舶識別番号(個々の船舶、船舶所有者、船舶管理者に与えられる番号)
IATA(国際航空運送協会 – International Air Transport Association)
規格 概要
IATA code #1 Aircraft Type Code(航空機の種類ごとのコード)
IATA code #2 Airline Code(航空会社ごとのコード)
IATA code #3 Airport Code(空港ごとのコード)
IATA code #4 Booking Class Code(旅客航空機の座席の種類ごとのコード)
その他の規格など
規格 概要
AAR reporting marks 貨物設備の所有者コード(Association of American Railroadsが定める報告記号。報告記号は、鉄道車両やインターモーダル貨物輸送用の設備(トレーラー、セミトレーラー、コンテナなど)などに記載されてその所有者を一意に識別する2文字から4文字のコード)
DUNS 企業・組織コード(D&B(Dun and Bradstreet)が管理している、企業コードの付与管理システム、並びに同システムによって各企業に付与された企業コードの名称(Data Universal Numbering System)。)
EAN 商品識別コード(EANコード(イアンコード、European Article Number)は、商品識別コードおよびバーコード規格のひとつ。日本の規格は「JANコード」(Japanese Article Number)と呼ばれる。)
SCAC 海運業者識別コード(SCAC(Standard Carrier Alpha Code)は、船舶を運航する一般運送業者(VOCC)を識別するために使用される私的に管理された米国のコード(通常、2〜4文字の長さ)。)
UIC country codes 列車国識別番号(国際鉄道連合が車両などにつけるように規定している国の識別番号)
PHPライブラリ
cXMLを用いてデータ処理を行うコードのGitリポジトリです(PHPのみ)。