医薬品チームブログ
新記載要領

添付文書用XML解析 2. Item.Detail要素1

投稿日:2024.10.15

更新日:2024.10.15


添付文書用XML解析 2

 

 

前回のブログでは全体的な構造、主にルート直下に配置される大項目に並びについて触れました。
今回は中項目以下の内容部分の構造について実際の例を用いて解説したいと思います。

 

Item.Detailを用いた構造の違い

以下の様な禁忌の項目を例に解説したいと思います。

 

 SGMLの場合 

上記の禁忌をSGMLで作成すると以下のようになります。

 

<contraindications>
<variablelabel onswitch="on">禁忌</variablelabel>
<serialno onoff="off">1</serialno>
<low1subitem>
<serialno>1</serialno>
<item>見出し1</item>
<detail>いろはにほへと ちりぬるを</detail>
<serialno>2</serialno>
<item>見出し2</item>
<detail>かよたれそ つねならむ</detail>
<low2subitem>
<serialno><variablelabel>順序番号</variablelabel>1</serialno>
<detail><variablelabel>見出し2</variablelabel>うゐのおくやま けふこえて</detail>
<serialno><variablelabel>順序番号</variablelabel>2</serialno>
<detail><variablelabel>見出し2</variablelabel>あさきゆめみし ゑひもせすん</detail>
</low2subitem>
</low1subitem>
</contraindications>

 

SGMLでは【禁忌】の様な大項目の項目名は、variablelabel要素等を用いて記述していました。
上記の例では「禁忌」の意味を持つcontraindications要素の直下で項目名「禁忌」を記述しています。

 

そして、5-7行目が1つ目の項目に当たります。
serialno要素が順序番号を、item要素が項目名を、detail要素が内容を表しており、各要素が並列に配置されているのが分かるかと思います。

 

ここで注目したいのが1つ目の項目が3つの要素で構成されているのに対し、2つ目の項目はlow1subitem要素を含む4つの要素で構成されている点です。

 

並列に配置された要素を取得する為には上から順に要素名を見分ける必要がありますが、1項目当たりの要素数・種類が一定ではない為、項目の範囲を特定しにくい構造となっており、煩雑な処理が必要でした。

 

 XMLの場合 

次にXMLの禁忌の構造を見てみましょう。

 

  <ContraIndications id="HDR_ContraIndications" heading="fixing">
    <OrderedList>
      <Item id="HDR_ContraIndications_1" heading="free">
        <Header>
          <Lang xml:lang="ja">見出し1</Lang>
        </Header>
        <Detail>
          <Lang xml:lang="ja">いろはにほへと ちりぬるを</Lang>
        </Detail>
      </Item>
      <Item id="HDR_ContraIndications_2" heading="free">
        <Header>
          <Lang xml:lang="ja">見出し2</Lang>
        </Header>
        <Detail>
          <Lang xml:lang="ja">わかよたれそ つねならむ</Lang>
        </Detail>
        <OrderedList>
          <Item id="HDR_ContraIndications_3" heading="free">
            <Detail>
              <Lang xml:lang="ja">うゐのおくやま けふこえて</Lang>
            </Detail>
          </Item>
          <Item id="HDR_ContraIndications_4" heading="free">
            <Detail>
              <Lang xml:lang="ja">あさきゆめみし ゑひもせすん</Lang>
            </Detail>
          </Item>
        </OrderedList>
      </Item>
    </OrderedList>

 

まず、ContraIndications要素などの規定されている項目に関しては、別途項目名を記述しなくなりました。
要素そのものが項目名を意味している為です。

XMLでは3-10行目が1つ目の項目を指しています。
Item要素が役割を変え、個別に項目を包括するようになっていますね。

 

項目名を示すHeader要素、内容を示すDetail要素が一括りとなっており、Item要素が1つの項目を表すようになった為、SGMLに比べ項目の取得が容易になりました。
また、順序番号を表す要素が無くなりましたが、親にOrderedList要素を持つことで、Item要素の登場順がそのまま順序番号に相当する形式となっています。

 

なお、順序番号を振らない場合はOrderedList要素の代わりにUnorderedList要素やSimpleList要素を用いることで、順序番号を用いない記述が可能となっています。

 

これらListの名を冠する要素については説明が長引く為、別途記事を用意する予定です。今後作成予定の記事でご覧ください。

 

最後にLang要素に関してです。
Lang要素は使用する言語について定義しており、多言語での記述を併記する為に用意されました。

今回は日本語なので”ja”が属性値として設定されていますね。
なお、数値を用いる要素等を除き、内容を記述する際は必須の要素となります。

 

 まとめ 

今回はItem要素・Detail要素回りについて解説いたしましたがいかがでしたでしょうか?
SGMLに比べXMLは構造を意識した作りに変わっているのが窺えたかと思います。
細かい項目単位での取得が容易になって、データとしての活用がし易くなるのではないでしょうか。

 

次回はListの名を冠する要素のより細かい部分をみていきたいと思います。

 

※本記事のXMLは”xml_schema_v0.9.4.xsd”に基づき作成しています。