<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns="http://www.rfc-editor.org/rfcxml"
     version="3"
     category="info"
     submissionType="independent"
     ipr="trust200902"
     docName="draft-gs1-urn-00"
     sortRefs="true"
     symRefs="true"
     tocInclude="true">
  <front>
    <title>A Uniform Resource Name (URN) Namespace for GS1</title>
    <seriesInfo name="Internet-Draft" value="draft-gs1-urn-00"/>
    <author fullname="GS1 Global Office">
      <organization>GS1 Global Office</organization>
      <address>
        <postal>
          <street>Avenue Louise 326</street>
          <city>Brussels</city>
          <code>1050</code>
          <country>Belgium</country>
        </postal>
        <uri>https://www.gs1.org/</uri>
      </address>
    </author>
    <date month="April" year="2026"/>
    <abstract>
      <t>This document describes a Uniform Resource Name (URN) namespace for Global Standards 1 (GS1). The namespace provides stable, unique, and persistent identifiers for GS1 identification keys, GS1 semantic artefacts, and GS1 standards and their components.</t>
      <t>The namespace includes three coordinated branches: an identification branch based on GS1 Application Identifiers (AIs), a semantic dictionary branch rooted at "urn:gs1:gdd:", and a standards branch rooted at "urn:gs1:std:". This document registers the formal URN namespace "gs1", defines its syntax, provides illustrative examples, and includes informative constraints to preserve important GS1 operational realities without overloading the core ABNF.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Global Standards 1 (GS1) is an international standards organisation that develops and maintains standards for identification, data capture, data sharing, and interoperability across supply chains, healthcare, retail, logistics, and digital ecosystems.</t>
      <t>GS1 standards include globally recognised identification keys such as the Global Trade Item Number (GTIN), Global Location Number (GLN), and Serial Shipping Container Code (SSCC). GS1 also maintains semantic artefacts and standards that define business information elements, business data types, code lists, and standard clauses used across multiple industries.</t>
      <t>This document registers the formal URN namespace "gs1" in order to provide stable, globally unique, and persistent identifiers across these domains.</t>
      <ul>
        <li><t>GS1 identification keys and related element strings.</t></li>
        <li><t>GS1 semantic dictionary artefacts.</t></li>
        <li><t>GS1 standards and their components.</t></li>
      </ul>
      <t>The document is intentionally minimalist in scope. It focuses on URN namespace registration, syntax, examples, and validation. Resolver behaviour and OpenAPI details are retained as informative appendices.</t>
    </section>

    <section anchor="registration">
      <name>Namespace Registration Template</name>
      <t>This registration follows the template in RFC 8141, Appendix A.</t>
      <section numbered="false" toc="exclude"><name>Namespace Identifier</name><t>gs1</t></section>
      <section numbered="false" toc="exclude"><name>Registration Information</name><t>Version: 1. Date: 2026-04-23.</t></section>
      <section numbered="false" toc="exclude"><name>Registrant</name><t>GS1 Global Office, Avenue Louise 326, 1050 Brussels, Belgium. URI: https://www.gs1.org/.</t></section>
      <section numbered="false" toc="exclude"><name>Relevant ancillary documentation</name><t>Relevant ancillary documentation includes GS1 General Specifications, GS1 Application Identifiers, GS1 Digital Link Standard, GS1 GDD / GDSN semantic artefact construction rules, GS1 Resolver Standard, and EPC Tag Data Standard.</t></section>
      <section numbered="false" toc="exclude"><name>Community considerations</name><t>The namespace is intended for use by GS1 Member Organisations, solution providers, retailers, healthcare organisations, logistics providers, regulators, standards publishers, and Semantic Web and knowledge graph communities.</t></section>
      <section numbered="false" toc="exclude"><name>Additional information</name><t>Contact: GS1 Global Office. URI: https://www.gs1.org/. Change Controller: GS1 AISBL. Future revisions are controlled through GS1 governance processes and subsequent RFC publication where required.</t></section>
      <section numbered="false" toc="exclude"><name>Revision information</name><t>Version 1. Initial registration.</t></section>
      <section numbered="false" toc="exclude">
        <name>Syntactic structure</name>
        <t>The GS1 URN namespace consists of three coordinated branches.</t>
        <ul>
          <li><t>Identification branch: urn:gs1:&lt;ai&gt;:&lt;value&gt;[:&lt;ai&gt;:&lt;value&gt;...]</t></li>
          <li><t>Semantic dictionary branch: urn:gs1:gdd:bie:&lt;ref&gt;; urn:gs1:gdd:bdt:&lt;type&gt;; urn:gs1:gdd:cl:&lt;list&gt;[:&lt;value&gt;]</t></li>
          <li><t>Standards branch: urn:gs1:std:&lt;standard&gt;[:&lt;version&gt;][:&lt;clause&gt;]</t></li>
        </ul>
        <t>A full ABNF grammar, regular expressions, informative constraints, and illustrative examples are provided in the appendices.</t>
      </section>
      <section numbered="false" toc="exclude"><name>Identifier uniqueness considerations</name><t>Identifier uniqueness is guaranteed through GS1 governance. Identification-key values are governed by GS1 allocation rules, including GS1 Company Prefix governance where applicable. Semantic artefacts and standards references are assigned under GS1-managed governance processes.</t></section>
      <section numbered="false" toc="exclude"><name>Identifier persistence considerations</name><t>Identifiers are never reassigned. Deprecation, withdrawal, replacement of standards, migration of semantic infrastructure, replacement of resolver technologies, or changes to publication formats SHALL NOT invalidate an assigned GS1 URN. The identifier remains valid indefinitely, even where the identified resource becomes obsolete or superseded.</t></section>
      <section numbered="false" toc="exclude"><name>Process of identifier assignment</name><t>Names are granted through GS1 processes. Depending on the branch, assignment is managed by GS1 Global Office, GS1 Member Organisations, or relevant GS1 semantic or standards governance processes.</t></section>
      <section numbered="false" toc="exclude"><name>Process of identifier resolution</name><t>Resolution is optional. URN validity is independent of the existence of any resolver service. Resolver services provide a convenience mechanism for obtaining representations associated with a URN. GS1-authorised resolvers may provide authoritative representations. Example: https://resolver.gs1.org/resolve/[urn], where [urn] is the percent-encoded form of the URN.</t></section>
      <section numbered="false" toc="exclude"><name>Rules for lexical equivalence</name><t>The literals "urn", "gs1", "gdd", "bie", "bdt", "cl" and "std" are case-insensitive. All assigned-value components are case-sensitive unless explicitly defined otherwise by GS1 governance. No Unicode normalisation, percent-decoding, case folding, or semantic interpretation is performed when determining lexical equivalence. Lexical equivalence is determined using RFC 8141 rules combined with the namespace-specific rules defined here.</t></section>
      <section numbered="false" toc="exclude"><name>Conformance with URN syntax</name><t>All GS1 URNs conform to RFC 8141 and the specific ABNF grammar in Appendix A.</t></section>
      <section numbered="false" toc="exclude"><name>Validation mechanism</name><t>Syntax validation may be performed using the ABNF and regular expressions in the appendices. Additional branch-specific semantic validation should be performed using the informative constraints and tables in this document.</t></section>
      <section numbered="false" toc="exclude"><name>Scope</name><t>The namespace is global, covering GS1 identifiers, semantic artefacts, and standards references maintained or governed by GS1.</t></section>
    </section>

    <section anchor="considerations">
      <name>Namespace Considerations</name>
      <t>The "gs1" namespace is required to provide stable identifiers for GS1 artefacts across registries, implementations, APIs, and documentation. It enables persistent referencing, deduplication, caching, standards citation, semantic linkage, and long-lived references in publications and knowledge graphs.</t>
      <t>The namespace design deliberately separates identifiers, semantic artefacts, and standards references because these categories have different governance and syntactic needs. This reduces ambiguity and supports simpler validation and resolution.</t>
      <t>The "urn:gs1:gdd:" branch is preserved as a legacy-compatible semantic namespace. It identifies GS1-governed semantic artefacts independently of any particular implementation platform and remains valid even if the underlying semantic infrastructure evolves.</t>
    </section>


    <section anchor="rfc5134">
      <name>Relationship to RFC 5134</name>
      <t>The GS1 URN namespace defined in this document does not replace, deprecate, or supersede the EPC URN namespace defined by RFC 5134.</t>
      <t>The two namespaces serve complementary purposes within the GS1 standards ecosystem.</t>
      <t>The EPC namespace is specifically designed to support Electronic Product Code (EPC) identification schemes and related EPC architectures. The GS1 namespace defined in this document provides a broader identifier framework covering GS1 identification keys and Application Identifiers, GS1 semantic artefacts, GS1 standards and standards components, and future GS1-governed identifier classes.</t>
      <t>The GS1 namespace therefore addresses categories of resources that are outside the scope of the EPC namespace while preserving compatibility with existing EPC deployments.</t>
      <t>Implementations MAY support mappings between EPC URNs and GS1 URNs where such mappings are defined by GS1 standards or implementation guidance.</t>
      <sourcecode type="text"><![CDATA[urn:epc:id:sgtin:0950600.134352.9999
->
urn:gs1:01:09506000134352:21:9999]]></sourcecode>
      <t>The existence of such mappings does not imply equivalence between the namespaces. Each namespace retains its own syntax, governance model, and resolution semantics.</t>
      <t>The GS1 namespace is intended to complement the EPC namespace by providing a consistent URN framework for the wider set of GS1-managed identifiers, semantic resources, and standards references. Additional illustrative mappings and mapping guidance are provided in Appendix G (EPC and GS1 Mapping).</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>GS1 URNs are opaque identifiers. Security considerations are therefore limited to those common to URNs in general and to the resolver infrastructure used around them.</t>
      <t>Use of non-authoritative resolvers may yield incorrect or outdated results. Resolver services should therefore use HTTPS to provide confidentiality and integrity, and clients should prefer GS1-authorised resolver services where semantic correctness matters.</t>
      <t>This registration does not itself create new security risks in identifiers. However, applications that dereference GS1 URNs should consider normal security issues for HTTP services, including spoofing, stale data, replay, and representation tampering.</t>
      <t>Intellectual property rights associated with identified artefacts are outside the scope of this registration.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the Namespace Identifier "gs1" in the Formal URN Namespace Registry in accordance with RFC 8141. The registration template contained in Section 2 constitutes the formal registration request.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee"/>
          <author initials="R." surname="Fielding" fullname="Roy Fielding"/>
          <author initials="L." surname="Masinter" fullname="Larry Masinter"/>
          <date month="January" year="2005"/>
        </front>
        <seriesInfo name="RFC" value="3986"/>
      </reference>
      <reference anchor="RFC5234">
        <front>
          <title>Augmented BNF for Syntax Specifications: ABNF</title>
          <author initials="D." surname="Crocker" fullname="Dave Crocker"/>
          <author initials="P." surname="Overell" fullname="Paul Overell"/>
          <date month="January" year="2008"/>
        </front>
        <seriesInfo name="RFC" value="5234"/>
      </reference>
      <reference anchor="RFC8141">
        <front>
          <title>Uniform Resource Names (URNs)</title>
          <author initials="P." surname="Saint-Andre" fullname="Peter Saint-Andre"/>
          <author initials="J." surname="Klensin" fullname="John Klensin"/>
          <date month="April" year="2017"/>
        </front>
        <seriesInfo name="RFC" value="8141"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>
      <reference anchor="GS1AI">
        <front>
          <title>GS1 Application Identifiers</title>
          <author fullname="GS1 AISBL"/>
          <date year="2026"/>
        </front>
        <seriesInfo name="URI" value="https://ref.gs1.org/ai/"/>
      </reference>
      <reference anchor="DLURI">
        <front>
          <title>GS1 Digital Link Standard: URI Syntax</title>
          <author fullname="GS1 AISBL"/>
          <date month="March" year="2025"/>
        </front>
        <seriesInfo name="Release" value="1.6.0"/>
        <seriesInfo name="URI" value="https://ref.gs1.org/standards/digital-link/uri-syntax/"/>
      </reference>
      <reference anchor="RESOLVER">
        <front>
          <title>GS1-Conformant Resolver Standard</title>
          <author fullname="GS1 AISBL"/>
          <date month="January" year="2026"/>
        </front>
        <seriesInfo name="Issue" value="1.2.0"/>
        <seriesInfo name="URI" value="https://ref.gs1.org/standards/resolver/"/>
      </reference>
      <reference anchor="RFC5134">
        <front>
          <title>A Uniform Resource Name Namespace for the EPCglobal Electronic Product Code (EPC) and Related Standards</title>
          <author initials="M." surname="Mealling" fullname="Michael Mealling"/>
          <date month="January" year="2008"/>
        </front>
        <seriesInfo name="RFC" value="5134"/>
      </reference>
      <reference anchor="TDS">
        <front>
          <title>EPC Tag Data Standard</title>
          <author fullname="GS1 AISBL"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="GENSPECS">
        <front>
          <title>GS1 General Specifications</title>
          <author fullname="GS1 AISBL"/>
          <date year="2026"/>
        </front>
      </reference>
    </references>

    <section anchor="authors">
      <name>Authors' Addresses</name>
      <t>GS1 Global Office, Avenue Louise 326, 1050 Brussels, Belgium. URI: https://www.gs1.org/.</t>
    </section>

    <section anchor="ack">
      <name>Acknowledgement</name>
      <t>Funding for the RFC Editor function is currently provided by the Internet Society.</t>
    </section>

    <section anchor="app-abnf">
      <name>ABNF Grammar</name>
      <sourcecode type="abnf"><![CDATA[gs1-urn            = urn ":" gs1 ":" ( id-branch / gdd-branch / std-branch )

urn                = %s"urn"
gs1                = %s"gs1"

id-branch          = ai ":" value *( ":" ai ":" value )

gdd-branch         = %s"gdd" ":" ( bie-branch / bdt-branch / cl-branch )
bie-branch         = %s"bie" ":" bie-ref
bdt-branch         = %s"bdt" ":" datatype
cl-branch          = %s"cl" ":" codelist [ ":" code ]

std-branch         = %s"std" ":" std-id [ ":" version ]
                     [ ":" clause ]

ai                 = 2*4DIGIT
value              = 1*( ALPHA / DIGIT / "-" / "_" / "." )

bie-ref            = 1*( ALPHA / DIGIT / "." )
datatype           = 1*( ALPHA / DIGIT )
codelist           = 1*( ALPHA / DIGIT )
code               = 1*( ALPHA / DIGIT / "_" )

std-id             = 1*( ALPHA / DIGIT / "-" )
version            = 1*( DIGIT / "." )
clause             = 1*DIGIT *( "." 1*DIGIT )

ALPHA              = %x41-5A / %x61-7A
DIGIT              = %x30-39]]></sourcecode>
    </section>

    <section anchor="app-constraints">
      <name>Informative Constraints</name>
      <t>The ABNF intentionally defines a generic syntactic envelope. It does not encode all GS1 Application-Identifier-specific business rules because doing so would make the grammar unwieldy and difficult to maintain. Implementations should therefore apply additional semantic validation after successful syntactic parsing.</t>
      <ul>
        <li><t>AI 01 (GTIN): numeric only; exactly 14 digits.</t></li>
        <li><t>AI 00 (SSCC): numeric only; exactly 18 digits.</t></li>
        <li><t>AI 414 (GLN): numeric only; exactly 13 digits.</t></li>
        <li><t>AI 402 (GSIN): numeric only; exactly 17 digits.</t></li>
        <li><t>AI 17 (expiration date): numeric only; exactly 6 digits in YYMMDD form.</t></li>
        <li><t>AI 10 and AI 21: variable-length values validated according to GS1 rules.</t></li>
        <li><t>AI 253, 401, 8003, and 8004: validated according to their respective GS1 definitions.</t></li>
      </ul>
    </section>

    <section anchor="app-regex">
      <name>Regular Expressions</name>
      <sourcecode type="regex"><![CDATA[^[Uu][Rr][Nn]:[Gg][Ss]1:[0-9]{2,4}:[A-Za-z0-9._-]+(:[0-9]{2,4}:[A-Za-z0-9._-]+)*$]]></sourcecode>
      <sourcecode type="regex"><![CDATA[^[Uu][Rr][Nn]:[Gg][Ss]1:[Gg][Dd][Dd]:(?:[Bb][Ii][Ee]:[A-Za-z0-9.]+|[Bb][Dd][Tt]:[A-Za-z0-9]+|[Cc][Ll]:[A-Za-z0-9]+(?::[A-Za-z0-9_]+)?)$]]></sourcecode>
      <sourcecode type="regex"><![CDATA[^[Uu][Rr][Nn]:[Gg][Ss]1:[Ss][Tt][Dd]:[A-Za-z0-9-]+(?::[0-9.]+)?(?::[0-9]+(?:\.[0-9]+)*)?$]]></sourcecode>
    </section>

    <section anchor="app-examples">
      <name>Examples</name>
      <ul>
        <li><t>urn:gs1:01:09506000134352</t></li>
        <li><t>urn:gs1:00:195060001343521234</t></li>
        <li><t>urn:gs1:414:9506001343521</t></li>
        <li><t>urn:gs1:402:12345678901234567</t></li>
        <li><t>urn:gs1:8004:ABC123XYZ</t></li>
        <li><t>urn:gs1:01:09506000134352:10:ABC123:21:9999</t></li>
        <li><t>urn:gs1:01:09506000134352:17:250101</t></li>
        <li><t>urn:gs1:gdd:bie:TradeItem</t></li>
        <li><t>urn:gs1:gdd:bie:TradeItem.netContent</t></li>
        <li><t>urn:gs1:gdd:bdt:MeasurementType</t></li>
        <li><t>urn:gs1:gdd:cl:CountryCode:BE</t></li>
        <li><t>urn:gs1:std:genspec:24.0:5.3.1</t></li>
        <li><t>urn:gs1:std:epcis:2.0:4.2</t></li>
      </ul>
    </section>

    <section anchor="app-resolver">
      <name>Resolver Behaviour</name>
      <t>Resolver behaviour is informative and not required for URN validity. GS1-authorised resolvers should support representation negotiation while keeping URNs themselves stable and version-independent where appropriate.</t>
      <ul>
        <li><t>text/html</t></li>
        <li><t>application/pdf</t></li>
        <li><t>application/xml</t></li>
        <li><t>text/markdown</t></li>
        <li><t>application/ld+json</t></li>
      </ul>
    </section>

    <section anchor="app-openapi">
      <name>OpenAPI Resolver Annex</name>
      <sourcecode type="yaml"><![CDATA[openapi: 3.1.0
info:
  title: GS1 URN Resolver API
  version: 1.0.0
paths:
  /resolve/{urn}:
    get:
      summary: Resolve a GS1 URN
      parameters:
        - name: urn
          in: path
          required: true
          schema:
            type: string
        - name: Accept
          in: header
          required: false
          schema:
            type: string
        - name: version
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Resolved resource
        '400':
          description: Invalid URN
        '404':
          description: Unknown URN]]></sourcecode>
    </section>

    <section anchor="app-ai">
      <name>GS1 AI Constraint Tables</name>
      <table anchor="tbl-ai">
        <name>Illustrative GS1 AI Constraints</name>
        <thead>
          <tr><th>AI</th><th>Meaning</th><th>Character set</th><th>Length or form</th></tr>
        </thead>
        <tbody>
          <tr><td>00</td><td>SSCC</td><td>numeric</td><td>exactly 18 digits</td></tr>
          <tr><td>01</td><td>GTIN</td><td>numeric</td><td>exactly 14 digits</td></tr>
          <tr><td>10</td><td>batch or lot</td><td>GS1-defined alphanumeric</td><td>variable</td></tr>
          <tr><td>17</td><td>expiration date</td><td>numeric</td><td>YYMMDD</td></tr>
          <tr><td>21</td><td>serial number</td><td>GS1-defined alphanumeric</td><td>variable</td></tr>
          <tr><td>253</td><td>GDTI</td><td>GS1-defined</td><td>per GS1 definition</td></tr>
          <tr><td>401</td><td>GINC</td><td>GS1-defined</td><td>per GS1 definition</td></tr>
          <tr><td>402</td><td>GSIN</td><td>numeric</td><td>exactly 17 digits</td></tr>
          <tr><td>414</td><td>GLN</td><td>numeric</td><td>exactly 13 digits</td></tr>
          <tr><td>8003</td><td>GRAI</td><td>GS1-defined</td><td>per GS1 definition</td></tr>
          <tr><td>8004</td><td>GIAI</td><td>GS1-defined alphanumeric</td><td>per GS1 definition</td></tr>
        </tbody>
      </table>
    </section>

    <section anchor="app-epc">
      <name>EPC and GS1 Mapping</name>
      <t>This appendix is informative and is provided to illustrate interoperability between the namespaces described in Section 3.1. The mappings shown herein do not establish semantic equivalence between the EPC and GS1 namespaces and do not alter the independent governance or syntax rules applicable to either namespace.</t>
      <t>The following is a non-normative example of mapping between an EPC identifier and a GS1 URN.</t>
      <sourcecode type="text"><![CDATA[urn:epc:id:sgtin:0950600.134352.9999
->
urn:gs1:01:09506000134352:21:9999]]></sourcecode>
    </section>
  </back>
</rfc>
