Search Posts

Views: 118

Nobuyuki SAMBUICHI

ISO/TC295 Audit data services/SG1 Semantic model Convener

背景

Open Peppol JP PINTのデジタルインボイスの明細行に税込み価額を追加するために、UBLの定義拡張方法に従った拡張ができないかChatGPTに相談しました。
ChatGPTの理解が足らず間違った主張を繰り返したので、そこで中断しました。UBL 2.1 では、文書単位で要素定義を拡張することは可能ですが、明細行といった下位要素についての要素定義を拡張することはできません。

以下、間違いを指摘しながら、文書単位での要素定義を拡張を行いましたので、そこまでを参考にしてください。

ChatGPTの回答を鵜呑みにすることは危険ですので、その分野の基礎知識を基に確認しながら使用することをお勧めします。検証作業は、XML Spyでスキーマとインスタンスを定義しながら、XML Spyのエラーを指摘してCChatGPTの応答を確認しました。

なお、UBL 2.3では、cac:InvpoiceLineTypeにext:UBLExtension要素定義が追加されていますので、明細行といった下位要素についての要素定義を拡張することが可能です。JP PINTも最新の国際標準に対応していただきたいものですね。

UBLでの要素定義拡張方法指導後の回答

1.以降の回答に対していくつかの指摘を繰り返した後で、ようやく次の回答が出てきました。

Q

この定義はエラーです

ChatGPT

申し訳ありませんが、確かにエラーがあります。これは、cac:InvoiceLineTypeが既に複合型であるため、拡張することができないためです。UBL 2.1では、明細行に対して拡張するには、カスタマイズガイドラインに従って、UBLの標準的な拡張要素を使用する必要があります。たとえば、<ext:UBLExtensions>内に新しい拡張要素を定義することができます。

Q

ubl2.1では、<ext:UBLExtensions>を使って明細行に新しい拡張要素を定義できますか?

ChatGPT

UBL 2.1 では、ext:UBLExtensions を使用して文書全体に新しい拡張要素を定義することができますが、明細行に新しい拡張要素を定義することはできません。これは、cac:InvoiceLine に関するXMLスキーマが変更不可能であるためです。ただし、UBL 2.3 では、cac:InvoiceLine に新しい拡張要素を定義することができます。

1. UBLの拡張について

Q

ublの定義拡張方法について解説を

ChatGPT

UBL (Universal Business Language) は、電子商取引で使用される標準化されたXMLデータ形式です。主に商業文書や取引情報を表現するために開発されました。UBLの定義拡張方法にはいくつかのステップがあります。以下にその手順を示します。

UBLの拡張機能を理解する:
UBLは、標準化されたビジネスドキュメントの定義と拡張の機能を提供します。UBLを拡張する前に、UBLの基本概念や用語、構造を理解することが重要です。また、UBL拡張のガイドラインやベストプラクティスを参照してください。

必要な拡張を特定する:
既存のUBLスキーマが要件を満たさない場合、独自の拡張を定義する必要があります。拡張を適切に特定し、その目的と使用方法を明確に文書化します。

UBL拡張要素を定義する:
UBL拡張要素は、特定のビジネス要件を満たすために追加されるカスタム要素です。これらの要素は、UBL標準スキーマにない情報を追加するために使用されます。拡張要素を作成する際には、XMLスキーマ言語(XSD)を使用して定義し、UBLスキーマと一貫性を保ちます。

UBL拡張ポイントを使用する:
UBLスキーマには、拡張ポイントと呼ばれる特定の場所が用意されています。これらのポイントは、独自の拡張要素を挿入するためのフックです。UBL拡張ポイントを使用して、独自の要素を既存のUBLドキュメントに追加できます。

拡張をテストおよび検証する:
拡張が正しく機能することを確認するために、テストおよび検証を行います。拡張されたUBLスキーマに対してXMLインスタンスを作成し、適切なツールや技術を使用して検証します。

拡張を公開および共有する:
拡張が正しく機能し、要件を満たすことが確認されたら、UBLコミュニティと共有します。拡張を公開することで、他の組織も同様の拡張を使用して、互換性と標準化を向上させることができます。拡張を公開する際には、以下の手順を実行してください。

拡張の文書化:
拡張の詳細、使用方法、目的、および関連する要件を明確に記述します。これにより、他の組織が拡張を理解し、適切に使用できるようになります。

拡張のパッケージ化:
拡張されたUBLスキーマ、関連するドキュメント、サンプルデータ、およびテストケースを含むパッケージを作成します。これにより、他の組織が簡単に拡張を試すことができます。

拡張の公開:
拡張を公開し、UBLコミュニティにアクセスできるようにします。公開方法には、オープンなリポジトリ、ウェブサイト、またはUBL関連のフォーラムやメーリングリストを使用できます。

コミュニティとの連携:
拡張の普及と採用を促進するために、UBLコミュニティと積極的に連携します。フィードバックを求め、拡張の改善や統合に取り組むことで、拡張の価値を最大化できます。

拡張が成功裏に公開され共有された後、他の組織が拡張を採用し、ビジネスプロセスの効率化や標準化を実現することができます。また、他の組織からのフィードバックを通じて、拡張をさらに改善し、より広範なコミュニティのニーズに対応できるようになります。

明細行の請求金額には税込み価額を拡張できますか

Q

UBL2.1で定義されているインボイスの明細行の請求金額には税込み価額がありません。UBLで税込み価額を記載できるようにするための拡張方法について提案してください。UBL2.3で追加された要素は使用できますか。その時の留意すべき事項があれば教えてください。また、UBL2.1で明細行に税込み価額を記載可能とするための拡張方法についても併せて紹介してください。できれば、インボイスの定義例をそれぞれ紹介してください。

ChatGPT

UBL 2.1で明細行に税込み価額を記載するための拡張方法として、既存のUBL拡張ポイントを利用して新たな要素を追加することができます。また、UBL 2.3では、一部の要素が追加されているため、それらを使用することもできます。以下に、それぞれの方法について説明します。

  • UBL 2.1で明細行に税込み価額を記載する方法

UBL 2.1では、明細行の拡張ポイントを利用して、新たな要素を追加することができます。以下の例では、LineExtensionAmountという要素を追加して、税込み価額を記載しています。(注:回答は誤りです)

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:Note>Sample product</cbc:Note>
  <cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="USD">100.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Description>Sample product description</cbc:Description>
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="USD">100.00</cbc:PriceAmount>
  </cac:Price>
  <!-- Begin custom extension -->
  <cac:LineExtension>
    <cbc:TaxInclusiveLineAmount currencyID="USD">110.00</cbc:TaxInclusiveLineAmount>
  </cac:LineExtension>
  <!-- End custom extension -->
</cac:InvoiceLine>
  • UBL 2.3で明細行に税込み価額を記載する方法

UBL 2.3では、TaxInclusiveLineAmount要素が追加されているため、拡張することなく税込み価額を記載することができます。

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:Note>Sample product</cbc:Note>
  <cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="USD">100.00</cbc:LineExtensionAmount>
  <cbc:TaxInclusiveLineAmount currencyID="USD">110.00</cbc:TaxInclusiveLineAmount>
  <cac:Item>
    <cbc:Description>Sample product description</cbc:Description>
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="USD">100.00</cbc:PriceAmount>
  </cac:Price>
</cac:InvoiceLine>
  • 留意事項

UBL 2.3の要素を使用する場合、ドキュメント全体でバージョンを2.3にアップデートし、適切な名前空間を使用してください。これにより、他のシステムとの互換性が保たれます。
カスタム拡張を使用する場合、他のシステムが拡張を理解できるように、適切に文書化し、UBLコミュニティと共有してください。これにより、他の組織も同様の拡張を採用し、互換性と標準化を向上させることができます。

  • 拡張例の説明

上記のUBL 2.1の拡張例では、LineExtensionAmountの後にLineExtension要素を追加し、その中にカスタムのTaxInclusiveLineAmount要素を定義しています。これにより、明細行に税込み価額を記載することができます。(注:回答は誤りです)

一方、UBL 2.3の例では、既存のUBL 2.3の要素TaxInclusiveLineAmountを使用して、明細行に税込み価額を直接記載しています。これにより、拡張を行わずに税込み価額を記載することができます。

どちらの方法を使用するかは、システムやパートナーとの互換性、および業務要件に応じて決定します。しかし、UBL 2.3を使用できる場合は、その追加された要素を利用して拡張を避けることが望ましいでしょう。これにより、互換性の問題が発生する可能性が低くなり、標準化を促進できます。

間違いを指摘 1

Q

ubl2.1ではLineExtensionAmountは必須項目です。例が間違いでは?

ChatGPT

申し訳ありません。ご指摘の通り、UBL 2.1の例に誤りがありました。LineExtensionAmountは必須項目で、正確にはUBL 2.1の明細行に税込み価額を記載するための拡張例は以下のようになります。(注:回答は誤りです)

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:Note>Sample product</cbc:Note>
  <cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="USD">100.00</cbc:LineExtensionAmount>
  <cac:Item>
    <cbc:Description>Sample product description</cbc:Description>
  </cac:Item>
  <cac:Price>
    <cbc:PriceAmount currencyID="USD">100.00</cbc:PriceAmount>
  </cac:Price>
  <!-- Begin custom extension -->
  <cac:LineExtension>
    <cbc:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</cbc:TaxInclusiveLineExtensionAmount>
  </cac:LineExtension>
  <!-- End custom extension -->
</cac:InvoiceLine>

上記の例では、LineExtension要素を追加し、その中にカスタムのTaxInclusiveLineExtensionAmount要素を定義しています。これにより、明細行に税込み価額を記載することができます。(注:回答は誤りです)

XMLスキーマ定義

Q

この例の拡張要素のスキーマ定義を紹介してください。

UBL-CommonExtensionComponents-2.1.xsdとの関係も説明してください。

ChatGPT

以下に、UBL 2.1の明細行に税込み価額を追加する拡張要素のスキーマ定義を示します。この例では、UBLの既存の拡張機能を活用して、TaxInclusiveLineExtensionAmount要素を追加しています。(注:i以下の回答は誤りです)

まず、カスタムの拡張要素のスキーマ定義を作成します。この例では、MyUBLExtensions.xsdという名前のファイルを作成し、以下のように定義します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
           xmlns="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           targetNamespace="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" schemaLocation="UBL-CommonBasicComponents-2.1.xsd"/>

  <xs:element name="TaxInclusiveLineExtensionAmount" type="cbc:AmountType" minOccurs="0"/>
</xs:schema>

このスキーマ定義では、TaxInclusiveLineExtensionAmount要素を追加し、その型をcbc:AmountTypeに設定しています。また、UBL-CommonBasicComponents-2.1.xsdをインポートして、既存のUBLの基本コンポーネントを使用できるようにしています。

次に、UBL-CommonExtensionComponents-2.1.xsdファイルを編集して、カスタム拡張要素を含めるようにします。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...>
  ...
  <xs:import namespace="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1" schemaLocation="MyUBLExtensions.xsd"/>
  ...
  <xs:complexType name="UBLExtensionsType">
    <xs:sequence>
      ...
      <xs:element ref="ext:TaxInclusiveLineExtensionAmount" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

ここでは、UBL-CommonExtensionComponents-2.1.xsdに、カスタム拡張の名前空間をインポートし、UBLExtensionsTypeコンプレックスタイプに新しい要素TaxInclusiveLineExtensionAmountを追加しています。

これで、拡張要素のスキーマ定義が完了しました。この定義を使用して、明細行に税込み価額を含めることができます。(注:回答は誤りです)

間違いを指摘 2

Q

この例は http://docs.oasis-open.org/ubl/guidelines/UBL2-Customization1.0cs01.pdf の規定に適合していますか? 正しい回答をお願いします。

ChatGPT

申し訳ありません。先ほどの回答は、OASISのUBLカスタマイズガイドラインに完全には適合していません。正しい方法で拡張を行うには、以下の手順に従ってください。

まず、UBL拡張要素を含む新しいスキーマ定義ファイルを作成します。この例では、MyUBLExtensions.xsdという名前のファイルを作成します。このファイルには、拡張したい要素を定義します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
           xmlns="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           targetNamespace="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" schemaLocation="UBL-CommonBasicComponents-2.1.xsd"/>

  <xs:element name="TaxInclusiveLineExtensionAmount" type="cbc:AmountType" minOccurs="0"/>
</xs:schema>

次に、UBL-CommonExtensionComponents-2.1.xsdに、MyUBLExtensions.xsdをインポートし、ext:UBLExtension要素の定義に新しい要素を追加します。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...>
  ...
  <xs:import namespace="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1" schemaLocation="MyUBLExtensions.xsd"/>
  ...
  <xs:complexType name="UBLExtensionType">
    <xs:sequence>
      ...
      <xs:element ref="ext:TaxInclusiveLineExtensionAmount" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

最後に、Invoice-2.1-UBL-Extension-example.xmlのような新しいインボイスXMLファイルを作成し、拡張要素を含めます。

<?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:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2">
  ...
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    ...
    <cac:LineExtension>
      <ext:UBLExtension>

間違いを指摘 3

Q

「最後に、Invoice-2.1-UBL-Extension-example.xmlのような新しいインボイスXMLファイルを作成し」
はまちがっていませんか?

ChatGPT

申し訳ありません。先ほどの回答で誤りがありました。以下に、UBLカスタマイズガイドラインに従った拡張方法を説明します。

まず、新しいスキーマ定義ファイル(この例では、MyUBLExtensions.xsd)を作成し、拡張したい要素を定義します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
           xmlns="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           targetNamespace="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" schemaLocation="UBL-CommonBasicComponents-2.1.xsd"/>

  <xs:element name="TaxInclusiveLineExtensionAmount" type="cbc:AmountType" minOccurs="0"/>
</xs:schema>

次に、インボイスXMLファイルに拡張要素を追加します。ext:UBLExtensions要素の中に、新たに定義した拡張要素を追加します。

<?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:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:myext="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1">
  <ext:UBLExtensions>
    <ext:UBLExtension>
      <ext:ExtensionContent>
        <myext:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</myext:TaxInclusiveLineExtensionAmount>
      </ext:ExtensionContent>
    </ext:UBLExtension>
  </ext:UBLExtensions>
  ...
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    ...
  </cac:InvoiceLine>
</Invoice>

この例では、Invoice要素にmyextという名前空間を追加し、MyUBLExtensions.xsdで定義された要素を使用できるようにしています。そして、ext:UBLExtensions要素の中に、新たに定義した拡張要素(この例ではTaxInclusiveLineExtensionAmount)を追加しています。

この方法で、UBLカスタマイズガイドラインに従った拡張が行われています。

必要に応じて、他の拡張要素もMyUBLExtensions.xsdに定義し、インボイスXMLファイルに追加できます。拡張要素を追加する場合は、ext:UBLExtensions要素内にext:UBLExtension要素を追加し、それぞれのext:ExtensionContent内に拡張要素を記述します。
以下に、追加の拡張要素の例を示します。(注:質問していないことについての余計な回答)

  • MyUBLExtensions.xsd:

...
<xs:element name="AdditionalInformation" type="xs:string" minOccurs="0"/>
...
  • Invoice XMLファイル:

...
<ext:UBLExtensions>
  <ext:UBLExtension>
    <ext:ExtensionContent>
      <myext:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</myext:TaxInclusiveLineExtensionAmount>
    </ext:ExtensionContent>
  </ext:UBLExtension>
  <ext:UBLExtension>
    <ext:ExtensionContent>
      <myext:AdditionalInformation>Some additional information</myext:AdditionalInformation>
    </ext:ExtensionContent>
  </ext:UBLExtension>
</ext:UBLExtensions>
...

ここでの注意点は、拡張要素を使用する際に、適切な名前空間を使用して拡張要素を記述することです。また、拡張要素が他のUBL文書と競合しないように、独自の名前空間を使用して拡張要素を定義することが推奨されています。

このように、UBLカスタマイズガイドラインに従って、UBL文書を拡張することができます。拡張要素を正しく定義し、適切な名前空間を使用してインボイスXMLファイルに追加することで、柔軟にUBL文書をカスタマイズできます。

間違いを指摘 4

Q XMP Spyのエラーメッセージを指摘

Attribute ‘minOccurs’ is not allowed in element <xs:element>

ChatGPT

申し訳ありません、minOccurs属性は<xs:element>要素では使用できません。代わりに、<xs:complexType>内の<xs:sequence>要素で使用します。以下の例では、TaxInclusiveLineExtensionAmountとAdditionalInformation要素を定義していますが、minOccurs属性は使用されていません。

  • MyUBLExtensions.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
           xmlns="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           targetNamespace="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" schemaLocation="UBL-CommonBasicComponents-2.1.xsd"/>

  <xs:element name="TaxInclusiveLineExtensionAmount" type="cbc:AmountType"/>
  <xs:element name="AdditionalInformation" type="xs:string"/>
</xs:schema>

この修正を加えた上で、以前の回答で示した拡張方法を実行すると、UBLカスタマイズガイドラインに従った拡張が行われます。

目的を質す 1

Q

myext:TaxInclusiveLineExtensionAmountがInvoiceで使用されていません

ChatGPT

申し訳ありません、先ほどの例ではmyext:TaxInclusiveLineExtensionAmountがInvoice内で使用されていませんでした。以下に、Invoice内でmyext:TaxInclusiveLineExtensionAmountを使用した例を示します。

  • Invoice XMLファイル:

<?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:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:myext="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1">
  <ext:UBLExtensions>
    <ext:UBLExtension>
      <ext:ExtensionContent>
        <!-- Add your extension elements here -->
      </ext:ExtensionContent>
    </ext:UBLExtension>
  </ext:UBLExtensions>
  ...
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    ...
    <cac:Item>
      ...
    </cac:Item>
    <cac:Price>
      ...
    </cac:Price>
    <myext:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</myext:TaxInclusiveLineExtensionAmount>
  </cac:InvoiceLine>
</Invoice>

この例では、InvoiceLine要素内にmyext:TaxInclusiveLineExtensionAmount要素を追加しています。これにより、明細行に税込み価額を記載できます。(注:回答は誤り)

この拡張方法は、UBLカスタマイズガイドラインに従っています。ただし、他のUBLユーザーとの互換性を維持するために、拡張を行う際は適切な名前空間を使用し、拡張要素が他のUBL文書と競合しないように注意してください。

目的を質す 2

Q

/Invoice /ext:UBLExtensions /myext:TaxInclusiveLineExtensionAmount では?

ChatGPT

申し訳ありません、先ほどの回答で示したXML例では、myext:TaxInclusiveLineExtensionAmount要素がInvoiceの内部で使用されていないため、誤解を招く表現を使用してしまいました。

正しい表現としては、以下のようになります。

<?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:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:myext="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1">
  <ext:UBLExtensions>
    <ext:UBLExtension>
      <ext:ExtensionContent>
        <myext:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</myext:TaxInclusiveLineExtensionAmount>
      </ext:ExtensionContent>
    </ext:UBLExtension>
  </ext:UBLExtensions>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    ...
    <cac:Price>
      ...
      <cbc:PriceAmount currencyID="USD">100.00</cbc:PriceAmount>
    </cac:Price>
    <myext:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</myext:TaxInclusiveLineExtensionAmount>
  </cac:InvoiceLine>
</Invoice>

この例では、myext:TaxInclusiveLineExtensionAmount要素が、ext:UBLExtensions要素内で定義され、cac:InvoiceLine要素内で使用されていることがわかります。また、価格情報は、cac:Price要素内のcbc:PriceAmount要素で税抜き金額を記述し、myext:TaxInclusiveLineExtensionAmount要素で税込み価額を記述していることにも注目してください。(注:回答は誤り)

ご迷惑をおかけして大変申し訳ありませんでした。

XMP Spy 検証エラーを指摘

Q

Element <myext:TaxInclusiveLineExtensionAmount> is not allowed under element <cac:InvoiceLine>.

ChatGPT

申し訳ありません、先ほどの回答で使用したXML例に誤りがあります。

<myext:TaxInclusiveLineExtensionAmount>要素は、<ext:UBLExtensions>要素内に含まれる必要があります。以下は、修正されたXML例です。

<?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:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:myext="urn:mycompany:names:specification:ubl:extension:xsd:MyUBLExtensions-1">
  <ext:UBLExtensions>
    <ext:UBLExtension>
      <ext:ExtensionContent>
        <myext:TaxInclusiveLineExtensionAmount currencyID="USD">110.00</myext:TaxInclusiveLineExtensionAmount>
      </ext:ExtensionContent>
    </ext:UBLExtension>
  </ext:UBLExtensions>
  <cac:InvoiceLine>
    <cbc:ID>1</cbc:ID>
    ...
    <cac:Price>
      ...
      <cbc:PriceAmount currencyID="USD">100.00</cbc:PriceAmount>
    </cac:Price>
  </cac:InvoiceLine>
</Invoice>

<myext:TaxInclusiveLineExtensionAmount>要素は、UBL文書の明細行に追加するために、cac:InvoiceLine要素に含める必要があります。ただし、UBL文書の構造に関する厳密なルールに従って、UBL文書内の要素の位置が正しくなければならないことに注意してください。

ご迷惑をおかけして大変申し訳ありませんでした。

取り組み方向の間違いを指導

Q

<xs:complexType name="MyInvoiceType">
    <xs:complexContent>
      <xs:extension base="cac:InvoiceType">

は、UBLで規定された拡張ではありません。この取り組みが間違っています。

ChatGPT

おっしゃる通り、私の回答に誤りがありました。大変失礼いたしました。

UBLで規定された拡張機能を使用する場合、拡張要素を定義するためにUBLのカスタマイズガイドラインに従う必要があります。私が以前紹介した方法は、UBLカスタマイズガイドラインに従わないものでした。

正しくは、UBLカスタマイズガイドラインに従い、拡張機能を定義する必要があります。その上で、定義した拡張機能を使用したカスタマイズされたXML文書を作成することができます。

大変申し訳ありませんでした。

Q

UBL の拡張ガイドに準拠すると、UBL2.1では文書単位の拡張ができるが明細行単位の拡張ができない。UBL2.3だと明細行単位の拡張もできるのでは?

ChatGPT

はい、おっしゃる通りです。

UBL2.1では、文書単位の拡張が可能であり、明細行単位の拡張はできませんでした。一方、UBL2.3では、明細行単位の拡張が許可されるようになりました。具体的には、cac:InvoiceLine要素に対して、xs:extension要素を使用して拡張を定義することができます。

ただし、UBL2.3においても、拡張機能を使用する際にはUBLカスタマイズガイドラインに従う必要があります。拡張機能を使用する前に、必ずUBLカスタマイズガイドラインを確認し、適切な拡張機能の定義を行うようにしてください。