Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

describe all IdentifierSystems relevant for Trade and Logistics #944

Closed
VladimirAlexiev opened this issue Mar 12, 2024 · 4 comments
Closed
Labels
1.0 version 1.0

Comments

@VladimirAlexiev
Copy link
Contributor

(Split from #571)
@mkhraisha @nissimsan @rhofvendahl @brownoxford @OR13

I will outline below several ways of capturing identifiers, going from bad to good.
Look at the last way:
I think the Traceability project will add a lot of value if it collects a global register of identifier systems used in trade and logistics

Ambiguous String

This is terrible since it gives no clue about the nature of the identifier:

<naturalGasProduct/1> a :NaturalGasProduct; 
  :identifier "80123456", "56190358290187694", "123456", "56109258249087".

String With Prefix

This is better but it requires a human to google for the different prefixes, and hope to find the correct ones:

<naturalGasProduct/1> a :NaturalGasProduct; 
  :identifier "HSCode:80123456", "GTIN:56190358290187694", "UWI:123456", "GLN:56109258249087".

Structured Value With Prefix

This clearly separates the identifier kind from the identifier value, but still doesn't describe the kind unambiguously.

<naturalGasProduct/1> a :NaturalGasProduct; 
  :identifier <naturalGasProduct/1/id/1>, <naturalGasProduct/1/id/2>, <naturalGasProduct/1/id/3>, <naturalGasProduct/1/id/4>.

<naturalGasProduct/1/id/1> a :PropertyValue; :propertyID "HSCode"; :value "80123456".
<naturalGasProduct/1/id/2> a :PropertyValue; :propertyID "GTIN"; :value "56190358290187694".
<naturalGasProduct/1/id/3> a :PropertyValue; :propertyID "UWI"; :value "123456".
<naturalGasProduct/1/id/4> a :PropertyValue; :propertyID "GLN"; :value "56109258249087".

Structured Value With Structured Kind

This describes the identifier kind unambiguously and provides linked data about it. It is definitely the best approach.

  • Following euBusinessGraph (ebg:IdentifierSystem), I use the same class name.
  • You will notice I use s:identifier for the abbreviation and s:name for the full name of the identifier system.
  • Wikidata, being a hotbed of authority coreferencing, is a great source of identifiers.
  • So in this linked data I've added Wikidata prop; links to various sites providing information; and a general topical classification.
@prefix tr: <https://w3id.org/traceability/>.

<naturalGasProduct/1> a :NaturalGasProduct; 
  :identifier <naturalGasProduct/1/id/HScode>, <naturalGasProduct/1/id/GTIN>, <naturalGasProduct/1/id/UWI>, <naturalGasProduct/1/id/GLN>.

<naturalGasProduct/1/id/HScode> a :PropertyValue; :propertyID <https://w3id.org/traceability/identifier/HSCode>; :value "80123456".
<naturalGasProduct/1/id/GTIN> a :PropertyValue; :propertyID <https://w3id.org/traceability/identifier/GTIN>; :value "56190358290187694".
<naturalGasProduct/1/id/UWI> a :PropertyValue; :propertyID <https://w3id.org/traceability/identifier/UWI>; :value "123456".
<naturalGasProduct/1/id/GLN> a :PropertyValue; :propertyID <https://w3id.org/traceability/identifier/GLN>; :value "56109258249087".

<https://w3id.org/traceability/identifier/HSCode> a tr:IdentifierSystem; 
  s:identifier "HSCode"; 
  s:name"Harmonized System code";
  s:alternateName "Customs Tariff Number";
  rdfs:isDefinedBy <https://www.wcoomd.org/en/topics/nomenclature/instrument-and-tools/hs-nomenclature-2022-edition.aspx>;
  s:creator <https://www.wcoomd.org>;
  rdfs:seeAlso
   <https://www.tariffnumber.com/>, 
   <https://www.trade.gov/harmonized-system-hs-codes>,
   <https://www.foreign-trade.com/reference/hscode.htm>,
   <https://trade.ec.europa.eu/access-to-markets/en/content/harmonised-system-0>.
  tr:wikidata <https://www.wikidata.org/wiki/Property:P5471>;
  s:classification <https://w3id.org/traceability/identifier/customs>.

<https://w3id.org/traceability/identifier/GTIN> a tr:IdentifierSystem; 
  s:identifier "GTIN"; 
  s:name "Global Trade Item Number";
  rdfs:isDefinedBy <https://www.gs1.org/standards/id-keys/gtin>;
  s:creator <https://www.gs1.org>;
  rdfs:seeAlso
    <https://en.wikipedia.org/wiki/Global_Trade_Item_Number>,
    <https://www.gtin.info/>,
    <https://www.gs1uk.org/support-and-training/frequently-asked-questions/what-is-a-gtin>.
  tr:wikidata <https://www.wikidata.org/wiki/Property:P3962>;
  s:classification <https://w3id.org/traceability/identifier/trade>.

<https://w3id.org/traceability/identifier/GLN> a tr:IdentifierSystem; 
  s:identifier "GLN"; 
  s:name "Global Location Number";
  rdfs:isDefinedBy <https://www.gs1.org/standards/id-keys/gln>;
  s:creator <https://www.gs1.org>;
  rdfs:seeAlso
    <https://en.wikipedia.org/wiki/Global_Location_Number>,
    <https://edicomgroup.com/learning-center/gs1/gln>,
    <http://naesb.org/misc/GLN_intro_0612.pdf>,
    <https://internationalbarcodes.com/gln-numbers/>.
  tr:wikidata <https://www.wikidata.org/wiki/Property:P9860>;
  s:classification <https://w3id.org/traceability/identifier/trade>.

<https://w3id.org/traceability/identifier/UWI> a tr:IdentifierSystem; 
  s:identifier "UWI"; 
  s:name "Unique Well Identifier";
  s:alternateName "API number";
  rdfs:isDefinedBy <https://ppdm.org/ppdm/PPDM/IEDS/Well_Identification/PPDM/Well_Identification.aspx>;
  s:creator <https://ppdm.org>;
  rdfs:seeAlso
    <https://en.wikipedia.org/wiki/API_well_number>,
    <https://blog.welldatabase.com/blog/history-of-the-api-number>,
    <https://www.enverus.com/blog/api-number-dead-long-live-us-well-number/>,
    <https://310sign.ca/blog/what-is-a-uwi-unique-well-identifier.html>,
    <https://esd.halliburton.com/support/LSM/Drilling/EDMEDTSuite/OpenWells/5000/5000_1/Help/The_Well_Explorer/UWI/DLS_System.htm>,
    <https://static.aer.ca/prd/documents/applications/UWI-Description.pdf>,
    <https://www.bc-er.ca/files/application-manuals/Oil-and-Gas-Activity-Application-Manual/Supporting-Documents/uniquewellidentifierformat.pdf>,
    <https://www.manitoba.ca/iem/petroleum/reports/uwi.html>,
    <https://seabed.software.slb.com/well/WebHelp/Well_files/Well5.htm>,
    <https://albertawellfinder.com/uwi>;
  tr:wikidata <https://www.wikidata.org/wiki/Q4653323>;
  s:classification <https://w3id.org/traceability/identifier/oilAndGas>.
@VladimirAlexiev
Copy link
Contributor Author

Eg look at

usPortCode:
title: US CBP Port Code
description: CBP Automated Manifest Interface Requirements, Appendix E - Schedule D – U.S. CBP Port Codes. 4 character port code (https://www.cbp.gov/sites/default/files/assets/documents/2020-Jan/ACE%20Appendix%20E%20Schedule%20D%20January%202020%20(1).pdf).
type: string
$linkedData:
term: usPortCode
'@id': https://w3id.org/traceability#usPortCode

It has a lot of details jumbled into one string. More importantly, these details are in JSON schema but not in Linked Data!
It can be better described as follows (I've added couple of schema descriptive props but haven't checked that they actually exist!)

If you want to switch to structured identifiers:

<https://w3id.org/traceability/identifier/US/CBP/Port> a tr:IdentifierSystem;
  s:identifier "US/CBP/Port";
  s:name "US CBP Port Code";
  s:description "United States Customs and Border Protection: Port Code";
  skos:definition "CBP Automated Manifest Interface Requirements, Appendix E - Schedule D – U.S. CBP Port Codes. 4 character port code";
  s:creator <https://www.cbp.gov>;
  rdfs:isDefinedBy <https://www.cbp.gov/sites/default/files/assets/documents/2020-Jan/ACE%20Appendix%20E%20Schedule%20D%20January%202020%20(1).pdf>;
  rdfs:seeAlso <https://www.cbp.gov/about/contact/ports>;
  s:classification <https://w3id.org/traceability/identifier/customs>;
  s:country <https://w3id.org/traceability/country/US>.

If you want to continue using distinct properties for each identifier:

tr:usPortCode a rdf:Property, owl:DataProperty;
  rdfs:subPropertyOf s:identifier;
  rdfs:label "US CBP Port Code";
  rdfs:comment "United States Customs and Border Protection: Port Code";
  skos:definition "CBP Automated Manifest Interface Requirements, Appendix E - Schedule D – U.S. CBP Port Codes. 4 character port code";
  s:creator <https://www.cbp.gov>;
  rdfs:isDefinedBy <https://www.cbp.gov/sites/default/files/assets/documents/2020-Jan/ACE%20Appendix%20E%20Schedule%20D%20January%202020%20(1).pdf)>;
  rdfs:seeAlso <https://www.cbp.gov/about/contact/ports>;
  s:classification <https://w3id.org/traceability/identifier/customs>;
  s:country https://w3id.org/traceability/country/US>.

@OR13
Copy link
Collaborator

OR13 commented Mar 12, 2024

Agree with your comments.

@mkhraisha
Copy link
Collaborator

Agreed with your comments in general, this looks like a very useful change.

@mkhraisha mkhraisha added the 1.0 version 1.0 label Jul 11, 2024
@mkhraisha
Copy link
Collaborator

Closing as #571 has the action item that will resolve this issue, the solution we'll use is Structured Value With Prefix as outlined in
#944 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1.0 version 1.0
Projects
None yet
Development

No branches or pull requests

3 participants