Zum Inhalt springen

Document Structure Description

aus Wikipedia, der freien Enzyklopädie

Document Structure Description oder DSD ist eine Schemasprache, die dazu dient, Klassen von XML-Dokumenten zu beschreiben, die alle dieselben syntaktischen Anforderungen bezüglich ihrer Struktur und ihres Inhalts haben. DSD wurde in Kooperation mit BRICS und AT&T Labs Research entwickelt.

Entwicklungsziele

Die Entwicklungsziele von DSD waren:<ref>Anders Moller, Michael I. Schartzbach: <templatestyles src="Webarchiv/styles.css" />{{#if:20070305182416

      | {{#ifeq: 20070305182416 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Document Structure Description 2.0 | {{#invoke:WLink|getEscapedTitle|Document Structure Description 2.0}} | {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20070305182416}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Document Structure Description 2.0 | {{#invoke:WLink|getEscapedTitle|Document Structure Description 2.0}} | {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2023-12-13 14:05:23 InternetArchiveBot | 2023-12-13 14:05:23 InternetArchiveBot |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20070305182416}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Document Structure Description 2.0 | {{#invoke:WLink|getEscapedTitle|Document Structure Description 2.0}} | {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2023-12-13 14:05:23 InternetArchiveBot | 2023-12-13 14:05:23 InternetArchiveBot |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Document Structure Description 2.0 | {{#invoke:WLink|getEscapedTitle|Document Structure Description 2.0}} | {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2023-12-13 14:05:23 InternetArchiveBot | 2023-12-13 14:05:23 InternetArchiveBot |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Document Structure Description 2.0 | {{#invoke:WLink|getEscapedTitle|Document Structure Description 2.0}} | {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}} }} (Memento{{#if: {{#if: 2023-12-13 14:05:23 InternetArchiveBot | 2023-12-13 14:05:23 InternetArchiveBot |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Document Structure Description 2.0 | {{#invoke:WLink|getEscapedTitle|Document Structure Description 2.0}} | {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}} }}  
                 }}}}}}}}{{#if:2023-12-13 14:05:23 InternetArchiveBot
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20070305182416|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html}}
    || {{#if:  || }}
  }}{{#if: Document Structure Description 2.0
    | {{#if: {{#invoke:WLink|isBracketedLink|Document Structure Description 2.0}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|http://www.brics.dk/~amoeller/XML/schemas/dsd-overview.html }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}. BRICS, 2003 (englisch)</ref>
  • wenige und einfach zu verstehende Sprachbestandteile (auf boolescher Logik und regulären Ausdrücken basierend) und zu enthalten
  • auch für Nicht-XML-Experten einfach zu verstehen sein
  • Für die meisten praktischen Einsatzzwecke ausdrucksstärker als andere Dokumenttyp-Definitionssprachen zu sein

Konzepte

Das zentrale Konzept von DSD ist, dass jedes DSD-Schema aus einer Liste von Regeln besteht. Ein validierender XML-Parser muss für alle Elemente eines XML-Dokuments alle Regeln verarbeiten. Die Regeln enthalten dabei declare- und require-Abschnitte. Declare-Abschnitte definieren, welchen Inhalt (Subelemente und Zeichendaten) und welche Attribute für das Element zulässig sind. Require-Abschnitte definieren erweiterte Einschränkungen auf Inhalte und Attribute. Dabei werden Regelbedingungen und erweiterte Einschränkungen durch boolesche Logik beschrieben, während die Werte der Attribute und der Inhalt der Elemente durch reguläre Ausdrücke beschrieben werden.

Beispiel

Ein Beispiel für eine DSD ist:

<syntaxhighlight lang="xml"> <dsd xmlns="http://www.brics.dk/DSD/2.0"

xmlns:my="http://example.com">
<if><element name="my:foo"/>
 <declare>
  <attribute name="first"/>
  <attribute name="second"/>
  <contents>
   <element name="my:bar"/>
  </contents>
 </declare>
</if>
<if><element name="my:bar"/>
 <declare>
  <contents>
  </contents>
 </declare>
</if>

</dsd> </syntaxhighlight>

Das Element "foo" im XML-Namensraum "http://example.com" kann die beiden Attribute "first" und "second" haben. Der Inhalt des "foo"-Elements kann ausschließlich aus dem "bar"-Element bestehen, welches es enthalten muss. Das "bar"-Element wiederum darf weder Attribute, Text noch weitere Subelemente enthalten, muss also leer sein.

Ein XML-Dokument das bezüglich oben aufgeführter DSD-Spezifikation valide wäre, wäre z. B.:

<syntaxhighlight lang="xml"> <foo xmlns="http://example.com" second="2">

<bar/>

</foo> </syntaxhighlight>

Weblinks

Einzelnachweise

<references />