コンテンツにスキップ

データモジュールと DMC

データモジュールは S1000D の最小の情報単位で、識別・状態部と内容部からなる XML です。データモジュールコード(DMC)は、そのデータモジュールが「どの製品の、どの部位の、どの種類の情報か」をハイフン区切りの文字列で表します。

flowchart TB
  DM["dmodule"] --> IS["identAndStatusSection<br/>(識別・状態部)"]
  DM --> C["content<br/>(内容部)"]
  IS --> A["dmAddress<br/>DMC・言語・発行番号・発行日・題名"]
  IS --> ST["dmStatus<br/>機密区分・責任企業・適用性・brexDmRef・品質保証"]
  C --> X["種類ごとの要素<br/>description / procedure / brex / …"]

識別・状態部には、本文を読まなくても分かる管理情報が集まっています。

要素 入っているもの 何に使うか
dmCode DMC の構成要素(属性で分かれている) 識別、ファイル名との照合
language / issueInfo / issueDate 言語と国、発行番号と作業中番号、発行日 版の判別
dmTitle 技術名称(techName)と情報名(infoName) 人が読む題名
dmStatus/@issueType new / changed / … 改版の種類
security 機密区分 配布の制御
applic どの機種・構成に当てはまるか 適用性の判定
brexDmRef 従うべき BREX の DMC BREX 照合の起点
qualityAssurance 未検証 / 第 1 検証 / 第 2 検証 検証状態の明示

内容部はデータモジュールの種類ごとに違います。種類はルート要素 dmodule の xsi:noNamespaceSchemaLocation が指すスキーマのファイル名(descript.xsd、proced.xsd、brex.xsd など)で分かります。この URL には版も入っており(http://www.s1000d.org/S1000D_7/xml_schema_flat/descript.xsd なら Issue 7)、ここから版と種類が分かります。

KENBAIKI-A-10-20-00-00A-040A-D
│ │ │ │ │ │ │ └ アイテムロケーションコード(1 文字)
│ │ │ │ │ │ └───── 情報コード(3 文字)+ 情報コードバリアント(1 文字)
│ │ │ │ │ └───────── 分解コード(2 文字)+ 分解コードバリアント(1〜3 文字)
│ │ │ │ └──────────── 組立コード(2 または 4 文字)
│ │ │ └─────────────── サブシステムコード(1 文字)+ サブサブシステムコード(1 文字)
│ │ └────────────────── システムコード(2〜3 文字)
│ └──────────────────── システム差異コード(1〜4 文字)
└───────────────────────────── モデル識別コード(2〜14 文字)

上の例は、このプロジェクトのテストデータ(架空の指定席券売機 KENBAIKI)の説明データモジュールです。

区画 意味 例の値
モデル識別コード(MIC) 製品やプロジェクト。実際の納品では NSPA への登録が前提 KENBAIKI
システム差異コード 同じ製品の派生の区別 A
システム / サブシステム / サブサブシステム / 組立 製品の構造上の位置。体系(SNS)はプロジェクトが決め、BREX に書ける 10 / 2 / 0 / 00
分解コードとバリアント 組立をさらに分けた位置 00 / A
情報コードとバリアント 情報の種類。040 は説明、022 は BREX、5xx は手順など 040 / A
アイテムロケーションコード 作業を行う場所(装着状態・取り外し後など) D

学習用データモジュールでは、末尾に学習コード(3 文字)と学習イベントコード(1 文字)の区画が付きます。

CSDB ではデータモジュールを次の名前で置くのが慣例です。

DMC-KENBAIKI-A-10-20-00-00A-040A-D_002-01_JA-JP.XML
└── DMC ──────────────────────┘ └発行┘ └言語┘

_002-01 が発行番号と作業中番号、_JA-JP が言語と国です。

図や動画はデータモジュールの XML には入らず、ICN(Information Control Number)で参照します。ICN には MIC を基にした書式と CAGE コードを基にした書式があります。ファイル形式は ICN に含まれず、DOCTYPE の ENTITY 宣言と NOTATION 宣言で対応付けます。使ってよい形式はプロジェクトの BREX(notationRuleList)で決めます。

共有ライブラリ s1000d-core が、ここに書いた情報を次の順で取り出します。

  • 識別・状態部をまず読み、xsi:noNamespaceSchemaLocation の URL から版と種類を推定します(readDataModuleInfo)
  • ファイル名を parseDmcFileName で分解し、中身の dmCode と突き合わせます
  • ICN は parseIcn が MIC 基準・CAGE 基準の両方の書式を分解します

関数はそのまま呼べます。

import { readFileSync } from 'node:fs';
import { parseDmc, readDataModuleInfo } from '@shuji-bonji/s1000d-core';
const dmc = parseDmc('KENBAIKI-A-10-20-00-00A-040A-D');
if (dmc.ok) console.log(dmc.value.infoCode); // "040"
const info = readDataModuleInfo(readFileSync('DMC-KENBAIKI-A-10-20-00-00A-040A-D_002-01_JA-JP.XML', 'utf8'));
console.log(info.schemaName, info.issue); // "descript" "7"
console.log(info.identAndStatus?.brexDmRef?.dmCode); // 従う BREX の DMC