Executive Summary


What is Object Oriented Internet

In this project, C# deliverables supporting a new Machine To Machine (M2M) communication approach based on the Data-Oriented Architecture (DOA) paradigm is to be researched. The goal is to provide a generic solution for publishing and updating information in a context that can be used to describe and discover it by software applications. It is implemented based on the OPC Unified Architecture - an industrial integration standard that fulfills the proposed architecture requirements.

The Object Oriented Internet article published in Proceedings of the Federated Conference on Computer Science and Information Systems captures description of this idea.

Go To



latest release


the ebook Object Oriented Internet contains description of this project - it is auto-generated content gathered from *.md files from this repository.

Join the chat at https://gitter.im/mpostol/OPC-UA-OOI

join the project chat


you can cite all versions by using the DOI 10.5281/zenodo.1198852. This DOI represents all versions, and will always resolve to the latest one.

Note: the DOI number is a unique identifying number associated with the repository version. Visit the section How to cite the software and associated documentation files to learn how to create derived works and cite the origin.


OPC, OPC UA, M2M communication, Client-Server, Publisher-Subscriber, Data Oriented Architecture, DOA, AMQP, MQTT, PubSub, OPC UA PubSub, Semantic-Data, Industry 4.0, I4.0, Internet Of Things, IoT, IIoT, Global Data Discovery, Security


We use Semantic Versioning for versioning. For the versions available, see the releases on this repository. For your convenience, the versions of the repository, tools and NuGet packages has been listed in the next subsections.







Semantic-Data ModelDesign Export 5.1.0


Jul 21, 2019


Updated the UA Address Space build against OPC UA Specification 1.04; updated UANodeSet schema; added export to ModelDesign OPC UA Address Space Prototyping


Apr 11, 2019


.NET Standard implementation, documentation improved, new code help documentation available, tested against Xamarin.Android


Feb 1, 2019


New version of the UAOOI.Networking.ReferenceApplication, documentation has been improved.


Jun 17, 2018


DOI creation for the publication purpose.


Mar 14, 2018


The table below lists the latest versions of the published Tools.

NuGet packages

The table below lists the latest versions of the published NuGet packages.






This library provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment.)



The library contains a shared interfaces for server configuration which OPC UA applications can reference. The library provides an abstraction over any OPC UA Server configuration plug-in. Using the library allows an application to indirectly access the server configuration attributes without relying on hard references. The hope is that using this library, third-party applications and frameworks can begin to leverage server configuration management without tying themselves down to a specific implementation.



OPC UA Object Oriented Internet (UAOOI) DataBindings library is dedicated to create a plug-in aimed at editing of the configuration of any application based on OPC UA Information Model. It allows also to add data binding to the configuration.



OPC UA Object Oriented Internet (UAOOI) UAOOI.Configuration.Networking library is dedicated to create a plug-in aimed at provisioning configuration of any application based on OPC UA Information Model.



The core functionality of Semantic-Data reactive networking library based on OPC UA Part 14 Pub/Sub.



This package provides functionality to lookup a dictionary containing value converters. The interface is used for late binding to inject dependency on the external library. This library provides IEncodingFactory functionality limited to encoding simple data types only for the testing purpose only.



SemanticData Reactive Networking library based on OPC UA Part 14 Pub/Sub.



OOI Reactive Networking: UDP IMessageHandlerFactory Implementation



OPC UA Information Model Factory Library



This project supports validation of the OPC UA Address Space captured in the XML file against the OPC UA Specification. It is assumed that the Address Space is represented as an XML file compliant with the NodeSet schema. This library is dedicated to creating a plug-in aimed at importing models based on the OPC UA Information Model. It is part of the project supporting OPC UA Object Oriented Internet paradigm.



This library provides an implementation of the export functionality of an XML file compliant with the UAModelDeign schema. By design, the UAModelDeign schema describes the syntax of an XML document representing the OPC UA Information Model.

UAOOI.SemanticData.BuildingErrorsHandling|5.1.0|It provides descriptions of building errors to be used for OPC UA Address Space consistency validation purpose.|



The repository workspace are organized as it is illustrated in the Figure below.

Figure 1. Packages relationship

Next sections describe the content of the packages in the repository. The packages are loosely coupled. Each package contains applications (tools), libraries, and unit tests. All common resources are collected in the CommonResources.


This workspace provides API for common infrastructure management functionality aimed at Object Oriented Internet application deployment.


This workspace is aimed at implementing an editor of the OOI Reactive Application configuration file. It contains types that supports the configuration management of application implementing the paradigm described in Semantic-Data Processing Architecture. The configuration may be read to or write from the xml or json files. By design this library may be used to support variety kinds of applications at design and run time. It supports also the data binding mechanism to define how the process data relate to the real world.


This workspace contains libraries and tools to find the data over the network. In the proposed approach the URI of the OPC UA Information Model is to be used as a unique key to browse the Global Data Discovery System (GDDS ֠an expanded version of GDS) to find recursively the destination OPC UA Server or UA Data Application exposing the requested data.

To get more details visit the section Global Data Discovery


This workspace contains library empowering the Industrial Internet of Things (IIoT) and Industry 4.0. as the result of using reactive networking paradigm. Intentionally it is designed on top of OPC UA Part 14 Pub/Sub protocol supporting interoperability with any product compliant with this specification. Seamless integration with AMQP, MQTT, etc. allows meaningful data transfer in the context of semantics defined using OPC UA Information Model.

To get more details visit the section Internet of Things (IoT) Communication



The SemanticData folder contains projects related to support the OOI Semantic-Data Processing Architecture. Processing of the OPC UA Data Outside of the Server context is based on the Semantic-Data concept. This project is aimed to workout deliverables supporting Process Data handling over Internet including but not limiting to:

Project AddressSpaceComplianceTestTool

It is command line application aimed to validate XML files compliant with the UANodeSet schema defined in Part 6 of the OPC UA Specification. The description of this schema is captured in the document Address Space Interchange XML

Project UANodeSetValidation

The UANodeSetValidation project is a library aimed at validate UANodeSet xml files.

To validate a new model add the code to the USNodeSetValidationUnitTestProject and XML file to the XMLModels in this project. If the validation test does not recognize an error the code in the UANodeSetValidation must be improved.

In this case add issue or modify the code on your fork and add pull request after finishing.

Public API: The public API for this project is defined by the interface:

  • IAddressSpaceContext

This interface may be used for dependency injection where validation of the input data conforming to the UANodeSet schema is processed.

Project InformationModelFactory

The project is dedicated to develop the OPC UA Information Model Factory Library. It is a library used as the dependency injection to produce OPC UA Information Model by a selected importer. The abstract API must be implemented by a classes providing functionality of Information Model creation.

Detailed description is covered by the document InformationModelFactory Library

How to cite the software and associated documentation files

To be compliant with the license of the repository the below copyright notice shall be included in all copies or substantial portions of the software and associated documentation files (the "Software").

Copyright (c) 2019 Mariusz Postol

In this section, you will learn how to cite the "Software" using the DOI number. A DOI number is a unique identifying number for the Software version. Because this repository has a DOI, use the DOI in your citation for the article or any derived work, like this:

Mariusz Postol, Object Oriented Internet: [Target Part Name], https://github.com/mpostol/OPC-UA-OOI, [year] DOI: 10.5281/zenodo.1198852.


Mariusz Postol, Object Oriented Internet: [Target Part Name], https://github.com/mpostol/OPC-UA-OOI, [year] DOI: http://doi.org/10.5281/zenodo.1198852.

Replace [year] with the current year and [Target Part Name] with the name (or names) of the files you are referring to.


I hope it is a good place to prototype and converge the OPC UA communication technology with Semantic-Data, Industry 4.0, Internet Of Things, Data Oriented Architecture, Plug and Play, Global Data Discovery, Selective Availability, etc. concepts. My goal is to bridge a gap between OPC UA technology and Industrial IT Application Domains.

The presented approach is a real proposal for a new technology wave based on the existing Internet infrastructure because it allows vendors to provide generic off-the-shelf products tested independently for interoperability.

Read more