Zum Hauptinhalt springen

3. URN-Equivalence

3.1. Verfahren​

Für verschiedene Zwecke wie das Zwischenspeichern ist es oft wünschenswert, festzustellen, ob zwei URNs "dieselben" sind. Dies geschieht am allgemeinsten (d. h. unabhängig vom Schema) durch Prüfung auf Äquivalenz (siehe Abschnitt 6.1 von [RFC3986]).

Die generische URI-Spezifikation [RFC3986] ist sehr flexibel bei Gleichheitsvergleichen und legt den Schwerpunkt darauf, falsch-negative Ergebnisse zuzulassen und falsch-positive zu vermeiden. Werden Vergleiche auf schemaunabhängige Weise durchgeführt, d. h. nur als URI-Vergleiche, so würden viele URNs, die diese Spezifikation als gleich betrachtet, zurückgewiesen. Die folgende Erörterung gilt, wenn die beteiligten URIs als URNs bekannt sind, und verwendet daher die Begriffe "URN-equivalent" und "URN-equivalence", um die in diesem Dokument spezifizierte Äquivalenz zu bezeichnen.

Zwei URNs sind URN-equivalent, wenn ihre assigned-name-Anteile Oktett für Oktett gleich sind, nachdem die Groß-/Kleinschreibungs-Normalisierung (wie in Abschnitt 6.2.2.1 von [RFC3986] spezifiziert) auf die folgenden Konstrukte angewendet wurde:

  1. das URI-Schema "urn", durch Umwandlung in Kleinschreibung

  2. der NID, durch Umwandlung in Kleinschreibung

  3. alle prozentkodierten Zeichen in der NSS (d. h. alle Zeichentripel, die der in Abschnitt 2.1 der Basis-URI-Spezifikation [RFC3986] zu findenden Produktion <pct-encoding> entsprechen), durch Umwandlung in Großschreibung für die Ziffern A–F.

Prozentkodierte Zeichen dürfen nicht dekodiert werden (MUST NOT), d. h. die Prozentkodierungs-Normalisierung (wie in Abschnitt 6.2.2.2 von [RFC3986] spezifiziert) darf nicht als Teil des Vergleichsprozesses angewendet werden (MUST NOT).

Wenn eine r-component, q-component oder f-component (oder eine beliebige Kombination davon) in einem URN enthalten ist, muss sie für Zwecke der Bestimmung der URN-Equivalence ignoriert werden (MUST).

URN-Namensraum-Definitionen können zusätzliche Regeln für die URN-Equivalence enthalten, wie etwa die Nichtunterscheidung von Groß- und Kleinschreibung in der NSS (oder Teilen davon) (MAY). Solche Regeln müssen stets die Wirkung haben (MUST), einige der durch das obige Verfahren erhaltenen falsch-negativen Ergebnisse zu beseitigen, und dürfen nicht dazu führen, dass zwei URNs als nicht "dieselben" behandelt werden, wenn das hiesige Verfahren besagt, dass sie URN-equivalent sind (MUST NOT). Zu verwandten Überlegungen hinsichtlich der NID-Registrierung siehe unten.

3.2. Beispiele​

Dieser Abschnitt zeigt eine Reihe von URNs (unter Verwendung des in [RFC6963] definierten NID "example"), die die Regeln für die URN-Equivalence veranschaulichen.

Erstens sind, weil das Schema und der NID nicht zwischen Groß- und Kleinschreibung unterscheiden, die folgenden drei URNs untereinander URN-equivalent:

  • urn:example:a123,z456

  • URN:example:a123,z456

  • urn:EXAMPLE:a123,z456

Zweitens sind, weil die r-component, q-component und f-component für Zwecke der Prüfung der URN-Equivalence nicht berücksichtigt werden, die folgenden drei URNs URN-equivalent zu den ersten drei obigen Beispielen:

  • urn:example:a123,z456?+abc

  • urn:example:a123,z456?=xyz

  • urn:example:a123,z456#789

Drittens sind, weil das Zeichen "/" (und alles, was darauf folgt) in der NSS für Zwecke der URN-Equivalence berücksichtigt wird, die folgenden URNs weder untereinander noch zu den sechs vorangehenden URNs URN-equivalent:

  • urn:example:a123,z456/foo

  • urn:example:a123,z456/bar

  • urn:example:a123,z456/baz

Viertens sind die folgenden URNs aufgrund der Prozentkodierung nur untereinander URN-equivalent und zu keinem der obigen (beachten Sie, dass solche Sequenzen, obwohl %2C die prozentkodierte Umwandlung von "," aus den vorherigen Beispielen ist, für Zwecke der Prüfung der URN-Equivalence nicht dekodiert werden):

  • urn:example:a123%2Cz456

  • URN:EXAMPLE:a123%2cz456

Fünftens sind, weil Zeichen in der NSS außer prozentkodierten Sequenzen unter Berücksichtigung der Groß-/Kleinschreibung behandelt werden (sofern für den betreffenden URN-Namensraum nichts anderes spezifiziert ist), die folgenden URNs nicht URN-equivalent zu den ersten drei URNs:

  • urn:example:A123,z456

  • urn:example:a123,Z456

Sechstens könnte der folgende URN bei flüchtiger visueller Prüfung eines in einer menschenorientierten Schnittstelle dargestellten URN mit den ersten drei URNs identisch erscheinen (weil U+0430 CYRILLIC SMALL LETTER A mit U+0061 LATIN SMALL LETTER A verwechselt werden kann), er ist jedoch nicht URN-equivalent zu den ersten drei URNs:

  • urn:example:%D0%B0123,z456