mrn-validation

MRN validation tool for the MCP

License

License

Categories

Categories

Net
GroupId

GroupId

net.maritimeconnectivity.mrn
ArtifactId

ArtifactId

mrn-validation
Last Version

Last Version

0.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

mrn-validation
MRN validation tool for the MCP
Project URL

Project URL

https://maritimeconnectivity.net
Source Code Management

Source Code Management

https://github.com/MaritimeConnectivityPlatform/MRNValidation/tree/master

Download mrn-validation

How to add to project

<!-- https://jarcasting.com/artifacts/net.maritimeconnectivity.mrn/mrn-validation/ -->
<dependency>
    <groupId>net.maritimeconnectivity.mrn</groupId>
    <artifactId>mrn-validation</artifactId>
    <version>0.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/net.maritimeconnectivity.mrn/mrn-validation/
implementation 'net.maritimeconnectivity.mrn:mrn-validation:0.1.0'
// https://jarcasting.com/artifacts/net.maritimeconnectivity.mrn/mrn-validation/
implementation ("net.maritimeconnectivity.mrn:mrn-validation:0.1.0")
'net.maritimeconnectivity.mrn:mrn-validation:jar:0.1.0'
<dependency org="net.maritimeconnectivity.mrn" name="mrn-validation" rev="0.1.0">
  <artifact name="mrn-validation" type="jar" />
</dependency>
@Grapes(
@Grab(group='net.maritimeconnectivity.mrn', module='mrn-validation', version='0.1.0')
)
libraryDependencies += "net.maritimeconnectivity.mrn" % "mrn-validation" % "0.1.0"
[net.maritimeconnectivity.mrn/mrn-validation "0.1.0"]

Dependencies

compile (4)

Group / Artifact Type Version
org.slf4j : slf4j-api jar 1.7.30
org.slf4j : slf4j-simple jar 1.7.30
commons-cli : commons-cli jar 1.4
org.projectlombok : lombok jar 1.18.12

Project Modules

There are no modules declared in this project.

Build Status

MRNValidation

A Java library for MRN validation (registered in the Maven repository: https://mvnrepository.com/artifact/net.maritimeconnectivity.mrn/mrn-validation )

What is MRN?

Maritime Resource Name (MRN)is a naming scheme under Uniform Resource Name (URN) that can uniquely identify any maritime resource on a global scale, hosted by IALA. This implementation is based on the version 1 of MRN proposed by Kasper Nielsen. (https://www.iana.org/assignments/urn-formal/mrn)

How to use

  • Checking MRN compliance
  java -jar target/mrn-validation-0.1.0-SNAPSHOT-jar-with-dependencies.jar --mrn "urn:mrn:mcp:user:granpa:thomas"

Expected result of the command above:

  [main] INFO net.maritimeconnectivity.mrn.Main - PASS: urn:mrn:mcp:user:granpa:thomas is valid.
  • Checking MRN compliance with custom regex
  java -jar target/mrn-validation-0.1.0-SNAPSHOT-jar-with-dependencies.jar --mrn "urn:mrn:mcp:user:granpa:thomas" --regex "^urn:mrn:mcp:(device|org|user|vessel|service|mms):([a-z0-9]([a-z0-9]|-){0,20}[a-z0-9]):((([-._a-z0-9]|~)|%[0-9a-f][0-9a-f]|([!$&'()*+,;=])|:|@)((([-._a-z0-9]|~)|%[0-9a-f][0-9a-f]|([!$&'()*+,;=])|:|@)|/)*)$"

Expected result of the command above:

  [main] INFO net.maritimeconnectivity.mrn.Main - PASS: urn:mrn:mcp:user:granpa:thomas is valid.
  • Checking MCP MRN compliance
  java -jar target/mrn-validation-0.1.0-SNAPSHOT-jar-with-dependencies.jar --mrn "urn:mrn:mcp:user:granpa:thomas" --mcp

Expected result of the command above:

  [main] INFO net.maritimeconnectivity.mrn.Main - PASS: urn:mrn:mcp:user:granpa:thomas is valid as an MCP MRN.

Build

In the root folder of the repository,

  mvn clean install

Prerequisite

The MRN validation of this implementation is based on the regular expression (REGEX), which can be obtained from a MRN syntax through several steps. In the example with the official MRN syntax,

  <MRN>   ::= "urn" ":" "mrn" ":" <OID> ":" <OSS>
              [ rq-components ]
              [ "#" f-component ]
  <OID>   ::= (alphanum) 0*20(alphanum / "-") (alphanum) ; Organization ID
  <OSS>   ::= <OSNID> ":" <OSNS> ; Organization-specific string
  <OSNID> ::= (alphanum) 0*32(alphanum / "-") (alphanum) ; Organization-specific namespace ID
  <OSNS>  ::= pchar *(pchar / "/") ; Organization-specific namespace string

This could be converted to the pure Augmented Backus–Naur form (ABNF) as below:

mrn = "urn" ":" "mrn" ":" oid ":" oss [rq-components] [ "#" f-component ]
oid = (alphanum) 0*20((alphanum) / "-") (alphanum) ; Organization ID
oss = osnid ":" osns ; Organization-specific string
osnid = (alphanum) 0*20((alphanum) / "-") (alphanum) ; Organization-specific namespace ID
osns = pchar *(pchar / "/") ; Organization-specific namespace string
rq-components = [ "?+" r-component ][ "?=" q-component ] ; rfc8141
r-component = pchar *( pchar / "/" / "?" ) ; rfc8141
q-component = pchar *( pchar / "/" / "?" ) ; rfc8141
f-component   = fragment ; rfc8141
fragment = *( pchar / "/" / "?" ) ; ; rfc3986
alphanum = ALPHA / DIGIT ; rfc3986
pchar = unreserved / pct-encoded / sub-delims / ":" / "@" ; rfc3986
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" ; rfc3986
pct-encoded = "%" HEXDIG HEXDIG ; rfc3986
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" ; rfc3986

You can practice the generation of valid ABNF and corresponding REGEX by online tools, for example: https://abnf.msweet.org/.

The corresponding raw REGEX of the MRN syntax is:

mrn: ^[Uu][Rr][Nn]\:[Mm][Rr][Nn]\:([A-Za-z0-9]([A-Za-z0-9]|\-){0,20}[A-Za-z0-9])\:([A-Za-z0-9][-A-Za-z0-9]{0,20}[A-Za-z0-9])\:((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)|/)*)((\?\+((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)|/|\?)*))?(\?\=((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)|/|\?)*))?)?(#(((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|(\!|\$|&|'|\(|\)|\*|\+|,|;|\=)|\:|@)|/|\?)*))?$

You can also practice with REGEX and the MRN complying with it by online tools, for example: https://regex101.com/.

Motivation

MRN validation has been motivated for MRNs in Maritime Connectivity Platform (MCP).

net.maritimeconnectivity.mrn

Maritime Connectivity Platform

A communication framework enabling efficient, secure, reliable and seamless electronic information exchange between maritime stakeholders.

Versions

Version
0.1.0