DNV naming rule
ISO 19848 defines LocalID as a unique and standard identification of each sensor or data channel onboard a given ship. The "dnv-v2" naming rule defines how such a LocalID can be generated using Reference libraries and associated codebooks. The reason for using the version suffix "v2" is to distinguish it from the first version of the naming rule "dnvgl-vis" presented in the initial publication of ISO 19848 in 2018.
The reference library used in the "dnv-v2" naming rule is "vis", i.e. the Vessel Information Structures,DNV’s information model used for ship classification.

Selection of PrimaryItem and SecondaryItem
In the "dnv-v2" naming rule. the basis for the sensor name is to select one (or two) suitable item(s) or node in the Gmod tree of VIS, the first one, <PrimaryItem>, is mandatory and the second one, <SecondaryItem>, is optional.
<PrimaryItem> is a reference to the node in the Gmod hierarchy describing the function or product on board the ship that the data channel is assigned to or associated with. <PrimaryItem> is represented by an <ItemPath>. Normally, this would be the function or product on which measurements are performed, i.e. the monitored item.
For example, if a sensor is monitoring some quantity of the crankshaft in a propulsion engine, then the crankshaft is selected as <PrimaryItem> and the naming rule requires the path reference "411.1/C101.41/C465" to be included in the Local ID (sensor name). The "dnv-v2" naming rule also offers a verbose option which will retrieve the Common Names for the relevant functions in VIS codes. In case of selecting the verbose option "411.1/C101.41/C465/~propulsion.engine/~crankshaft" will be included in the Local ID string. Note that "verbose" is just an optional extension to improve readability for humans. It is not part pf the unique Local ID and shall ignored by URI parsers.
In some cases, the data channel is not adequately described by the <PrimaryItem>. Therefore, it is possible to add an optional second reference to another node in the Gmod hierarchy, <SecondaryItem>, describing another function or product on board the ship, which also is associated with data channel.
Example: Consider a sensor measuring cooling water temperature at cylinder 5 in the propulsion engine. The monitored item is the cooling system of the propulsion engine, since the sensor is measuring temperature of the cooling water. The cooling system is represented in <LocalId> as /411.1/C101.63/S206. In this case it is appropriate to use <SecondaryItem> to specify that cylinder 5 (/411.1/C101.3i-5) is the location of the measurement. The <LocalId> would then contain the following string: /411.1/C101.63/S206/sec/411.1/C101.3i-5. The key word "/sec" is used to separate the PrimaryItem and SecondaryItem in the VIS Item path string.
Selection of meta tags
The selection of PrimaryItem and optionally SecondaryItem, is not sufficient to create a unique sensor name, as the VIS Gmod only describes functions and products on board, but nothing about the sensor itself. One may also have multiple sensors associated with the same function or product i.e. the same item in Gmod hierarchy. To be able to distinguish between such sensors, the dnv-v2 naming rule defines eight meta tags serving as sensor descriptors providing the means for creating unique LocalID. The metadata tags are optional but at least one shall be used. A metadata tag consists of a name and value. The allowed tag names and their meaning are listed below:
- "qty" (quantity): describes the physical quantity associated with the data channel. Quantity is used in a broad sense which includes any kind of measurement relevant for ships and their operation. The provided codebook is a superset of the quantities in ISO 80000 with additional quantities relevant for the maritime context. Examples: pressure, temperature, heading, speed.over.ground.
- "cnt" (content): describes a substance of which a property is measured. The tag "cnt" is an abbreviation for "contents" as it typically is a substance (e.g. liquid or gas) that is contained within the relevant VIS item such as a tank or piping system. Examples: exhaust.gas, fuel.oil, sea.water.
- "calc" (calculation): describes different calculations that may be applied to a measurement, e.g. time-based aggregation or averaging across several signals. This tag may be omitted for data channels which contain instantaneous (i.e. not aggregated) measurement values. Examples: mean, maximum, sum, first.
- "state": describes data channels which contain binary or categorical data rather than measurements of physical quantities. Examples: opened, closed, running, not.running, on.off, failed.
- "cmd" (command): describes data channels containing commands, for example an instruction to a system to enter a specific state. A command is often a consequence of a state, e.g. a system may be commanded to stop due to a measurement exceeding a certain threshold. Examples: start, stop, shut.down, slow.down.
- "type": describes type of data source. This tag shall be omitted if the source of data is a sensor signal. Examples: set.point, manual.input, control.output
- "pos" (position): describes a relative position of the sensor on the function/product where it is installed (as opposed to <Location> which describes position of the function/product itself on board the vessel). This tag is useful to differentiate between multiple sensors on the same function/product. In addition to the values in the provided codebook, digits are also considered standard values (i.e. they may be used with the hyphen-syntax as in /pos-2). Examples: inlet, outlet, upper, lower, 2.
- "detail": a free text used to provide additional important information about the sensor which is not conveyed by the other elements of Local ID, or to assure uniqueness of the Local ID. Examples: xyz567, at15degrees. To facilitate consistency and automatic validation DNV provides codebooks with standard values for all tags (except the "detail" tag, which has a free text value) at data.dnv.com. However, for flexibility and to cover all possible use cases, there is also a need for custom tag values. Therefor two syntaxes are supported; for standard values the tag name and tag value separated by a hyphen ("-") and for custom values the tag name and tag value separated by a tilde ("~"). The first (standard) syntax signals that the value should be validated against a codebook. The second (custom) syntax signals that the tag value is custom and should not be validated. Example: "/cnt-marine.gas.oil" and /cnt~orange.juice.
Compiling the Local ID
The selection of PrimaryItem and optionally a SecondaryItem produces a “VIS Item path”. The determination of one more meta tags describing the sensors produces a “Tag Elements” string. These strings are combined to form the Local ID.
The key word “/meta” is introduced to separate the “VIS Item path” and the “Tag Elements” string, to enable parsers to decompose the combined string. Some examples are provided below.
| Example 1 | Pressure sensor in the propulsion engine fuel oil pump |
|---|---|
| VIS Item path | /621.22i/S110/sec/411.1/C101 |
| <TagElement>s | /meta/qty-pressure/cnt-fuel.oil |
| LocalID | /dnv-v2/vis-3-4a/621.22i/S110/sec/411.1/C101/meta/qty-pressure/cnt-fuel.oil |
| Example 2 | Temperature of exhaust gas at the inlet of the propulsion engine’s second turbocharger |
|---|---|
| VIS Item path | 411.1/C101.65/S210/sec/411.1/ C101.663i-2/C663 |
| <TagElement>s | /meta/qty-temperature/cnt-exhaust.gas/pos-inlet |
| LocalID | /dnv-v2/vis-3-4a/411.1/C101.65/S210/sec/411.1/C101.663-2/C663/meta/qty-temperature/cnt-exhaust.gas/pos-inlet |
| Example 3 | Running indicator (binary value) for the third generator set (auxiliary generator) |
|---|---|
| VIS Item path | 511.11-3/C101 |
| <TagElement>s | /meta/state-running |
| LocalID | /dnv-v2/vis-3-4a/511.11-3/C101/meta/state-running |
ABNF notation
The complete syntax of the "dnv-v2" naming rule is defined below using ABNF. Additional explanations and examples are provided in ISO 19848 Annex C and the [PDF]guideline document. Quick guide on how to read ABNF:
- Semicolon (;) starts a comment that continues to the end of line.
- Elements enclosed in quotation marks should be used as is in channel id.
- Elements enclosed in square brackets are optional.
- Elements separated by a forward slash (/) are alternatives.
- Asterisk (*) means that the following element may be used zero or more times.
- 1* means that the following element must be used one or more times.
; Overall syntax defined by ISO 19848
UniversalID = [protocol] "//" NamingEntity ShipID LocalID
LocalID = NamingRule LocalDataName
NamingEntity = "data.dnv.com"
; Note: Subject to agreement and conformance with the “dnv-v2” naming rule,
; different URLs may be used as NamingEntity.
; NamingRule> defines the rules for composing the <LocalDataName>.
NamingRule = "/" NamingRuleIdentifier "-" NamingRuleVersion ; here: /dnv-v2
NamingRuleIdentifier = "dnv"
NamingRuleVersion = "v2"
; Syntax specific to naming rule /dnv-v2
LocalDataName = VISElement PrimaryItem ["/sec" SecondaryItem] [Description]
"/meta" 1*TagElement
; <VISElement> identifies the version of VIS used to compose<ItemPath>
; and <Description>.
VISElement = "/vis-" VISRelease
; <PrimaryItem> describes an item (function or product) on board a ship that the
; data channel is assigned to or associated with. The <PrimaryItem> is considered
; the primary reference to Gmod, and is normally the item being monitored by the
; data channel.
PrimaryItem = ItemPath
; <SecondaryItem> describes another item (function or product) on board a ship
; that is also related to the data channel. <SecondaryItem> provides additional
; description and can be used to disambiguate the <PrimaryItem> if there are
; multiple items of the same kind as <PrimaryItem>. Normally, <SecondaryItem> is
; an item being served by the <PrimaryItem>. <SecondaryItem> can not be an
; ancestor of the <PrimaryItem> in the Gmod hierarchy.
SecondaryItem = ItemPath
; <ItemPath> is a reference to an item (function or product) in the
; Gmod hierarchy.
ItemPath = 1*FunctionElement [ProductElement]
FunctionElement = "/" FunctionCode ["-" Location]
ProductElement = "/" ProductCode
; <Description> provides a human readable description of the
; <PrimaryItem> and the <SecondaryItem>.
; NOTE: <Description> must be removed from a normalized channel ID.
Description = 1*("/~" *Unreserved)
; <TagElement>s provide additional information about the data channel.
; A tag may have a standardized value from a codebook or a custom value.
TagElement = "/" Tag (("-" CodebookValue) / ("~" CustomValue))
Tag = "qty" / "cnt" / "calc" / "state" / "cmd" / “type” / "pos" /
"detail"
CodebookValue = 1*Unreserved
CustomValue = 1*Unreserved
; Valid values for the following elements are specified in VIS:
VISRelease = 1*Unreserved
ProductCode = ALPHA 1*DIGIT
FunctionCode = ((ProductCode ".") / DIGIT) 1*(ALPHA DIGIT ".")
Location = 1*Unreserved
; Unreserved characters as per RFC 3986 Unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"