S1000D tutorial
khzae.net
2021-04-16

  NOTE

  This is a work-in-progress tutorial to introduce the basic concepts of
  S1000D.



WHAT IS S1000D?


S1000D is "an international specification for the procurement and
production of technical publications". It combines common, international
standards and best practices for writing and managing documentation into
a single, open specification.

The "S" stands for "specification", and the "D" for "documentation". The
"1000" is based on S1000D's predecessor, ATA Spec 100. But while ATA100
was developed specifically for technical publications in the aerospace
industry, S1000D takes many of the same ideas and generalizes them for
any kind of publication.

S1000D breaks from many of the traditional concepts of publications.
These typically divide content in to "chapters", "sections",
"subsections", etc. An S1000D publication, on the other hand, is
topic-based and consists of units of information called _data modules_,
which are stored in a Common Source Database (CSDB).



THE CSDB


The full title of the S1000D specification is "International
specification for technical publications using a common source
database". The common source database, or CSDB, is where all the data
for your S1000D project is stored, including the data modules. This
means a data module is not tied to a particular publication, but can be
reused among several publications wherever it is needed, avoiding
duplication of data.

                   Traditional publications
                         (Monolithic)
     ----------------                   ----------------
    | Publication    |                 | Publication    |
    |----------------|                 |----------------|
    | . Chapter 1    |                 | . Chapter 1    |
    |----------------|                 |----------------|
    | .. Section 1.1 |                 | .. Section 1.1 |
    |----------------|  Same content   |----------------|
    | .. Section 1.2 | <------         | . Chapter 2    |
    |----------------|        |        |----------------|
    | . Chapter 2    |        |        | .. Section 2.1 |
    |----------------|        |        |----------------|
    | .. Section 2.1 |        -------> | .. Section 2.2 |
     ----------------                   ----------------


                            CSDB
                          (Modular)

                       ------------------> (Data module)
                      /
    (Publication module) ----------------> (Data module)
                      \
                       ------------------>    shared
                                           (Data module)
                       ------------------>
                      /
    (Publication module) ----------------> (Data module)
                      \
                       ------------------> (Data module)

The S1000D specification does not give specific requirements for the
implementation of a CSDB, and so CSDBs can be implemented in any number
of ways. Often, a CSDB is built on top of an existing relational
database management system.

  NOTE

  For the purposes of the s1kd-tools, the CSDB is simply a folder in a
  typical filesystem.


CSDB objects

The CSDB is made up of many CSDB objects. These include:

-   Data modules, which represent individual topics

-   Publication modules, which place data modules in to a hierarchical
    structure for publishing

-   Information control numbers (ICNs), such as illustrations, which
    support data modules.

The following sections will discuss some of these different types of
objects in more detail.



DATA MODULES


The data module is the smallest self-contained unit of information in
S1000D. This could be, for example, a description of how a piece of
equipment was made, or a procedure to remove it from the system for
maintenance.


Structure of a data module

Every data module has the same basic structure, consisting of:

-   an identification and status section

-   a content section

The identification and status section of a data module contains metadata
about the data module.

The first part uniquely identifies the data module. The unique
identifier for a data module is composed of:

-   a unique data module code

-   the issue of the data module

-   the language of the data module

The second part gives the status of the data module, including:

-   the security classification of the data module

-   who is responsible for the data module

-   restrictions on how the data module may be distributed

-   what changes have been made to the data module

-   whether the data module has been quality assurance tested


Data module code

Each data module is given a unique data module code, which identifies:

-   what part of the system the data module is about

-   what kind of information the data module contains

     -------------------------------------------------------------------
    |    Hardware/System identification    |   Information/Learn type   |
    |-------------------------------------------------------------------|
    |    1       2          3          4   |  5     6     7             |
    | [FF1040]-[AAAB]-[HM3-30-0103]-[01ABC]-[253B]-[D]-[T25C]           |
    |                                      |                            |
    |-------------------------------------------------------------------|
    | 1 | Model identification code                 | 2 thru 14         |
    | 2 | System difference code                    | 1 thru 4          |
    | 3 | SNS                                       | 1 (opt.) + 6 or 8 |
    | 4 | Disassembly code/Disassembly code variant | 2 + 1 thru 3      |
    | 5 | Information code/Information code variant | 3 + 1             |
    | 6 | Item location code                        | 1                 |
    | 7 | Learn code/Learn event code               | 3 + 1             |
     -------------------------------------------------------------------

The first part, which identifies the piece of hardware or part of the
system, consists of four major components:

-   Model identification code

-   System difference code

-   Standard numbering system

-   Disassembly code

The second part, which identifies the type of information contained
within the data module, consists of two major components:

-   Information code

-   Item location code

An optional third part, the learn type, identifies information about
training content. The details of this code are outside the scope of this
tutorial, however.

Model identification code

The model identification code identifies the overall product or project
to which a data module belongs. It consists of 2 thru 14 uppercase
alphanumeric characters. It is encouraged that S1000D users register
their model identification codes with the NATO Support and Procurement
Agency, which maintains a list of registered codes, to avoid conflicts
with other projects.

https://www.nspa.nato.int/PDF/Log/S2000M/S2000M%20MOI%20codes.pdf

An example of a model identification code might be "BIKE" if you are
documenting the operation and maintenance of a line of bicycles.

System difference code

The system difference code identifies major variants of a product. It
consists of 1 thru 4 alphanumeric characters.

For example, if a bicycle is available in two different configurations,
road or off-road, the system difference codes "A" and "B" could indicate
which data modules apply to each configuration:

-   BIKE-A-00-00-00-00A-040A-D: contains information for the
    road variant.

-   BIKE-B-00-00-00-00A-040A-D: contains information for the
    off-road variant.

Standard numbering system

The standard numbering system identifies the detailed breakdown of the
product. The idea derives from ATA100, where common components are given
a specific chapter, section, subsection, and subject number across all
publications. S1000D generalizes these as the system, subsystem,
subsubsystem, and assembly codes. A number of common SNS are provided by
the S1000D specification for any project to use, or a project can create
its own SNS.

For example, the bicycle might be broken down as follows:

  System   Subsystem   Name
  -------- ----------- -----------------
  D00      -00         Bicycle
  DA0      -00         Wheels
           -10         Front wheel
           -20         Rear wheel
  DA1      -00         Brakes
           -10         Brake pads
           -20         Front brake
  DA2      -00         Steering system
           -10         Stem
           -20         Handlebar
           -30         Headset
  DA3      -00         Frame
           -10         Horn
  DA4      -00         Drivetrain
           -10         Chain

  : Example SNS

Disassembly code

The disassembly code identifies further breakdown on an assembly to
which maintenance information applies. The code consists of 2 typically
numeric but optionally alphanumeric characters, plus a 1 thru 3
alphanumeric variant code. The variant code identifies minor variants in
components, smaller than the major variants identified by the system
difference code.

For example, two alternative physical parts that perform the same
function (and thus have the same SNS in a functional breakdown) could be
identified by disassembly code variants B and C respectively:

-   BIKE-A-DA1-10-00-00B-720A-D: Installation procedures for brake pads
    produced by ABC company

-   BIKE-A-DA1-10-00-00C-720A-D: Installation procedures for brake pads
    produced by XYZ company

Information code

The information code identifies the kind of information contained within
a data module. It consists of 3 alphanumeric characters, referred to as
the primary, secondary, and tertiary codes. The S1000D specification
defines a base set of information codes divided in to 11 primary
categories:

-   000 - Function, data for plans and description

-   100 - Operation

-   200 - Servicing

-   300 - Examinations, tests and checks

-   400 - Fault reports and isolation procedures

-   500 - Disconnect, remove and disassembly procedures

-   600 - Repairs and locally make procedures and data

-   700 - Assemble, install and connect procedures

-   800 - Package, handling, storage and transportation

-   900 - Miscellaneous

-   C00 - Computer systems, software and data

The secondary code and tertiary codes break down these categories
further in to more specific kinds of information. For example, 040
represents various kinds of descriptions, while 041 specifically deals
with descriptions of how a component is made, and 042 specifically deals
with the function of a component.

All purely numeric codes are reserved by the specification, but projects
can create their own information codes using alphabetic characters for
the tertiary code. For example, if a project wants to include a specific
kind of description which does not fall under any of the available
040-049 codes, the project can allocate 04A-04Z. The project must then
document the definitions for these information codes in their business
rules. Projects may also translate the definitions of existing codes to
better fit their project, as long as the original meaning is preserved.

The information code variant is a single alphanumeric character after
the information code. This usually identifies alternative ways to
perform procedures, with A being the default variant. For example, if
258A means "Other procedure to clean", 258B could mean "Other procedure
to clean, Clean with water" and 258C could mean "Other procedure to
clean, Clean with air". Both provide a way to clean a component, but in
two alternative ways.

Item location code

The item location code identifies the context of the information
contained in a data module, particularly where a task will be carried
out. It is one of five codes:

-   A - the information is related to components installed in the system

-   B - the information is related to components installed in a
    component removed from the system

-   C - the information is related to components on the bench

-   D - the information is related to all three contexts above

-   T - the information is related to training


Data module title

The title of an S1000D data module is formed from two parts:

-   The technical name

-   The information name

The tech name is derived from the SNS of the data module, and the info
name is derived from the short definition of the information code of the
data module. For example, the data module BIKE-DA0-00-00-00A-040A-D,
which has the SNS DA0-00-00 (Wheels) and information code 040
(Description), would be titled "Wheels - Description".


Data module content

S1000D provides a number of different schemas for different kinds of
content within a data module. The schema dictates what elements can be
used within that data module's contents. This limits the author of a
data module to only using the appropriate elements for a particular
context, and helps keep data consistent.

For example, the data module BIKE-DA0-20-00-00A-040A-D, which is titled
"Rear wheel - Description" and will contain the description of the rear
wheel of the bicycle, might use the _descriptive_ schema. Another data
module, BIKE-DA0-20-00-00A-520A-A, which is titled "Rear wheel - Remove
procedure" and enumerates the steps to remove the rear wheel from the
bicycle, might use the _procedural_ schema.

Example of descriptive data module contents:

    <levelledPara>
    <title>General</title>
    <para>A bicycle is a frame and a number of movable components with
    mechanical parts that are completely open. There are no covers or
    sheet metal panels that prevent access to the mechanical parts. Thus,
    you can disassemble the different components of a bicycle to do:
    <randomList>
    <listItem>
    <para>an inspection</para>
    </listItem>
    <listItem>
    <para>a maintenance task</para>
    </listItem>
    <listItem>
    <para>a repair task</para>
    </listItem>
    </randomList>
    </para>
    </levelledPara>

Example of procedural data module contents:

    <proceduralStep>
    <para>Hold the front of the bicycle.</para>
    </proceduralStep>
    <proceduralStep>
    <para>Use the toolset to disengage the fork from the chainring by
    pushing the wheel forwards and down.</para>
    </proceduralStep>
    <proceduralStep>
    <para>Lift the wheel away from the frame.</para>
    </proceduralStep>
    <proceduralStep>
    <para>Put the frame on the floor.</para>
    </proceduralStep>