Nutzungsvorgaben Sonderzeichen

Java Bibliothek / IT-System

Name Art Version

isy-sonderzeichen

Bibliothek

5.x

In Anwendungen nach den IsyFact-Standards werden Daten in internationaler Schreibweise erfasst und gespeichert. Dies sind z.B. die Namen von Personen und Orten. Während die Eingabe von internationalen Sonderzeichen über eine deutsche Tastatur nur einen beschränkten Umfang an Sonderzeichen erlaubt, werden möglicherweise auch Daten abgelegt, die international landesspezifisch erfasst wurden. Hierin können alle landestypischen Sonderzeichen enthalten sein. Insbesondere also auch solche, die nicht über eine deutsche Tastatur eingegeben werden können.

Eine auf den IsyFact-Standards aufsetzende Architektur umfasst mehrere technische Systeme in einer Umgebung. Für jedes dieser Systeme muss sichergestellt werden, dass die benötigten Sonderzeichen durchgängig verarbeitet werden können und beim Datenaustausch zwischen diesen Systemen einheitlich durchgereicht und korrekt interpretiert werden.

In den Nutzungsvorgaben wird zunächst der Zeichensatz festgelegt, der innerhalb der Anwendungen verwendet werden soll. Abschließend wird für die technischen Systeme angegeben, wo die entsprechenden Konfigurationseinträge zur Verwendung des Zeichensatzes vorgenommen werden müssen.

Internationalisierung (I18N) bedeutet, ein Programm so zu entwerfen und umzusetzen, dass die Anpassung an andere Sprachen möglich ist, ohne den Quellcode zu ändern. Internationalisierung ist nicht Bestandteil dieser Nutzungsvorgaben.

1. Konfigurationseinstellungen für den Zeichensatz

Im Folgenden wird die Konfiguration der technischen Systeme zur Verwendung des Zeichensatzes erläutert. Um zu erreichen, dass jedes IsyFact-konforme System Sonderzeichen in gleicher Weise verarbeitet, wird durchgängig Unicode v4.x in der UTF-8-Codierung verwendet.

1.1. Betriebssystem

Die Standard-Zeichencodierung aller in der Plattform verwendeten Betriebssysteme muss einheitlich auf die Verwendung von Unicode v4.x in der UTF-8-Codierung gesetzt werden. Unter Linux-Derivaten kann unter anderem mit dem Parameter

LC_CTYPE = UTF8

die Encodierung für jeden Benutzer individuell gesetzt werden. Weitere Locale-Parameter und deren Verwendung sind bei gnu.org nachzulesen.

1.2. Hibernate

Für Hibernate werden der Unicode-Zeichensatz und die UTF-Zeichencodierung über die beiden Parameter

hibernate.connection.useUnicode = true

und

hibernate.connection.characterEncoding = utf-8

konfiguriert. Im Kontext der IsyFact-Standards wird Hibernate nicht direkt, sondern über JPA und Spring genutzt. Hierzu sind diese Einstellungen in der entsprechenden Konfigurationsdatei jpa.xml unter den Properties des Entity Managers wie folgt abzulegen:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaProperties">
        <props>
            <!--> ... <!-->
            <prop key="hibernate.connection.useUnicode">true</prop>
            <prop key="hibernate.connection.characterEncoding">utf-8</prop>
        </props>
    </property>
</bean>

1.3. Java

Im Java-Compiler wird die Zeichencodierung der Quelldateien beim Aufruf über den Parameter

–encoding UTF-8

gesetzt. In der JVM wird die Standard-Zeichencodierung beim Aufruf über den Parameter

-Dfile.encoding=UTF-8

gesetzt.

1.4. Maven

Der Build erfolgt mit Maven. Hier ist die Zeichencodierung wie folgt zu setzen:

<project>
...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
...
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
...
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
...
          <compilerArguments>
            <encoding>UTF-8</encoding>
...
          </compilerArguments>
        </configuration>
      </plugin>
...
    </plugins>
...
  </build>
...
  <reporting>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
...
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
...
  </reporting>
...
</project>

1.5. XML

UTF-8 ist die Standard-Zeichencodierung für XML. Das wird in der ersten Zeile der XML-Datei wie folgt deklariert:

<?xml version="1.0" encoding="UTF-8"?>

1.6. HTML

In HTML wird die Zeichencodierung in den Metadaten des HEAD-Tags wie folgt angegeben:

<meta http-equiv="Content-Type"
    content="text/html; charset=utf-8" />

Damit dürfen auch keine HTML-Sonderzeichen mehr verwendet werden, sondern nur noch UTF-8-codierte Zeichen.

2. Bibliothek isy-sonderzeichen

Die Bibliothek isy-sonderzeichen stellt Klassen zur Transformation und Validierung von Zeichenketten zur Verfügung. Dies geschieht mittels einer festen Anzahl von Transformatoren, die für eine einheitliche Transformation von Zeichenketten innerhalb der Systemumgebung sorgen.

Im Zuge der Umsetzung der DIN SPEC 91379 wurde isy-sonderzeichen erweitert. Um die ursprüngliche Funktionalität zu erhalten, wurde die Bibliothek in zwei Packages aufgeteilt. Das Package stringlatin1_1 enthält die ursprüngliche Funktionalität. Die Umsetzung der DIN SPEC 91379 wurde im Package dinspec91379 umgesetzt. Die Architektur und Funktionsweise der Komponente wurde im Zuge der Umsetzung nicht verändert. Eine Erweiterung des Zeichensatzes der DIN SPEC 91379 ist die DIN-Norm 91379. Für diese wurde ein weiteres Package dinnorm91379 angelegt, welches die beiden anderen Packages zukünftig ersetzt.

Die Packages stringlatin1_1 und dinspec91379 werden in zukünftigen Versionen entfernt.

2.1. Funktionsweise

2.1.1. Transformatoren

Die Transformatoren arbeiten alle nach dem gleichen Schema. Sie unterscheiden sich nur durch unterschiedliche Tabellen, die zur Zeichentransformation herangezogen werden.

  1. Alle Zeichen werden gemäß einer Mapping-Tabelle transformiert (Beispiel in Tabelle Transkription).

  2. Unbekannte oder nicht abbildbare Zeichen werden durch Leerzeichen ersetzt.

  3. Leerzeichen am Anfang und am Ende der Zeichenkette werden entfernt.

  4. Zwei aufeinanderfolgende Leerzeichen werden durch ein einzelnes Leerzeichen ersetzt.

Transformatoren müssen in der Regel projektspezifisch entwickelt werden. Darüber hinaus werden folgende Transformatoren mitgeliefert:

Identischer Transformator

Dieser Transformator bildet alle gültigen String.Latin-Zeichen auf sich selber ab. Der Nutzen dieses Transformators liegt darin, dass alle nicht String.Latin-Zeichen aus der übergebenen Zeichenkette entfernt werden. Dieser Transformator ermöglicht keine Vorgabe der maximalen Zeichenlänge.

Transkription Transformator

Dieser Transformator führt die in Tabelle Transkription dargestellte Transkription durch. Die Transkription ist eine aussprachebasierte Darstellung der übergebenen Zeichenkette, die mit dem ASCII-Zeichensatz dargestellt werden kann. Dieser Transformator ermöglicht keine Vorgabe der maximalen Zeichenlänge.

Suchform Transformator

Mit diesem Transformator ist es möglich, Zeichenketten, welche aus normativen Buchstaben (Datentyp C) der DIN-Norm 91379 bestehen, auf die Grundbuchstaben A-Z abzubilden. Die Transformationsregeln sind der Tabelle Suchform zu entnehmen. Dieser Transformator ermöglicht keine Vorgabe der maximalen Zeichenlänge. Es ist also möglich, dass transformierte Texte nicht mehr vom System verarbeitet werden können, wenn diese nicht mehr die maximale Zeichenlänge einhalten können.

Für unterschiedliche Anwendungsfälle kann es erforderlich sein, die in Namen enthaltenden Buchstaben auf die Grundbuchstaben A-Z abzubilden. Dies ist bspw. der Fall in der maschinenlesbaren Zone (MRZ) amtlicher Reisedokumente, für die der Standard [ICAO 9303-3] einschlägig ist, da nur diese Grundbuchstaben für die Repräsentation von Namen zur Verfügung stehen. Wenn Datensätze und Suchanfragen unter Anwendung der Suchform normalisiert werden, ist es auch möglich, Namen trotz unterschiedlicher Schreibweisen zu identifizieren.

Legacy Transformator

Mit diesem Transformator ist es möglich, Texte, welche mit Zeichen der DIN-Norm 91379 geschrieben wurden, umzuwandeln, sodass diese von Systemen verarbeitet werden können, welche nur den Zeichensatz String Latin 1.1 beherrschen. Die Transformationsregeln sind der Tabelle Legacy zu entnehmen. Dieser Transformator ermöglicht keine Vorgabe der maximalen Zeichenlänge. Es ist also möglich, dass transformierte Texte nicht mehr vom System verarbeitet werden können, wenn diese nicht mehr die maximale Zeichenlänge einhalten können.

Der Transformator dient dazu die Kompatibilität zu Systemen herzustellen, die noch nicht auf die DIN-Norm 91379 umgestellt sind. Die Frist zur Umstellung endet im November 2024. Danach soll auch der Legacy Transformator aus isy-sonderzeichen entfernt werden. Er ist deswegen bereits als deprecated markiert.

Legacy Transformator To DIN SPEC 913379

Analog zum Legacy-Transformator wird dieser Transformator genutzt, um Zeichen in die DIN SPEC 91379 umzuwandeln.

2.1.2. Zeichen-Validator

Der Zeichen-Validator kann verwendet werden, um zu überprüfen, ob eine Zeichenkette nur Zeichen eines bestimmten Datentyps der DIN-Norm 91379 enthält.

2.2. Einbindung der Bibliothek in eine Anwendung

Um die Bibliothek in einer Anwendung nutzen zu können, sind drei Schritte notwendig:

  • Integration mit Maven,

  • Instanziierung der Transformator Factory und

  • Instanziierung des Zeichen-Validators

2.2.1. Integration mit Maven

In der POM der Anwendung muss die Abhängigkeit hinzugefügt werden:

<dependency>
  <groupId>de.bund.bva.isyfact</groupId>
  <artifactId>isy-sonderzeichen</artifactId>
</dependency>

2.2.2. Instanziierung der Transformator Factory

Die Transformator-Factory und ein konkreter Transformator werden über Spring instanziiert.

<beans>
<bean id="sonderzeichenTransformatorFactory" class="de.bund.bva.isyfact.sonderzeichen.stringlatin1_1.core.transformation.TransformatorFactory">
  <property name="transformator" ref="sonderzeichenTransformator"/>
  <property name="transformationsTabelle" value="${Pfad_zu_einerZusaetzlichenTabelle}"/>
</bean>

<bean id="sonderzeichenTransformator" class="de.bund.bva.isyfact.sonderzeichen.stringlatin1_1.core.transformation.impl.IdentischerTransformator"/>
</beans>

In obigem Beispiel wird dabei der Transformator IdentischerTransformator aus der ursprünglichen Umsetzung geladen. Jeder der Transformatoren setzt bereits eine fest implementierte Transformationstabelle nach einem bestimmten Vorgehen um.

Bei der Konfiguration der TransformatorFactory kann die zusätzliche (optionale) Eigenschaft transformationsTabelle dazu genutzt werden, eine weitere Transformationstabelle anzugeben. Die Regeln in dieser Tabelle überschreiben dabei existierende alte Regeln. Es findet also eine Ergänzung der existierenden Regeln statt.

Das Vorgehen für die Komponenten der DIN-Norm 91379 ist analog. Es müssen lediglich die Package-Pfade der Klassen aktualisiert werden.

2.2.3. Instanziierung des Zeichen-Validators

Der Zeichen-Validator wird über Spring instanziiert.

<bean id="zeichenValidator" class="de.bund.bva.isyfact.sonderzeichen.dinnorm91379.validierung.ZeichenValidator"/>

2.3. Methodenbeschreibung Transformator

Der Aufruf des Transformators erfolgt über die jeweilige Methode der Transformator-Schnittstelle. Folgende Methoden stehen zur Verfügung:

Tabelle 1. Transformator-Methoden
Methode Parameter

transformiere

Transformiert eine Zeichenkette auf der Basis der zugrunde liegenden Transformationstabelle.

Leerzeichen am Anfang und am Ende der Zeichenkette werden entfernt.

Doppelte Leerzeichen innerhalb der Zeichenkette werden zu einem Leerzeichen umgewandelt.

Gibt den transformierten String aus.

String zeichenkette

Die zu transformierende Zeichenkette

transformiere

Transformiert eine Zeichenkette analog der zuvor beschriebenen transformiere-Funktion. Stellt zusätzlich sicher, dass die Zeichenkette nach der Operation die angegebene Länge hat. Es wird dabei nicht unterschieden, ob die ursprüngliche Zeichenkettenlänge bereits das Maximum überschritten hat oder erst durch eine Transformation die Zeichenkette verlängert wurde.

Gibt den transformierten String aus.

String zeichenkette

Die zu transformierende Zeichenkette

int maximaleLaenge

Die maximale Länge der Zeichenkette

transformiereOhneTrim

Transformiert eine Zeichenkette analog der zuvor beschriebenen transformiere-Funktion. Es werden jedoch keine Leerzeichen am Anfang/Ende der übergebenen Zeichenkette entfernt.

Gibt den transformierten String aus.

String zeichenkette

Die zu transformierende Zeichenkette

transformiereMitMetadaten

Transformiert eine Zeichenkette auf der Basis der zugrunde liegenden Transformationstabelle.

Leerzeichen am Anfang und am Ende der Zeichenkette werden entfernt.

Doppelte Leerzeichen innerhalb der Zeichenkette werden zu einem Leerzeichen umgewandelt.

Gibt ein Objekt vom Typ Transformation zurück, welches den transformierten String und die Metadaten der Transformation enthält.

String zeichenkette

Die zu transformierende Zeichenkette

transformiereMitMetadaten

Transformiert eine Zeichenkette analog der zuvor beschriebenen transformiere-Funktion. Stellt zusätzlich sicher, dass die Zeichenkette nach der Operation die angegebene Länge hat. Es wird dabei nicht unterschieden, ob die ursprüngliche Zeichenkettenlänge bereits das Maximum überschritten hat oder erst durch eine Transformation die Zeichenkette verlängert wurde.

Gibt ein Objekt vom Typ Transformation zurück, welches den transformierten String und die Metadaten der Transformation enthält.

String zeichenkette

Die zu transformierende Zeichenkette

int maximaleLaenge

Die maximale Länge der Zeichenkette

transformiereOhneTrimMitMetadaten

Transformiert eine Zeichenkette analog der zuvor beschriebenen transformiere-Funktion. Es werden jedoch keine Leerzeichen am Anfang/Ende der übergebenen Zeichenkette entfernt.

Gibt ein Objekt vom Typ Transformation zurück, welches den transformierten String und die Metadaten der Transformation enthält.

String zeichenkette

Die zu transformierende Zeichenkette

getRegulaererAusdruck

Gibt den regulären Ausdruck zurück, der alle gültigen Zeichenketten beschreibt, deren Zeichen in der jeweiligen Zeichenkategorie aufgeführt sind.

String[] kategorieListe

Eine Liste mit den Zeichenkategorien. Gültige Werte sind LETTER, NUMBER, PUNCTUATION, SEPARATOR, SYMBOL, OTHER.

Die Werte sind der Konstantenklasse ZeichenKategorie zu entnehmen.

getGueltigeZeichen

Gibt alle gültigen Zeichen des Transformators zurück.

String kategorie

Eine Zeichenkategorie aus LETTER, NUMBER, PUNCTUATION, SEPARATOR, SYMBOL, OTHER.

Hinweis zur Funktion transformiere

Die Transformationsfunktion arbeitet die Zeichenkette char für char ab. Sollte ein Unicode-Character, welcher aus mehreren char Objekten besteht definiert sein (non-BMP character, z.B. I mit angehängtem Circumflex (\\u006C\\u0302), so liefert die Transformationsfunktion das korrekte Ergebnis, kann aber nicht zwischen String.Latin- und Nicht-String.Latin-Zeichen unterscheiden. So könnten Zeichen außerhalb des Definitionsbereichs (z.B. alle \\u####\\u0302) der Transformation transformiert werden.

Zur Überprüfung, ob eine Zeichenkette innerhalb des für den Transformator gültigen Bereichs liegt, sollte daher die Funktion getRegulaererAusdruck(String[]) benutzt werden um einen regulären Ausdruck für alle gültigen Zeichen zu erstellen.

2.4. Metadaten einer Transformation

Alle Transformatoren der isyfact erlauben neben der Transformation auch die Ausgabe von Metadaten über eine ausgeführte Transformation. Dafür müssen die Funktionen mit dem Suffix MitMetadaten genutzt werden. Diese geben ein Objekt vom Typ Transformation zurück.

Mit der Funktion getTransformierterText() erhält man daraus den transformierten Text, wie man ihn auch aus den transformiere-Methoden ohne die Speicherung von Metadaten erhält. Mit getMetadatenList() erhält man eine Liste von TransformationMetadaten-Objekten zurück. Ein solches Objekt enthält folgende Attribute:

  • altesZeichen: das Zeichen, das durch die Transformation ersetzt wurde

  • alteCodepoints: die Unicode-Codepoints des ersetzten Zeichens

  • neuesZeichen: das Zeichen nach der Transformation

  • neueCodepoints: die Unicode-Codepoints des Zeichens nach der Transformation

  • altePosition: Position des Zeichens im zu transformierenden String

  • neuePosition: neue Position des Zeichens nach der Transformation

Schriftzeichen, welche durch die Transformation nicht verändert wurden, werden nicht in den Metadaten gelistet, auch wenn sich durch die Transformation anderer Zeichen ihre Position geändert hat. Das Attribut neuePosition kann außerdem die beiden folgenden Werte annehmen, wenn der transformierte Text getrimmt wurde:

  • -1: Wenn das Schriftzeichen zu einem führenden Leerzeichen transformiert wurde und durch das Trimmen entfernt wurde.

  • -2: Wenn das Schriftzeichen zu einem Leerzeichen am Ende des Texts transformiert wurde und durch das Trimmen entfernt wurde.

Zeichen, die zu Leerzeichen transformiert wurden, sodass mehrere Leerzeichen aufeinander folgen und anschließend durch ein einzelnes Leerzeichen ersetzt werden, erhalten als neuePosition die Position des einzelnen Leerzeichens.

2.5. Methodenbeschreibung Zeichen-Validator

Der Aufruf des Zeichen-Validators erfolgt über die jeweilige Methode der ZeichenValidator-Klasse. Folgende Methoden stehen zur Verfügung:

Tabelle 2. ZeichenValidator-Methoden
Methode Parameter

isGueltigerString

Überprüft, ob eine Zeichenkette nur Zeichen eines in der DIN-Norm 91379 definierten Datentyps enthält.

Leerzeichen am Anfang und am Ende der Zeichenkette werden entfernt.

Doppelte Leerzeichen innerhalb der Zeichenkette werden zu einem Leerzeichen umgewandelt.

String zeichenkette

Die zu überprüfende Zeichenkette

Datentyp datentyp

Der Datentyp

2.6. Zulässige Zeichen innerhalb der IsyFact

Die im Rahmen der IsyFact zugelassenen Zeichen gliedern sich in Standardzeichen und zusätzliche Zeichen. Die Standardzeichen müssen von jeder Anwendung immer unterstützt werden. Die zusätzlichen Zeichen müssen nur unterstützt werden, wenn dies entsprechend vereinbart wurde. Die Festlegungen für die zulässigen Zeichen orientieren sich an den Festlegungen, die für das Meldewesen getroffen wurden.

Die für die IsyFact zulässigen Zeichen werden im Folgenden aufgeführt (s. Kapitel Festlegung des Zeichensatzes und der Codierung des Konzepts).

2.6.1. Standardzeichen

  • Großbuchstaben: A-Z Ä Ö Ü

  • Kleinbuchstaben: a-z ä ö ü ß

  • Ziffern: 0-9

  • Sonderzeichen: ' ( ) + , - . / Leerzeichen

2.6.2. Zusätzliche Zeichen

In der Tabelle für zusätzliche Zeichen sind die Zeichen dargestellt, die zusätzlich unterstützt werden. Damit die Zeichen in der Spalte "Glyph" korrekt dargestellt werden, muss ein Font installiert sein, der alle Zeichen unterstützt (z.B. Code2000, erhältlich unter Code2000).