Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

SDKs and tools relating to DNVs Vessel Information Structure (VIS), ISO 19847, ISO 19848 standards

License

Notifications You must be signed in to change notification settings

dnv-opensource/vista-sdk

Repository files navigation

GitHub Workflow Status GitHub Workflow Status GitHub Workflow Status GitHub
SDK NuGet current SDK NuGet prerelease
SDK NPM current SDK NPM preview
PyPI current

Vista SDK

The Vista team at DNV are working on tooling related to

  • DNV Vessel Information Structure (VIS)
  • ISO 19847 - Ships and marine technology — Shipboard data servers to share field data at sea
  • ISO 19848 - Ships and marine technology — Standard data for shipboard machinery and equipment

In this repository we codify the rules and principles of VIS and related ISO-standards to enable and support users and implementers of the standards.

Our plan is to develop SDKs for some of the most common platforms. We are starting with .NET, Python and JavaScript. We will be developing these SDKs as open source projects. Feel free to provide input, request changes or make contributions by creating issues in this repository.

For general documentation relating to VIS and related standards, see docs.vista.dnv.com.

🎯 What Problem Does This Solve?

ISO 19848 defines a standard for identifying and describing sensor and event data channels on ships. It enables interoperability between different systems and stakeholders by providing:

  • Standardized naming conventions - A structured way to identify what each data channel measures (e.g., "main engine cylinder 1 exhaust gas temperature at outlet")
  • Standardized data formats - Common structures for exchanging data channel metadata (DataChannelList) and measurements (TimeSeriesData)

The Vista SDK implements the concepts defined in ISO 19848 and its Annex C ("dnv-v2" naming rule), providing tools to:

  • Parse standardized identifiers - Validate and extract structured information from Local IDs and Universal IDs received from other systems
  • Build standardized identifiers - Construct ISO 19848-compliant Local IDs and Universal IDs for your data channels
  • Navigate the GMOD - Traverse the Generic Product Model hierarchy that describes ship functions and components
  • Work with Codebooks - Use the standardized metadata vocabularies (quantity, content, position, state, etc.)
  • Exchange data - Serialize and deserialize ISO 19848 DataChannelList and TimeSeriesData packages

📋 VIS Versions

The SDK supports multiple versions of VIS. Each version includes updated GMOD structures and codebooks.

Versioning notes:

  • The SDK includes only the "a" (annual) releases to avoid excessive versioning churn
  • A new VIS "a" release is typically published once a year (June)
  • Generally, using the latest version is recommended for new projects
Version Enum Value
VIS 3.4a v3_4a
VIS 3.5a v3_5a
...
VIS 3.9a v3_9a
VIS 3.10a v3_10a (Latest)

Tackling Different VIS Versions

In real-world scenarios, you may receive data using older VIS versions that need to be processed alongside newer versions. The SDK provides versioning utilities that enable on-the-fly upward conversion of GmodPaths and LocalIds between versions, allowing you to normalize data to a common version for consistent processing.

📦 SDK Implementations

We provide SDKs for the most common platforms. Each implementation has its own detailed README with installation instructions, quick start guides, and API documentation:

Platform Package Implementation
C#/.NET NuGet csharp/
JavaScript/TypeScript NPM js/
Python PyPI python/

Quick Installation

# C#/.NET
dotnet add package DNV.Vista.SDK

# JavaScript/TypeScript
npm install dnv-vista-sdk

# Python
pip install vista-sdk

📁 Repository Structure

📦vista-sdk
 ┣ 📂resources          # VIS data files (GMOD, Codebooks)
 ┃ ┣ 📜codebooks-vis-*.json.gz
 ┃ ┣ 📜gmod-vis-*.json.gz
 ┃ ┗ 📜gmod-vis-versioning-*.json.gz
 ┣ 📂schemas            # JSON/XML schemas for ISO standards
 ┃ ┣ 📂json
 ┃ ┃ ┣ 📜DataChannelList.schema.json
 ┃ ┃ ┗ 📜TimeSeriesData.schema.json
 ┃ ┗ 📂xml
 ┣ 📂csharp             # C#/.NET SDK
 ┣ 📂js                 # JavaScript/TypeScript SDK
 ┣ 📂python             # Python SDK
 ┣ 📂testdata           # Shared test data
 ┣ 📜LICENSE
 ┗ 📜README.md

🧩 SDK Outline

This section outlines the various components and modules in our SDKs.

Component Description C# JS Python
Gmod Generic product model
Pmod* Asset-specific product model (JS only for now)
Codebooks Metadata tags
Locations Physical positioning
GmodPath Versioning Path conversion between VIS versions
Local ID & Universal ID Standardized sensor identification
DataChannelList ISO 19848 data channel definitions
TimeSeriesData ISO 19848 event and timeseries data

* The naming "Pmod" (Product Model) is inspired by DNV class terminology where it refers to asset-specific class information model. In the Vista SDK, Pmod represents a subset of Gmod built from GmodPaths or LocalIds, which can originate from any source—not limited to class-specific data.

For more information on these concepts, check out docs.vista.dnv.com.

🔧 API Patterns

All SDKs follow consistent design patterns:

Immutability

Domain models are immutable. Builder APIs construct new instances while preserving unmodified data.

Builder Pattern

// C# Example
builder = Create(intro)
    .WithSomeValue(value)         // Throws on invalid input
    .TryWithOtherValue(value)     // Only apply valid changes
    .WithoutThirdValue()          // Removes component
  • With* - Use when operation is expected to succeed; throws on invalid input
  • TryWith* - Use for safe operations; only applies valid changes
  • Without* - Removes specific components from the builder

📊 ISO 19848 Transport Packages

Part of the ISO 19848/19847 standards is the definition of data structures used for communicating and sharing sensor data:

  • DataChannelList - Defines the data channels available on a ship
  • TimeSeriesData - Contains the actual measurement data and events

Note that while compression isn't explicitly mentioned in these standards, the standards don't prohibit use of compression when implementing them, as long as the data structures remain the same.

Schemas

The ISO 19848/19847 standards define XML and JSON schemas for transport packages:

📈 Benchmarks

We are developing benchmarks to track the performance characteristics of the libraries. See the respective implementations for details on methodology and results, including comparisons of JSON vs binary encodings and compression options.

🤝 Contributing

We welcome contributions! Feel free to:

  • Create issues for bugs or feature requests
  • Submit pull requests
  • Provide feedback on API design

See the individual SDK READMEs for development setup instructions.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🔗 Links

About

SDKs and tools relating to DNVs Vessel Information Structure (VIS), ISO 19847, ISO 19848 standards

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 8