Im zweiten Schritt der Datenmodellierung mittels DFDL fügen Sie der eben eingerichteten logischen Struktur DFDL-Anmerkungen hinzu. DFDL-Anmerkungen beschreiben das physische Format der Komponenten.
Legen Sie die Merkmale Ihrer Komponenten fest.
- Alle Elemente (einfache und komplexe)
- Hat das Element Begrenzer, also einen Initiator oder ein Abschlusszeichen? Wenn ja, welche Codierung wird dafür verwendet und wird das Zeichen auch eingefügt, wenn das Element leer oder null ist? Dieses Merkmal bestimmt die Eigenschaft dfdl:initiator, dfdl:terminator, dfdl:encoding und zugehörige Eigenschaften.
- Wie ist der Inhalt des Elements aufgebaut? Dieses Merkmal bestimmt die Eigenschaft dfdl:lengthKind und zugehörige Eigenschaften:
- explicit für eine feste Länge.
- prefixed, wenn ein Längenpräfix gilt.
- delimited, wenn das Element durch einen Begrenzer abgeschlossen wird.
- pattern, wenn ein regulärer Ausdruck verwendet wird.
- implicit, wenn die Länge durch den Elementtyp festgelegt wird.
- endOfParent, wenn das Element durch sein übergeordnetes Element abgeschlossen wird.
- Wenn das Element optional oder ein Array ist: Wie wird die Anzahl der Vorkommen festgelegt? Dieses Merkmal bestimmt die Eigenschaft dfdl:occursCountKind und zugehörige Eigenschaften.
- Müssen Ausrichtungsregeln angewendet werden? Dieses Merkmal betrifft in der Regel nur Binärdaten. Es wird durch die Eigenschaften dfdl:alignment,
dfdl:fillByte und zugehörige Eigenschaften festgelegt.
- Wie werden Nullwerte beschrieben? Dieses Merkmal bestimmt die Eigenschaften dfdl:nilKind, dfdl:nilValue und zugehörige Eigenschaften.
- Ist zur Bestätigung, ob das Element vorhanden ist, ein Assert oder ein Diskriminator erforderlich?
- Einfache Elemente
- Wird das Element durch Text oder binär dargestellt? Die Darstellung sowie der Typ 'Einfach' bestimmen, welche der anderen Eigenschaften festgelegt werden müssen.
- Für Text werden die Eigenschaften dfdl:encoding sowie einige der DFDL-Texteigenschaften benötigt.
- Für Binärdaten werden die Eigenschaften dfdl:byteOrder sowie einige der DFDL-Binäreigenschaften benötigt.
- Für Textformate: Ist ein Escapeschema erforderlich? Dieses Merkmal bestimmt, ob die Eigenschaft dfdl:defineEscapeScheme erforderlich ist, und wenn ja, ob zu deren Referenzierung ein dfdl:escapeSchemaRef benötigt wird.
- Wenn Sie erkennen, das globale einfache Typen erforderlich sind, überlegen Sie sich, ob ein Teil der Eigenschaften dem einfachen Typ zugewiesen werden kann (anstatt dem Element). Auf diese Weise erhalten Sie wiederverwendbare physische Typen.
- Sequences (Sequenzen)
- Ist die Folge geordnet oder ungeordnet? Dieses Merkmal bestimmt die Eigenschaft dfdl:sequenceKind.
- Hat sie einen Separator, mit dem die untergeordneten Elemente begrenzt werden? Falls ja: Lautet die Position des Separators infix, prefix oder postfix?
Können Begrenzer auch unterdrückt werden (z. B., wenn optionale Elemente fehlen)? Diese Merkmale bestimmen die Eigenschaften dfdl:encoding, dfdl:separator, dfdl:separatorPosition und
dfdl:separatorSuppressionPolicy.
- Haben alle untergeordneten Elemente der Folge eindeutige Initiatoren, anhand derer festgestellt werden kann, dass die Elemente existieren? Dieses Merkmal bestimmt die Eigenschaft dfdl:initiatedContent.
- Verfügt die Folge selbst über einen Initiator oder ein Abschlusszeichen? Dieses Merkmal bestimmt die Eigenschaften dfdl:initiator, dfdl:terminator, dfdl:encoding und
zugehörige Eigenschaften.
- Auswahlen
- Müssen alle Zweige der Auswahl die gleiche Länge haben? Dieses Merkmal bestimmt die Eigenschaft dfdl:choiceLengthKind und zugehörige Eigenschaften.
- Haben alle Zweige der Auswahl eindeutige Initiatoren, anhand derer festgestellt werden kann, welcher Zweig angezeigt wird? Dieses Merkmal bestimmt die Eigenschaft dfdl:initiatedContent.
- Sind für die Zweige Diskriminatoren erforderlich, um festzulegen, welcher Zweig angezeigt wird?
- Verfügt die Auswahl selbst über einen Initiator oder ein Abschlusszeichen? Dieses Merkmal bestimmt die Eigenschaften dfdl:initiator, dfdl:terminator, dfdl:encoding und
zugehörige Eigenschaften.

In der bereits als Beispiel vorgestellten Datei mit Mitarbeiterdatensätzen handelt es sich bei allen Daten um Text mit dfdl:encoding gleich ASCII.
- Das Element employees weist weder Initiator noch Abschlusszeichen auf,
weswegen dfdl:initiator und dfdl:terminator auf die leere Zeichenfolge '' gesetzt sind. Seine Länge wird durch seine untergeordneten Elemente bestimmt, dfdl:lengthKind ist daher implicit.
- Die Folge für employees enthält dfdl:sequenceKind ordered,
weil die untergeordneten Komponenten immer in der angegebenen Reihenfolge erscheinen.
- Das Element employeeRecords beginnt mit {, es hat also den
dfdl:initiator {{. (Die beiden geschweiften Klammern ({{) sind erforderlich, damit der DFDL-Initiator nicht als DFDL-Ausdruck interpretiert wird.) Das Element endet mit } und CR/LF, dfdl:terminator ist also }%CR;%LF;. (Alternativ können } und CR/LF auch als Begrenzer der übergeordneten Folge angegeben werden.) Auch die Länge dieses Elements wird durch seine untergeordneten Elemente bestimmt, dfdl:lengthKind ist also auch hier implicit.
- Für seine Folge ist dfdl:sequenceKind ordered festgelegt.
- Für jedes einfache Element ist dfdl:representation auf text gesetzt. Jedes hat ein eindeutiges Start-Tag, das als dfdl:initiator verwendet wird. Der Wert eines jeden Elements hat eine variable Länge. Getrennt sind die Werte entweder durch ',' oder beim letzten Element des Datensatzes durch } und CR/LF. dfdl:lengthKind ist daher delimited.
- Der Begrenzer ',' wird besser durch dfdl:separator der übergeordneten Folge modelliert (statt als dfdl:terminator des Elements). dfdl:separatorPosition ist infix, d. h., der Begrenzer ',' wird nur zwischen den untergeordneten Elementen der Folge, nicht an deren Ende, eingefügt.
- Da jedes einfache Element einen Initiator aufweist, muss für die übergeordnete Folge dfdl:initiatedContent yes gesetzt werden. Der Parser identifiziert die einzelnen Elemente daher anhand des Initiators.
- Obwohl das Element salary optional ist, wird kein DFDL-Diskriminator benötigt, da der DFDL-Parser aus dem Abschlusszeichen von employeeRecord ableitet, dass das Element fehlt. Wenn salary fehlt, wird der Begrenzer ',' vor dessen leeren Position unterdrückt. Modelliert wird dies durch dfdl:separatorSuppressionPolicy trailingEmpty in der übergeordneten Folge.
- Für jedes einfache Element müssen weitere Texteigenschaften festgelegt werden, die bestimmen, ob das Element aufgefüllt oder gekürzt wird und ob ein Escapeschema verwendet wird, das verhindert, dass bestimmte Zeichen versehentlich als Begrenzer fehlinterpretiert werden.
- Für jedes einfache Element müssen weitere typspezifische Eigenschaften festgelegt werden, die die Interpretation der Datenwerte beeinflussen. Das Element permanent hat zum Beispiel den Typ 'xs:boolean', benötigt also 'dfdl:textBooleanTrueRep Y' und 'dfdl:textBooleanFalseRep
N'.
Im nächsten Schritt verwalten Sie das DFDL-Modell:
DFDL-Modell strukturieren.