HTML5-Deutsch.de - Inhalt
Ein Projekt von Schumacher-Netz.de

2 Gemeinsame Infrastruktur

2.1 Terminologie

Diese Spezifikation bezieht sich sowohl auf HTML- und XML-Attribute als auch auf IDL-Attribute, oft im gleichen Zusammenhang. Ist nicht eindeutig, auf welche Art Attribut Bezug genommen wird, werden HTML- und XML-Attribute als Inhaltsattribute bezeichnet und Attribute, die in IDL-Schnittstellen definiert sind, als IDL-Attribute. Ähnlich verhält es sich mit dem Begriff "Eigenschaften", er wird sowohl für JavaScript-Objekteigenschaften als auch CSS-Eigenschaften verwendet. Sind diese nicht eindeutig, werden sie als Objekteigenschaften und CSS-Eigenschaften qualifiziert.

This specification refers to both HTML and XML attributes and IDL attributes, often in the same context. When it is not clear which is being referred to, they are referred to as content attributes for HTML and XML attributes, and IDL attributes for those defined on IDL interfaces. Similarly, the term "properties" is used for both JavaScript object properties and CSS properties. When these are ambiguous they are qualified as object properties and CSS properties respectively.

Gibt die Spezifikation an, dass ein Feature* für die HTML-Syntax oder die XHTML-Syntax gilt, schließt das auch die jeweils andere Syntax ein. Gilt ein Feature nur für eine der beiden Sprachen, wird explizit erwähnt, dass dieses Feature nicht für das andere Format gilt, zum Beispiel in der Form "für HTML, ... (dies gilt nicht für XHTML)".

Generally, when the specification states that a feature applies to the HTML syntax or the XHTML syntax, it also includes the other. When a feature specifically only applies to one of the two languages, it is called out by explicitly stating that it does not apply to the other format, as in "for HTML, ... (this does not apply to XHTML)".

Diese Spezifikation verwendet den Begriff Dokument, wenn sie sich auf irgendeine Verwendung von HTML bezieht, angefangen von kurzen statischen Dokumenten bis hin zu langen Essays oder Berichten mit reichhaltigen Multimedia-Inhalten, aber auch voll ausgestattete interaktive Applikationen gehören dazu. Der Begriff wird sowohl für Dokumentobjekte und ihre herabfolgenden* DOM-Bäume genutzt als auch für serialisierte Byte-Ströme, die die HTML syntax oder XHTML syntax verwenden, je nach Kontext.

This specification uses the term document to refer to any use of HTML, ranging from short static documents to long essays or reports with rich multimedia, as well as to fully-fledged interactive applications. The term is used to refer both to Document objects and their descendant DOM trees, and to serialized byte streams using the HTML syntax or XHTML syntax, depending on context.

Im Zusammenhang mit den DOM-Strukturen werden die Begriffe HTML-Dokument und XML-Dokument entsprechend der Definition in der DOM-Spezifikation verwendet und beziehen sich auf zwei verschiedene Zustände, in denen sich Dokumentobjekte befinden können. [DOM] (Diese Verwendungsarten werden immer mit ihren entsprechenden Definitionen verlinkt.)

In the context of the DOM structures, the terms HTML document and XML document are used as defined in the DOM specification, and refer specifically to two different modes that Document objects can find themselves in. [DOM] (Such uses are always hyperlinked to their definition.)

Im Zusammenhang mit Byte-Ströme bezieht sich der Begriff HTML-Dokument auf Quellen, die als text/html bezeichnet werden und der Begriff XML-Dokument bezieht sich auf Quellen, die mit einem XML MIME-Typen bezeichnet werden.

In the context of byte streams, the term HTML document refers to resources labeled as text/html, and the term XML document refers to resources labeled with an XML MIME type.

Der Begriff XHTML-Dokument wird sowohl in Bezug auf Dokumente im XML-Dokumentzustand verwendet, die Elementknoten im HTML-Namensraum enthalten [TYPO im Original] als auch für Byte-Ströme, die mit einem XML MIME-Typen bezeichnet werden und Elemente aus dem HTML-Namensraum enthalten, je nach Kontext.

The term XHTML document is used to refer to both Documents in the XML document mode that contains element nodes in the HTML namespace, and byte streams labeled with an XML MIME type that contain elements from the HTML namespace, depending on context.


Zur Vereinfachung werden zuweilen Begriffe wie gezeigt, angezeigt und sichtbar verwendet, wenn es um die Darstellung eines Dokuments für einen Benutzer geht. Diese Begriffe bedeuten aber nicht, dass es sich um ein visuelles Medium handeln muss; es muss davon ausgegangen werden, dass sie für andere Medien auf äquivalente Weise gelten.

For simplicity, terms such as shown, displayed, and visible might sometimes be used when referring to the way a document is rendered to the user. These terms are not meant to imply a visual medium; they must be considered to apply to other media in equivalent ways.

Sagt ein Algorithmus B, dass er zu einem anderen Algorithmus A zurückkehrt, bedingt dies, dass A den Algorithmus B aufgerufen hat. Bei der Rückkehr zu A muss die Implementierung an der Stelle weitermachen, an der sie beim Aufruf von B verlassen wurde.

When an algorithm B says to return to another algorithm A, it implies that A called B. Upon returning to A, the implementation must continue from where it left off in calling B.

Der Begriff "transparent schwarz" bezieht sich auf die Farbe, deren Werte für die Kanäle Rot, Grün, Blau und Alpha Null sind.

The term "transparent black" refers to the color with red, green, blue, and alpha channels all set to zero.

2.1.1 Quellen

Diese Spezifikation verwendet den Begriff unterstützt, wenn sie sich darauf bezieht, ob eine Benutzerschnittstelle über eine Implementierung verfügt, die fähig ist, die Semantik einer externen Quelle zu dekodieren. Ein Format oder ein Typ wird unterstützt, wenn die Implementierung eine externe Quelle dieses Formats oder Typs verarbeiten kann, ohne dass kritische Aspekte dieser Quelle außer Acht gelassen werden. Ob eine bestimmte Quelle unterstützt wird, kann davon abhängen, welche Features des Quellformats verwendet werden.

The specification uses the term supported when referring to whether a user agent has an implementation capable of decoding the semantics of an external resource. A format or type is said to be supported if the implementation can process an external resource of that format or type without critical aspects of the resource being ignored. Whether a specific resource is supported can depend on what features of the resource's format are in use.

Zum Beispiel würde ein PNG-Bild schon als einem unterstützten Format angehörend angesehen, wenn seine Pixeldaten dekodiert und dargestellt werden können, auch wenn das Bild zusätzliche Animationsdaten enthält, die der Implementierung unbekannt sind.

For example, a PNG image would be considered to be in a supported format if its pixel data could be decoded and rendered, even if, unbeknownst to the implementation, the image also contained animation data.

Eine MPEG-4 Videodatei würde nicht als einem unterstützendem Format angehörend angesehen, wenn das Format der verwendeten Kompression nicht unterstützt wird. Es würde nicht ausreichen, dass die Implementierung die Bildgröße des Films aus den Metadaten der Datei ermitteln könnte.

An MPEG-4 video file would not be considered to be in a supported format if the compression format used was not supported, even if the implementation could determine the dimensions of the movie from the file's metadata.

Das, was in einigen Spezifikationen, insbesondere der HTTP-Spezifikation, als Repräsentation bezeichnet wird, wird in dieser Spezifikation als eine Quelle bezeichnet. [HTTP]

What some specifications, in particular the HTTP specification, refer to as a representation is referred to in this specification as a resource. [HTTP]

Der Begriff MIME-Typ wird für das verwendet, was zuweilen im Zusammenhang mit Protokollen als Internet-Medientyp bezeichnet wird. Der Begriff Medientyp (Media Type) in dieser Spezifikation wird in Bezug auf Medien für die Darstellung verwendet, wie sie zum Beispiel von der CSS-Spezifikation verwendet werden. [RFC2046] [MQ]

The term MIME type is used to refer to what is sometimes called an Internet media type in protocol literature. The term media type in this specification is used to refer to the type of media intended for presentation, as used by the CSS specifications. [RFC2046] [MQ]

Eine Zeichenkette ist ein gültiger MIME-Typ, wenn sie die Regeln für media-type erfüllt, die im Abschnitt 3.1.1.1 "Media Types" von RFC 7231 definiert sind. Insbesondere kann ein gültiger MIME-Typ MIME-Typ-Parameter enthalten. [HTTP]

A string is a valid MIME type if it matches the media-type rule defined in section 3.1.1.1 "Media Types" of RFC 7231. In particular, a valid MIME type may include MIME type parameters. [HTTP]

Eine Zeichenkette ist ein gültiger MIME-Typ ohne Parameter, wenn sie die Regeln für media-type erfüllt, die im Abschnitt 3.1.1.1 "Media Types" von RFC 7231 definiert sind, aber nicht das Zeichen ";" (U+003B) enthält. Mit anderen Worten, wenn sie nur aus einem Typen und einem Untertypen besteht, aber keinen MIME-Typ-Parameter enthält. [HTTP]

A string is a valid MIME type with no parameters if it matches the media-type rule defined in section 3.1.1.1 "Media Types" of RFC 7231, but does not contain any ";" (U+003B) characters. In other words, if it consists only of a type and subtype, with no MIME Type parameters. [HTTP]

Der Begriff HTML MIME-Typ wird in Bezug auf den MIME-Typen text/html verwendet.

The term HTML MIME type is used to refer to the MIME type text/html.

Die kritischen Unterquellen einer Quelle sind diejenigen, die für die Quelle verfügbar sein müssen, damit die Quelle richtig verarbeitet werden kann. Welche Quellen als kritisch angesehen werden, ist in der Spezifikation definiert, die das Format der Quelle definiert.

A resource's critical subresources are those that the resource needs to have available to be correctly processed. Which resources are considered critical or not is defined by the specification that defines the resource's format.

Der Begriff data: URL bezieht sich auf URLs, die das Schema data: verwenden. [RFC2397]

The term data: URL refers to URLs that use the data: scheme. [RFC2397]

2.1.2 XML

Um die Migration von HTML zu XHTML zu erleichtern, werden zu dieser Spezifikation konforme Benutzeragenten* Elemente in HTML in den Namensraum http://www.w3.org/1999/xhtml setzen, zumindest für die Belange von DOM und CSS. Wird der Begriff "HTML-Elemente" in dieser Spezifikation verwendet, bezieht er sich auf jegliches Element in diesem Namensraum und bezieht sich folgedessen sowohl auf HTML- als auch auf XML-Elemente.

To ease migration from HTML to XHTML, UAs conforming to this specification will place elements in HTML in the http://www.w3.org/1999/xhtml namespace, at least for the purposes of the DOM and CSS. The term "HTML elements", when used in this specification, refers to any element in that namespace, and thus refers to both HTML and XHTML elements.

Sofern nicht anders angegeben, befinden sich alle Elemente, die in dieser Spezifikation definiert sind oder angesprochen werden im HTML-Namensraum ("http://www.w3.org/1999/xhtml") und alle Attribute, die in dieser Spezifikation definiert sind oder angesprochen werden, besitzen keinen Namensraum.

Except where otherwise stated, all elements defined or mentioned in this specification are in the HTML namespace ("http://www.w3.org/1999/xhtml"), and all attributes defined or mentioned in this specification have no namespace.

Der Begriff Elementtyp wird in Bezug auf die Elemente verwendet, die einen lokalen Namen und einen Namensraum haben. Zum Beispiel sind button-Elemente Elemente vom Elementtyp button, das bedeutet, sie besitzen den lokalen Namen "button" und (implizit wie oben definiert) den HTML-Namensraum.

The term element type is used to refer to the set of elements that have a given local name and namespace. For example, button elements are elements with the element type button, meaning they have the local name "button" and (implicitly as defined above) the HTML namespace.

Attributnamen sind XML-kompatibel, wenn sie der Produktion Name entsprechen, die in XML definiert ist, und kein Zeichen ":" (U+003A) enthalten und ihre ersten drei Zeichen nicht der Zeichenkette "xml" entsprechen, ungeachtet ihrer Groß- und Kleinschreibung als ASCII-Zeichen. [XML]

Attribute names are said to be XML-compatible if they match the Name production defined in XML, they contain no ":" (U+003A) characters, and their first three characters are not an ASCII case-insensitive match for the string "xml". [XML]

Der Begriff XML MIME-Typ wird in Bezug auf die MIME-Typen text/xml und application/xml verwendet und jeglichen MIME-Typen, dessen Untertyp mit den vier Zeichen "+xml" endet. [RFC7303]

The term XML MIME type is used to refer to the MIME types text/xml, application/xml, and any MIME type whose subtype ends with the four characters "+xml". [RFC7303]

2.1.3 DOM-Bäume

Das Wurzelelement eines Dokumentobjekts ist das erste Elementkind jenes Dokuments, sofern vorhanden. Hat es keines, dann hat das Dokument kein Wurzelelement.

The root element of a Document object is that Document's first element child, if any. If it does not have one then the Document has no root element.

Sofern nicht auf das Wurzelelement eines Dokumentobjekts Bezug genommen wird, bedeutet es den entferntesten Vorfahren-Elementknoten eines jeden besprochenen Knotens, oder den Knoten selbst, sofern er keine Vorfahren hat. Ist der Knoten Teil des Dokumentes, dann ist das Wurzelelement des Knotens in der Tat das Wurzelelement des Dokumentes; ist der Knoten jedoch derzeit nicht Teil des Dokumentbaumes, ist das Wurzelelement ein verwaister Knoten.

The term root element, when not referring to a Document object's root element, means the furthest ancestor element node of whatever node is being discussed, or the node itself if it has no ancestors. When the node is a part of the document, then the node's root element is indeed the document's root element; however, if the node is not currently part of the document tree, the root element will be an orphaned node.

Ist das Wurzelelement eines Elements das Wurzelelement eines Dokumentobjekts, dann wird es als in einem Dokument bezeichnet. Ein Element wird als in ein Dokument eingefügt beschrieben, wenn sich sein Wurzelelement ändert und nun das Wurzelelement des Dokuments ist. Analog dazu wird ein Element als aus einem Dokument entfernt bezeichnet, wenn sein Wurzelelement vom Status des Wurzelelement des Dokuments zu einem anderen Element ändert.

When an element's root element is the root element of a Document object, it is said to be in a Document. An element is said to have been inserted into a document when its root element changes and is now the document's root element. Analogously, an element is said to have been removed from a document when its root element changes from being the document's root element to being another element.

Der Heimatunterbaum eines Knotens ist der Unterbaum am Wurzelelement jenes Knotens. Ist ein Knoten in einem Dokument, ist sein Heimatunterbaum der Baum des Dokuments.

A node's home subtree is the subtree rooted at that node's root element. When a node is in a Document, its home subtree is that Document's tree.

Das Dokument eines Knotens (z. Bsp. eines Elements) ist das Dokument, welches das IDL-Attribut ownerDocument des Knotens zurückgibt. Ist ein Knoten in einem Dokument, dann ist das Dokument immer das Dokument des Knotens, und das IDL-Attribut ownerDocument des Knotens gibt folgedessen immer das dieses Dokument zurück.

The Document of a Node (such as an element) is the Document that the Node's ownerDocument IDL attribute returns. When a Node is in a Document then that Document is always the Node's Document, and the Node's ownerDocument IDL attribute thus always returns that Document.

Das Dokument eines Inhaltsattributs ist das Dokument des Elements, welches das Attribut enthält.

The Document of a content attribute is the Document of the attribute's element.

Der Begriff Baumsortierung ist eine Vorsortierung, eine zuerst in die Tiefe gehende Traversierung der beteiligten Knoten (durch die Beziehung parentNode/childNodes).

The term tree order means a pre-order, depth-first traversal of DOM nodes involved (through the parentNode/childNodes relationship).

Wird angegeben, dass irgendein Element oder Attribut ignoriert wird, oder als ein andere Wert behandelt wird, oder behandelt wird, als wäre er etwas anderes, bezieht sich dies nur auf die Verarbeitung des Knotens, nachdem er im DOM aufgenommen wurde. Ein Benutzeragent darf das DOM in diesem Fall nicht verändern.

When it is stated that some element or attribute is ignored, or treated as some other value, or handled as if it was something else, this refers only to the processing of the node after it is in the DOM. A user agent must not mutate the DOM in such situations.

Über ein Inhaltsattribut wird gesagt, es verändere seinen Wert, wenn der neue Wert sich von seinem vorherigen Wert unterscheidet; wird ein Wert für ein Attribut gesetzt, der gleich dem vorherigen Wert ist, wird es nicht verändert.

A content attribute is said to change value only if its new value is different than its previous value; setting an attribute to a value it already has does not change it.

Wird der Begriff leer für einen Attributwert, einen Textknoten oder eine Zeichenkette verwendet, bedeutet das, dass die Länge des Textes Null ist (und er enthält nicht einmal Leerzeichen oder Steuerzeichen).

The term empty, when used of an attribute value, Text node, or string, means that the length of the text is zero (i.e. not even containing spaces or control characters).

2.1.4 Skripting

Die Konstruktion "ein Foo-Objekt", bei der Foo eine Schnittstelle ist, wird manchmal statt der akkurateren Schreibweise, "ein Objekt, das die Schnittstelle Foo implementiert", verwendet.

The construction "a Foo object", where Foo is actually an interface, is sometimes used instead of the more accurate "an object implementing the interface Foo".

Über ein IDL-Attribut wird gesagt, es hole einen Wert, wenn sein Wert abgerufen wird, (zum Beispiel über ein Autorenskript) und es wird gesagt, ein Wert werde gesetzt, wenn ihm ein neuer Wert zugewiesen wird.

An IDL attribute is said to be getting when its value is being retrieved (e.g. by author script), and is said to be setting when a new value is assigned to it.

Wird von einem DOM-Objekt gesagt, es sei live, dann müssen die Attribute und Methoden des Objekts mit den aktuellen Basisdaten arbeiten, nicht mit einem Schnappschuss der Daten.

If a DOM object is said to be live, then the attributes and methods on that object must operate on the actual underlying data, not a snapshot of the data.

Im Kontext mit Ereignissen werden die Begriffe (ab)feuern und absenden verwendet, wie sie in der DOM-Spezifikation definiert sind: ein Ereignis abfeuern bedeutet, es zu erzeugen und abzusenden, und ein Ereignis abzusenden bedeutet, den Schritten zu folgen, über die das Ereignis durch den Baum bewegt wird. Der Begriff vertrauenswürdiges Ereignis wird in Bezug auf Ereignisse verwendet, deren Attribut isTrusted mit 'wahr' initialisiert wurde. [DOM]

In the contexts of events, the terms fire and dispatch are used as defined in the DOM specification: firing an event means to create and dispatch it, and dispatching an event means to follow the steps that propagate the event through the tree. The term trusted event is used to refer to events whose isTrusted attribute is initialized to true. [DOM]

2.1.5 Plugins

Der Begriff Plugin bezieht sich auf Inhalts-Handler, die von einem Benutzeragenten definiert wurden und von dem Benutzeragenten verwendet werden. Die Inhalts-Handler können bei der Darstellung eines Dokumentobjekts durch den Benutzeragenten behilflich sein, dürfen aber weder als Kind-Browsing-Kontext des Dokuments agieren, noch irgendwelche Knotenobjekte in das DOM des Dokuments einbringen.

The term plugin refers to a user-agent defined set of content handlers used by the user agent that can take part in the user agent's rendering of a Document object, but that neither act as child browsing contexts of the Document nor introduce any Node objects to the Document's DOM.

Normalerweise werden solche Inhalts-Handler durch Dritte angeboten, obwohl auch Benutzeragenten eingebaute Inhalts-Handler als Plugins ausweisen können.

Typically such content handlers are provided by third parties, though a user agent can also designate built-in content handlers as plugins.

Ein Benutzeragent darf nicht annehmen, dass die Typen text/plain und application/octet-stream für ein Plugin registiert sind.

A user agent must not consider the types text/plain and application/octet-stream as having a registered plugin.

Ein Beispiel eines Plugins wäre ein PDF-Betrachter, der in einem Browsing-Kontext instantisiert wird, wenn der Benutzer zu einer PDF-Datei navigiert. Dies würde als Plugin gelten, ungeachtet dessen, ob die PDF-Betrachterkomponente von der gleichen Partei implementiert wurde, die auch den Browser selbst implementiert hat. Jedoch ist eine PDF-Betrachterapplikation, die unabhängig vom Benutzeragenten startet (im Gegensatz zu einer, die die gleiche Schnittstelle nutzt) per Definition kein Plugin .

One example of a plugin would be a PDF viewer that is instantiated in a browsing context when the user navigates to a PDF file. This would count as a plugin regardless of whether the party that implemented the PDF viewer component was the same as that which implemented the user agent itself. However, a PDF viewer application that launches separate from the user agent (as opposed to using the same interface) is not a plugin by this definition.

Diese Spezifikation definiert keinen Mechanismus für die Interaktion mit Plugins, da dies vom Benutzeragenten und der Plattform abhängt*. Einige Benutzeragenten könnten sich dafür entscheiden, einen Plugin-Mechanismus wie Netscape Plugin API zu unterstützen; andere könnten Remote Content Converter* verwenden oder interne Unterstützung für bestimmte Typen anbieten. In der Tat verlangt diese Spezifikation von Benutzeragenten nicht einmal, dass sie Plugins unterstützen müssen. [NPAPI]

This specification does not define a mechanism for interacting with plugins, as it is expected to be user-agent- and platform-specific. Some UAs might opt to support a plugin mechanism such as the Netscape Plugin API; others might use remote content converters or have built-in support for certain types. Indeed, this specification doesn't require user agents to support plugins at all. [NPAPI]

Ein Plugin kann geschützt werden, wenn es die Semantiken des Attributs sandbox akzeptiert.

A plugin can be secured if it honors the semantics of the sandbox attribute.

Zum Beispiel würde ein geschütztes Plugin verhindern, dass sein Inhalt ein Popup-Fenster erzeugt, wenn das Plugin innerhalb eines Sandbox-Iframes instantisiert würde.

For example, a secured plugin would prevent its contents from creating pop-up windows when the plugin is instantiated inside a sandboxed iframe.

Browser sollten äußerst vorsichtig sein, wenn sie mit externem Inhalt interagieren, der für Plugins bestimmt ist. Wird eine Software von Dritten mit den gleichen Rechten wie die des Browsers ausgeführt, könnten Sicherheitslücken in der Drittsoftware genauso gefährlich werden wie jene in dem Benutzeragenten.

Browsers should take extreme care when interacting with external content intended for plugins. When third-party software is run with the same privileges as the user agent itself, vulnerabilities in the third-party software become as dangerous as those in the user agent.

Da ein Fingerabdruckvektor entsteht, wenn verschiedene Benutzer verschiedene Zusammensetzungen von Plugins verwenden, und dies die Chancen vergrößert, dass Benutzer eindeutig identifiziert werden können, wird aufgefordert, dass Browser die genau gleiche Zusammensetzung von Plugins für jeden individuellen Benutzer unterstützen. (This is a fingerprinting vector.)

Since different users having differents sets of plugins provides a fingerprinting vector that increases the chances of users being uniquely identified, user agents are encouraged to support the exact same set of plugins for each user. (This is a fingerprinting vector.)

2.1.6 Zeichenverschlüsselung

Eine Zeichenverschlüsselung oder nur Verschlüsselung, wo es eindeutig ist, ist ein definierter Weg, um Byte-Ströme und Unicode-Zeichenketten untereinander zu konvertieren, wie es im Standard Encoding (Verschlüsselung) definiert ist. Eine Verschlüsselung hat einen Schlüsselnamen* und ein oder mehr Verschlüsselungsbeschriftungen, die in der Spezifikation Encoding als Name (name) und Beschriftungen (labels) bezeichnet werden. [ENCODING]

A character encoding, or just encoding where that is not ambiguous, is a defined way to convert between byte streams and Unicode strings, as defined in the Encoding standard. An encoding has an encoding name and one or more encoding labels, referred to as the encoding's name and labels in the Encoding specification. [ENCODING]

Eine ASCII-kompatible Zeichenverschlüsselung ist eine Verschlüsselung mit einem Byte oder variabler Länge, in der sich die Bytes 0x09, 0x0A, 0x0C, 0x0D, 0x20 - 0x22, 0x26, 0x27, 0x2C - 0x3F, 0x41 - 0x5A und 0x61 - 0x7A alle auf 1Byte-Folgen beziehen, die auf den gleichen Unicode-Zeichen abgebildet werden wie die Bytes von Windows-1252. [ENCODING]

An ASCII-compatible character encoding is a single-byte or variable-length encoding in which the bytes 0x09, 0x0A, 0x0C, 0x0D, 0x20 - 0x22, 0x26, 0x27, 0x2C - 0x3F, 0x41 - 0x5A, and 0x61 - 0x7A, ignoring bytes that are the second and later bytes of multibyte sequences, all correspond to single-byte sequences that map to the same Unicode characters as those bytes in Windows-1252. [ENCODING]

Dies beinhaltet auch Verschlüsselungen wie Shift_JIS, HZ-GB-2312, und Varianten von ISO-2022, auch wenn es in diesen Verschlüsselungen für Bytes wie 0x70 möglich ist, Teil von längeren Folgen zu sein, die nicht mit ihren Interpretationen als ASCII in Beziehung stehen. Es beinhaltet keine Varianten von UTF-16 sowie veraltete Verschlüsselungen wie UTF-7, GSM03.38 und Varianten von EBCDIC.

This includes such encodings as Shift_JIS, HZ-GB-2312, and variants of ISO-2022, even though it is possible in these encodings for bytes like 0x70 to be part of longer sequences that are unrelated to their interpretation as ASCII. It excludes UTF-16 variants, as well as obsolete legacy encodings such as UTF-7, GSM03.38, and EBCDIC variants.

Der Begriff eine UTF-16-Verschlüsselungg bezieht sich auf jede Variante von UTF-16: UTF-16LE oder UTF-16BE, unabhängig davon, ob ein BOM vorhanden ist oder nicht. [ENCODING]

The term a UTF-16 encoding refers to any variant of UTF-16: UTF-16LE or UTF-16BE, regardless of the presence or absence of a BOM. [ENCODING]

Der Begriff Code-Einheit wird entsprechend der Definition in der Spezifikation Web IDL verwendet: eine unsignierte 16bit Integer, die kleinste atomare Komponente eines DOMString. (Diese Definition ist enger gehalten als diejenige, die in Unicode verwendet wird und ist nicht die gleiche wie ein Code-Punkt.) [WEBIDL]

The term code unit is used as defined in the Web IDL specification: a 16 bit unsigned integer, the smallest atomic component of a DOMString. (This is a narrower definition than the one used in Unicode, and is not the same as a code point.) [WEBIDL]

Der Begriff Unicode Code-Punkt bedeutet, dass es sich um einen Unicode Skalarwert handelt, wo es möglich ist, ansonsten um einen isolierten Surrogat-Code-Punkt. Wird eine Konformitätsanforderung in Bezug auf Zeichen oder Unicode Code-Punkte definiert, muss ein Paar aus Code-Einheiten, bestehend aus einem hohen Surrogat, gefolgt von einem niedrigen Surrogat wie ein einziger Code-Punkt, der vom Surrogat-Paar repräsentiert wird, behandelt werden. Jedes isolierte Surrogat muss aber als einzelner Code-Punkt mit dem Wert des Surrogats behandelt werden. * [UNICODE]

The term Unicode code point means a Unicode scalar value where possible, and an isolated surrogate code point when not. When a conformance requirement is defined in terms of characters or Unicode code points, a pair of code units consisting of a high surrogate followed by a low surrogate must be treated as the single code point represented by the surrogate pair, but isolated surrogates must each be treated as the single code point with the value of the surrogate. [UNICODE]

In dieser Spezifikation ist der Begriff Zeichen ein Synonym für Unicode Code-Punkt, sofern er nicht als Unicode-Zeichen qualifiziert ist.

In this specification, the term character, when not qualified as Unicode character, is synonymous with the term Unicode code point.

Der Begriff Unicode-Zeichen wird für einen Unicode Skalarwert verwendet (das bedeutet, jeder Unicode Code-Punkt, der kein Surrogat-Code-Punkt ist). [UNICODE]

The term Unicode character is used to mean a Unicode scalar value (i.e. any Unicode code point that is not a surrogate code point). [UNICODE]

Die Code-Einheitenlänge einer Zeichenkette ist die Anzahl der Code-Einheiten in dieser Zeichenkette.

The code-unit length of a string is the number of code units in that string.

Diese Komplexität ist Folge der früheren Entscheidung, die DOM API mit 16-Bit (UTF-16) Code-Einheiten zu formulieren, anstatt mit Unicode-Zeichen.

This complexity results from the historical decision to define the DOM API in terms of 16 bit (UTF-16) code units, rather than in terms of Unicode characters.

2.2 Konformitätsanforderungen

Alle Diagramme, Beispiele und Anmerkungen in dieser Spezifikation sind nicht normativ, sowie alle Abschnitte, die explizit als nicht normativ gekennzeichnet sind. Alles andere in dieser Spezifikation ist normativ.

All diagrams, examples, and notes in this specification are non-normative, as are all sections explicitly marked non-normative. Everything else in this specification is normative.

Die Schlüsselworte "MUSS", "DARF NICHT", "ERFORDERLICH", "SOLLTE", "SOLLTE NICHT", "VIELLEICHT/kÖNNTE" und "OPTIONAL" in den normativen Teilen dieses Dokuments müssen wie in RFC2119 beschrieben interpretiert werden. Das Schlüsselwort "OPTIONALLY"* im normativen Teil dieses Dokuments muss mit der gleichen normativen Bedeutung wie "VIELLEICHT/KÖNNTE" und "OPTIONAL" interpretiert werden. Aus Gründen der Lesbarkeit erscheinen jene Worte in dieser Spezifikationnicht nicht in reiner Großschreibung. [RFC2119]

The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "MAY", and "OPTIONAL" in the normative parts of this document are to be interpreted as described in RFC2119. The key word "OPTIONALLY" in the normative parts of this document is to be interpreted with the same normative meaning as "MAY" and "OPTIONAL". For readability, these words do not appear in all uppercase letters in this specification. [RFC2119]

Anforderungen, die als Teil eines Algorithmus im Imperativ gefasst sind (wie "entferne alle Leerzeichen am Anfang" oder "gib falsch zurück und verlasse diese Schritte") sind mit der Bedeutung des Schlüsselwortes ("MUSS", "SOLLTE", "VIELLEICHT/KÖNNTE" usw.) interpretiert werden, das bei der Einführung des Algorithmuses verwendet wird.

Requirements phrased in the imperative as part of algorithms (such as "strip any leading space characters" or "return false and abort these steps") are to be interpreted with the meaning of the key word ("must", "should", "may", etc) used in introducing the algorithm.

Wo die Spec zum Beispiel sagt:

For example, were the spec to say:

Um eine Orange zu essen, muss der Benutzer:
1. die Orange schälen,
2. jedes Stück der Orange teilen,
3. die Orangenstücke essen.
To eat an orange, the user must:
1. Peel the orange.
2. Separate each slice of the orange.
3. Eat the orange slices.

...wäre es äquivalent mit dem Folgenden:

...it would be equivalent to the following:

Um eine Orange zu essen:
1. muss der Benutzer die Orange schälen,
2. muss der Benutzer jedes Stück der Orange teilen,
3. muss der Benutzer die Orangenstücke essen.
To eat an orange:
1. The user must peel the orange.
2. The user must separate each slice of the orange.
3. The user must eat the orange slices.

Hier ist das Schlüsselwort "MUSS".

Here the key word is "must".

Der erstere (imperative) Stil wird im Allgemeinen aus stilistischen Gründen in dieser Spezifikation bevorzugt.

The former (imperative) style is generally preferred in this specification for stylistic reasons.

Konformitätsanforderungen, die als Algorithmen oder als bestimmte Schritte gefasst sind, könnten in jeglicher Art implementiert sein, solange das Ergebnis äquivalent ist. (Insbesondere sind die Algorithmen, die in dieser Spezifikation definiert sind, darauf ausgelegt, dass man ihnen einfach folgen kann; sie sind nicht darauf ausgelegt, performant zu sein.)

Conformance requirements phrased as algorithms or specific steps may be implemented in any manner, so long as the end result is equivalent. (In particular, the algorithms defined in this specification are intended to be easy to follow, and not intended to be performant.)

2.2.1 Konformitätsklassen

Diese Spezifikation beschreibt die Konfomitätskriterien für Benutzeragenten (relevant für Implementierer) und Dokumente (relevant für Autoren und für Implementierer von Autorenwerkzeugen).

This specification describes the conformance criteria for user agents (relevant to implementors) and documents (relevant to authors and authoring tool implementors).

Konforme Dokumente sind diejenigen, die alle Konformitätskriterien für Dokumente erfüllen. Aus Gründen der Lesbarkeit sind einige dieser Konformitätsanforderungen als Konformitätsanforderungen für Autoren gefasst: diese Anforderungen sind implizit Anforderungen an Dokumente: per Definition wird angenommen, dass alle Dokumente einen Autor gehabt haben. (In einigen Fällen könnte der Benutzeragent selbst dieser Autor sein — für solche Benutzeragenten gelten zusätzliche Regeln, die unten beschrieben sind.)

Conforming documents are those that comply with all the conformance criteria for documents. For readability, some of these conformance requirements are phrased as conformance requirements on authors; such requirements are implicitly requirements on documents: by definition, all documents are assumed to have had an author. (In some cases, that author may itself be a user agent — such user agents are subject to additional rules, as explained below.)

Würde zum Beispiel eine Anforderung verlangen, dass "Autoren das Element foobar nicht benutzen dürfen", würde es implizieren, dass es Dokumenten nicht gestattet ist, das Element mit Namen foobar zu enthalten.

For example, if a requirement states that "authors must not use the foobar element", it would imply that documents are not allowed to contain elements named foobar.

Es gibt keine implizite Beziehung zwischen den Anforderungen an die Dokumentkonformität und den Anforderungen an die Implementierungskonformität. Benutzeragenten dürfen nicht konforme Dokumente nicht nach Gutdünken verarbeiten; das Verarbeitungsmodell in dieser Spezifikation gilt für alle Implementierungen, unabhängig von der Konformität der Eingabedokumente.

There is no implied relationship between document conformance requirements and implementation conformance requirements. User agents are not free to handle non-conformant documents as they please; the processing model described in this specification applies to implementations regardless of the conformity of the input documents.

Benutzeragenten werden in mehrere (überlappende) Kategorien mit verschiedenen Konformitätsanforderungen eingeordnet.

User agents fall into several (overlapping) categories with different conformance requirements.

Web-Browser und andere interaktive Benutzeragenten

Web-Browser, welche die XHTML-Syntax unterstützen, müssen Elemente und Attribute vom HTML-Namensraum, die in XML-Dokumenten gefunden werden, wie in dieser Spezifikation beschrieben verarbeiten, so dass Benutzer mit ihnen interagieren können. Es sei denn, die Semantik jener Elemente wurde von einer anderen Spezifikationen überschrieben.

Web browsers that support the XHTML syntax must process elements and attributes from the HTML namespace found in XML documents as described in this specification, so that users can interact with them, unless the semantics of those elements have been overridden by other specifications.

Findet ein konformer XHTML-Prozessor ein XHTML script-Element in einem XML-Dokument, würde er das Skript in jenem Element ausführen. Wird das Element jedoch innerhalb einer Tranformation gefunden, die in XSLT ausgedrückt ist (unter der Annahme, dass der Benutzeragent auch XSLT unterstützt), dann würde der Prozessor das script-Element stattdessen als ein opakes Element behandeln, das einen Teil der Tranformation bildet. *

A conforming XHTML processor would, upon finding an XHTML script element in an XML document, execute the script contained in that element. However, if the element is found within a transformation expressed in XSLT (assuming the user agent also supports XSLT), then the processor would instead treat the script element as an opaque element that forms part of the transform.

Web-Browser, welche die HTML-Syntax unterstützen, müssen Dokumente wie in dieser Spezifikation beschrieben verarbeiten, die mit einem HTML MIME-Typen versehen sind, so dass Benutzer mit ihnen interagieren können.

Web browsers that support the HTML syntax must process documents labeled with an HTML MIME type as described in this specification, so that users can interact with them.

Spezifiationen, welche die Semantik von HTML-Elementen überschreiben, überschreiben nicht die Anforderungen an DOM-Objekte, die diese Elemente repräsentieren, außer es ist explizit angegeben. Zum Beispiel würde das script-Element im Beispiel oben immer noch die Schnittstelle HTMLScriptElement implementieren.

Unless explicitly stated, specifications that override the semantics of HTML elements do not override the requirements on DOM objects representing those elements. For example, the script element in the example above would still implement the HTMLScriptElement interface.

Benutzeragenten ohne interaktive Präsentation

Benutzeragenten, die HTML- und XHTML-Dokumente nur verarbeiten, um nicht interaktive Versionen derer darzustellen, müssen den gleichen Konformitätsanforderungen entsprechen wie Web-Browser, außer dass sie von den Anforderungen ausgenommen sind, die eine Benutzerinteraktion betreffen.

User agents that process HTML and XHTML documents purely to render non-interactive versions of them must comply to the same conformance criteria as Web browsers, except that they are exempt from requirements regarding user interaction.

Typische Beispiele für nicht interaktive Darstellung sind Benutzeragenten wie Drucker (statische Benutzeragenten) und Tageslichtprojektoren (dynamische Benutzeragenten). Es wird angenommen, dass die meisten statischen nicht interaktiven Benutzeragenten auch die Wahl treffen, Skript-Unterstützung auszuklammern.

Typical examples of non-interactive presentation user agents are printers (static UAs) and overhead displays (dynamic UAs). It is expected that most static non-interactive presentation user agents will also opt to lack scripting support.

Ein Benutzeragent für nicht interaktive, aber dynamische Darstellung würde noch Skripte ausführen, Formulare würden noch dynamisch übermittelt werden können und so weiter. Jedoch bräuchte der Benutzeragent keine der DOM APIs unterstützen, die sich auf "focus" beziehen, da das Konzept von "focus" irrelevant ist, wenn der Benutzer nicht mit dem Dokument interagieren kann.

A non-interactive but dynamic presentation UA would still execute scripts, allowing forms to be dynamically submitted, and so forth. However, since the concept of "focus" is irrelevant when the user cannot interact with the document, the UA would not need to support any of the focus-related DOM APIs.

Visuelle Benutzeragenten, welche die vorgeschlagene voreingstellte Darstellung unterstützen

Benutzeragenten, ungeachtet ob sie interaktiv sind oder nicht, könnten dazu bestimmt sein (möglicherweise als Benutzeroption), die vorgeschlagene voreingestellte Darstellung zu unterstützen, die in dieser Spezifikation definiert ist.

User agents, whether interactive or not, may be designated (possibly as a user option) as supporting the suggested default rendering defined by this specification.

Dies ist nicht erforderlich. Insbesondere, selbst die Benutzeragenten, die diese vorgeschlagenen voreingstellte Darstellung implementieren, werden angehalten, eine Einstellung anzubieten, die diese Voreinstellung überschreibt, um das Erlebnis für den Benutzer zu verbessern, zum Beispiel durch die Änderung des Farbkontrastes, die Verwendung verschiedener Focus-Stile oder auf andere Weise das Erlebnis für den Benutzer zugänglicher und besser verwendbar zu machen. *

This is not required. In particular, even user agents that do implement the suggested default rendering are encouraged to offer settings that override this default to improve the experience for the user, e.g. changing the color contrast, using different focus styles, or otherwise making the experience more accessible and usable to the user.

Benutzeragenten, die eingestellt sind, die vorgeschlagene voreingstellte Darstellung zu unterstützen, müssen die Regeln aus dem Abschnitt Darstellung implementieren (solange sie so eingestellt sind), die jener Abschnitt als das Verhalten definiert, das von Benutzeragenten erwartet wird zu implementieren***.

User agents that are designated as supporting the suggested default rendering must, while so designated, implement the rules in the rendering section that that section defines as the behavior that user agents are expected to implement.

Benutzeragenten ohne Skriptunterstützung

Implementierungen, die Skripte nicht unterstützen (oder die ihre Skripteigenschaften vollständig ausgeschaltet haben) sind von der Unterstützung der Ereignis- und DOM-Schnittstellen, die in dieser Spezifikation beschrieben sind, befreit. In Bezug auf die Teile dieser Spezifikation, die im Sinne des Ereignismodells oder des DOMs definiert sind, muss sich solch ein Benutzeragent dennoch so verhalten, als würden Ereignisse und das DOM unterstützt. *** Kommentar Unterschied?

Implementations that do not support scripting (or which have their scripting features disabled entirely) are exempt from supporting the events and DOM interfaces mentioned in this specification. For the parts of this specification that are defined in terms of an events model or in terms of the DOM, such user agents must still act as if events and the DOM were supported.

Skripte können einen wesentlichen Teil einer Applikation bilden. Web-Browser, die Skripte nicht unterstützen oder abgeschaltet haben, könnten nicht in der Lage sein, die Absicht des Autors vollständig zu vermitteln.

Scripting can form an integral part of an application. Web browsers that do not support scripting, or that have scripting disabled, might be unable to fully convey the author's intent.

Konformitätsprüfer

Konformitätsprüfer müssen verifizieren, dass ein Dokument konform zu den anwendbaren* Konformitätskriterien ist, die in dieser Spezifikation beschrieben sind. Automatisierte Konformitätsprüfer sind davon ausgenommen, Fehler zu erkennen, die eine Interpretation der Absicht des Autors erfordern (obwohl, zum Beispiel, ein Dokument nicht konform ist, wenn der Inhalt eines blockquote-Elements kein Zitat ist, müssen Konformitätsprüfer, die ohne die Eingabe von menschlichem Judgement*** laufen, nicht prüfen, ob blockquote-Elemente nur zitiertes Material enthalten).

Conformance checkers must verify that a document conforms to the applicable conformance criteria described in this specification. Automated conformance checkers are exempt from detecting errors that require interpretation of the author's intent (for example, while a document is non-conforming if the content of a blockquote element is not a quote, conformance checkers running without the input of human judgement do not have to check that blockquote elements only contain quoted material).

Konformitätsprüfer müssen prüfen, ob das Dokument konform ist, wenn es ohne einen Browsing-Kontext verarbeitet wird (das heißt, es werden keine Skripte ausgeführt und das Skript-Flag des Parsers ist auf aus gesetzt). Konformitätsprüfer* sollten auch prüfen, ob das Eingabedokument konform ist, wenn es mit einem Browsing-Kontext verarbeitet wird, in welchem Skripte ausgeführt werden und dass die Skripte nimeals einen nicht konformen Status verursachen, außer in einer Übergangsphase während der Skriptausführung selbst. (Diese Anforderung ist nur ein "SOLLTE" und kein "MUSS", weil es nachweislich unmöglich ist. * [COMPUTABLE])

Conformance checkers must check that the input document conforms when parsed without a browsing context (meaning that no scripts are run, and that the parser's scripting flag is disabled), and should also check that the input document conforms when parsed with a browsing context in which scripts execute, and that the scripts never cause non-conforming states to occur other than transiently during script execution itself. (This is only a "SHOULD" and not a "MUST" requirement because it has been proven to be impossible. [COMPUTABLE])

Der Begriff "HTML-Validator" kann in Bezug auf einen Konformitätsprüfer verwendet werden, der selbst zu den diesbezüglichen* Anforderungen in dieser Spezifikation konform ist.

The term "HTML validator" can be used to refer to a conformance checker that itself conforms to the applicable requirements of this specification.

XML DTDs können nicht alle Konformitätsanforderungen in dieser Spezifikation ausdrücken. Deshalb können ein validierender XML-Prozessor und eine DTD keinen Konformitätsprüfer bilden. Da keines der beiden in dieser Spezifikation definierten Formate eine Applikation von SGML sind, kann ein validierendes SGML-System ebenfalls keinen Konformitätsprüfer bilden.

XML DTDs cannot express all the conformance requirements of this specification. Therefore, a validating XML processor and a DTD cannot constitute a conformance checker. Also, since neither of the two authoring formats defined in this specification are applications of SGML, a validating SGML system cannot constitute a conformance checker either.

Mit anderen Worten gibt es drei Arten von Konformitätskriterien:

To put it another way, there are three types of conformance criteria:

  1. Kriterien, die in einer DTD ausgedrückt werden können.
  2. Kriterien, die nicht in einer DTD ausgedrückt werden können, aber dennoch von einer Maschine überprüft werden können.
  3. Kriterien, die nur von einem Menschen geprüft werden können.
  1. Criteria that can be expressed in a DTD.
  2. Criteria that cannot be expressed by a DTD, but can still be checked by a machine.
  3. Criteria that can only be checked by a human.

Ein Konformitätsprüfer muss die ersten beiden prüfen. Ein einfacher DTD-basierter Validator prüft nur auf die erste Fehlerklasse und ist deshalb nach den Richtlinien dieser Spezifikation kein konformer Konformitätsprüfer.

A conformance checker must check for the first two. A simple DTD-based validator only checks for the first class of errors and is therefore not a conforming conformance checker according to this specification.

Data Mining-Werkzeuge

Applikationen und Werkzeuge, die HTML- und XHTML-Dokumente aus anderen Gründen verarbeiten, als die Dokumente entweder darzustellen oder auf Konformität zu überprüfen, sollten sich entsprechend der Semantik des Dokuments verhalten, das sie verarbeiten.

Applications and tools that process HTML and XHTML documents for reasons other than to either render the documents or check them for conformance should act in accordance with the semantics of the documents that they process.

Ein Werkzeug, das Dokumentaußenlinien erzeugt, und die Verschachtelungstiefe für jeden Abschnitt erhöht, nicht aber die Verschachtelungstiefe für jeden Bereich, wäre nicht konform. ***

A tool that generates document outlines but increases the nesting level for each paragraph and does not increase the nesting level for each section would not be conforming.

Autorenwerkzeuge und Quelltextgeneratoren

Autorenwerkzeuge und Quelltextgeneratoren müssen konforme Dokumente erzeugen. Konformitätskriterien, die für Autoren gelten, gelten auch für Autorenwerkzeuge, wo angebracht.

Authoring tools and markup generators must generate conforming documents. Conformance criteria that apply to authors also apply to authoring tools, where appropriate.

Autorenwerkzeuge sind von den strengen Anforderungen ausgenommen, Elemente nur für ihre festgelegten Zwecke zu nutzen, aber nur in dem Ausmaße, dass Autorenwerkzeuge noch nicht in der Lage sind, die Absicht des Autors zu bestimmen. Jedoch dürfen Autorenwerkzeuge Elemente nicht automatisch missbrauchen oder den Autor dazu verleiten, dies zu tun.

Authoring tools are exempt from the strict requirements of using elements only for their specified purpose, but only to the extent that authoring tools are not yet able to determine author intent. However, authoring tools must not automatically misuse elements or encourage their users to do so.

Zum Beispiel ist es nicht konform, ein address-Element für beliebige Kontaktinformationen zu nutzen; dieses Element darf nur dazu verwendet werden, Kontaktinformationen über den Autor des Dokuments oder Abschnitts zu bezeichnen. Da ein Autorenwerkzeug jedoch wahrscheinlich nicht in der Lage ist, den Unterschied zu erkennen, ist ein Autorenwerkzeug von dieser Anforderung ausgenommen. Das bedeutet jedoch nicht, dass Autorenwerkzeuge das address-Element (zum Beispiel) für jeden schräggedruckten Textabschnitt nutzen dürfen; es bedeutet nur, dass ein Autorenwerkzeug nicht verifizieren muss — wenn der Benutzer ein Werkzeug verwendet, um Kontaktinformationen für einen Bereich einzufügen — ob der Benutzer dieses wirklich macht oder irgendetwas anderes einfügt.

For example, it is not conforming to use an address element for arbitrary contact information; that element can only be used for marking up contact information for the author of the document or section. However, since an authoring tool is likely unable to determine the difference, an authoring tool is exempt from that requirement. This does not mean, though, that authoring tools can use address elements for any block of italics text (for instance); it just means that the authoring tool doesn't have to verify that when the user uses a tool for inserting contact information for a section, that the user really is doing that and not inserting something else instead.

Im Sinne der Konformitätsprüfung muss ein Editor Dokumente mit der gleichen Konformität ausgeben, auf die ein Konformitätsprüfer diese prüfen wird.

Die Ausgabe von Dokumenten eines Editors muss in der gleichen

In terms of conformance checking, an editor has to output documents that conform to the same extent that a conformance checker will verify.

Wird ein Autorenwerkzeug verwendet, um nicht konforme Dokumente zu bearbeiten, darf es die Konformitätsfehler in Bereichen des Dokuments beibehalten, die während der Bearbeitungssitzung nicht bearbeitet wurden (das bedeutet, ein Editor darf fehlerhaften Inhalt umgehen). Jedoch darf ein Autorenwerkzeug nicht behaupten, das die Ausgabe konform ist, wenn Fehler beibehalten wurden.

When an authoring tool is used to edit a non-conforming document, it may preserve the conformance errors in sections of the document that were not edited during the editing session (i.e. an editing tool is allowed to round-trip erroneous content). However, an authoring tool must not claim that the output is conformant if errors have been so preserved.

Autorenwerkzeuge gibt es normalerweise in zwei verschiedenen Ausführungen: Werkzeuge, die mit der Struktur oder mit semantischen Daten arbeiten und Werkzeuge, die nach dem Prinzip What-You-See-Is-What-You-Get (Was-Du-Siehst-Ist-Was-Du-Bekommst) auf medienspezifischer Basis arbeiten (WYSIWYG).

Authoring tools are expected to come in two broad varieties: tools that work from structure or semantic data, and tools that work on a What-You-See-Is-What-You-Get media-specific editing basis (WYSIWYG).

Der erste Mechanismus wird für Werkzeuge bevorzugt, die HTML erzeugen, da die Struktur in den Quellinformationen verwendet werden kann, um eine informierte Auswahl zwischen den HTML-Elementen und -Attributen zu treffen, die am passendsten ist.

The former is the preferred mechanism for tools that author HTML, since the structure in the source information can be used to make informed choices regarding which HTML elements and attributes are most appropriate.

Jedoch sind WYSIWYG-Werkzeuge legitim. WYSIWYG-Werkzeuge sollten Elemente verwenden, von denen sie wissen, dass sie passend sind, und sollten keine Elemente verwenden, von denen sie wissen, dass sie nicht passend sind. Das kann in bestimmten Extremfällen bedeuten, die Verwendung von Fluss-Elementen auf wenige zu beschränken, wie div, b, i und span und großzügig style-Attribute zu verwenden.

However, WYSIWYG tools are legitimate. WYSIWYG tools should use elements they know are appropriate, and should not use elements that they do not know to be appropriate. This might in certain extreme cases mean limiting the use of flow elements to just a few elements, like div, b, i, and span and making liberal use of the style attribute.

Alle Autorenwerkzeuge, ob WYSIWYG oder nicht, sollten aufs Möglichste versuchen, dem Benutzer die Erstellung von gut strukturiertem, semantisch reichem und medienunabhängigem Inhalt zu ermöglichen.

All authoring tools, whether WYSIWYG or not, should make a best effort attempt at enabling users to create well-structured, semantically rich, media-independent content.

Benutzeragenten können implementierungsabhängige Beschränkungen für ansonsten unbeschränkte Eingaben einführen, zum Beispiel um "Denial Of Service"-Angriffe zu verhindern, um vor Speichermangel zu schützen oder um plattform-spezifische Beschränkungen zu umgehen. (This is a fingerprinting vector.)

User agents may impose implementation-specific limits on otherwise unconstrained inputs, e.g. to prevent denial of service attacks, to guard against running out of memory, or to work around platform-specific limitations. (This is a fingerprinting vector.)

Diese Spezifikation bescheibt zwei Formate, um mit bestehendem Inhalt und früheren Spezifikationen kompatibel zu sein: eines basiert auf XML (hier als die XHTML-Syntax bezeichnet) und eines benutzt ein angepasstes* Format, inspiriert durch SGML (hier als die HTML-Syntax bezeichnet). Implementierungen müssen mindestens eines dieser beiden Formate unterstützen, jedoch wird zur Unterstützung beider aufgerufen.

For compatibility with existing content and prior specifications, this specification describes two authoring formats: one based on XML (referred to as the XHTML syntax), and one using a custom format inspired by SGML (referred to as the HTML syntax). Implementations must support at least one of these two formats, although supporting both is encouraged.

Einige Konformitätsanforderungen sind als Anforderungen für Elemene, Attribute, Methoden oder Objekte formuliert. Solche Anforderungen fallen in zwei Kategorien: solche, die Beschränkungen zum Inhaltsmodell beschreiben und solche, die das Verhalten bei einer Implementierung beschreiben. Diejenigen in der ersten Kategorie sind Anforderungen an Dokumente und Autorenwerkzeuge. Diejenigen in der zweiten Kategorie sind Anforderungen an Benutzeragenten. Ähnlich dazu sind einige Konformitätsanforderungen als Anforderungen an den Autor beschrieben; solche Anforderungen müssen als Konformitätsanforderungen an das Dokument interpretiert werden, das der Autor erzeugt. (Mit anderen Worten unterscheidet diese Spezifikation nicht zwischen Konformitätsanforderungen an Autoren und Konformitätsanforderungen an Dokumente.)

Some conformance requirements are phrased as requirements on elements, attributes, methods or objects. Such requirements fall into two categories: those describing content model restrictions, and those describing implementation behavior. Those in the former category are requirements on documents and authoring tools. Those in the second category are requirements on user agents. Similarly, some conformance requirements are phrased as requirements on authors; such requirements are to be interpreted as conformance requirements on the documents that authors produce. (In other words, this specification does not distinguish between conformance criteria on authors and conformance criteria on documents.)

2.2.2 Abhängigkeiten

Diese Spezifikation stützt sich auf viele andere Spezifikationen.

This specification relies on several other underlying specifications.

Unicode und Encoding

Der Unicode-Zeichensatz wird zur Darstellung von Textdaten verwendet und der Standard "Encoding" definiert Anforderungen an die Zeichenverschlüsselungen. [UNICODE]

The Unicode character set is used to represent textual data, and the Encoding standard defines requirements around character encodings. [UNICODE]

Wie zuvor beschrieben: diese Spezifikation führt Terminologie ein, die auf den Begriffen aufbaut, die in jenen Spezifikationen definiert sind.

This specification introduces terminology based on the terms defined in those specifications, as described earlier.

Die folgenden Begriffe, die in der Spezifikation Encoding definiert sind, werden verwendet: [ENCODING]

The following terms are used as defined in the Encoding specification: [ENCODING]

  • Eine Verschlüsselung holen*
  • Die Algorithmen Encoder und Decoder für verschiedene Verschlüsselungen, einschließlich der UTF-8 Encoder und UTF-8 Decoder
  • Der generische Algorithmus Decode, der einen Byte-Strom und eine Verschlüsselung nimmt und einen Zeichenstrom zurückgibt
  • Der Algorithmus UTF-8 Decode, der einen Byte-Strom entgegennimmt und einen Zeichenstrom zurückgibt und zusätzlich ein vorangestelltes UTF-8 Byte Order Mark (BOM) entfernt, falls vorhanden
  • Getting an encoding
  • The encoder and decoder algorithms for various encodings, including the UTF-8 encoder and UTF-8 decoder
  • The generic decode algorithm which takes a byte stream and an encoding and returns a character stream
  • The UTF-8 decode algorithm which takes a byte stream and returns a character stream, additionally stripping one leading UTF-8 Byte Order Mark (BOM), if any

Der UTF-8 Decoder unterscheidet sich vom Algorithmus UTF-8 Decode. Letzterer entfernt zuerst ein Byte Order Mark (BOM), sofern vorhanden, und ruft dann den ersteren auf.

The UTF-8 decoder is distinct from the UTF-8 decode algorithm. The latter first strips a Byte Order Mark (BOM), if any, and then invokes the former.

Der Algorithmus Decoder könnte einen Fehler auswerfen, der in dieser Spezifikation als a Decoder-Fehler bezeichnet wird.

The decoder algorithm may produce an error, referred to in this specification as a decoder error.

Zur besseren Lesbarkeit wird auf Zeichenkodierungen manchmal mit einer anderen Groß- und Kleinschreibung verwiesen als mit der kanonischen Schreibweise, die im Standard Encoding gegeben ist. (Zum Beispiel "UTF-16LE" statt "utf-16le".)

For readability, character encodings are sometimes referenced in this specification with a case that differs from the canonical case given in the encoding standard. (For example, "UTF-16LE" instead of "utf-16le".)

XML

Implementierungen, die die XHTML-Syntax unterstützen, müssen irgendeine Version von XML unterstützen, sowie deren entsprechende Namensraum-Spezifikation, da die Syntax XML-Serialisierung mit Namensräumen verwendet. [XML] [XMLNS]

Implementations that support the XHTML syntax must support some version of XML, as well as its corresponding namespaces specification, because that syntax uses an XML serialization with namespaces. [XML] [XMLNS]

URLs

Die folgenden Begriffe sind im URL-Standard definiert: [URL]

The following terms are defined in the URL standard: [URL]

  • URL
  • Absolute URL
  • Relative URL
  • Relative schemes
  • The URL parser
  • Parsed URL, which is the result of processing a URL through the URL parser
  • The scheme component of a parsed URL
  • The scheme data component of a parsed URL
  • The username component of a parsed URL
  • The password component of a parsed URL
  • The host component of a parsed URL
  • The port component of a parsed URL
  • The path component of a parsed URL
  • The query component of a parsed URL
  • The fragment component of a parsed URL
  • Parse errors from the URL parser
  • The URL serializer
  • Default encode set
  • Percent encode
  • UTF-8 percent encode
  • Percent decode
  • URLUtils interface
  • href attribute
  • protocol attribute
  • The get the base hook for URLUtils
  • The update steps hook for URLUtils
  • The set the input algorithm for URLUtils
  • The query encoding of an URLUtils object
  • The input of an URLUtils object
  • The url of an URLUtils object
Cookies

Die folgenden Begriffe sind in der Cookie-Spezifikation definiert: [COOKIES]

The following terms are defined in the Cookie specification: [COOKIES]

  • cookie-string
  • empfängt set-cookie-string
  • cookie-string
  • receives a set-cookie-string
CORS

Die folgenden Begriffe sind in der CORS-Spezifikation definiert: [CORS]

The following terms are defined in the CORS specification: [CORS]

  • cross-origin-Anfrage
  • cross-origin-Anfragestatus
  • angepasste Anfrage-Header
  • einfache cross-origin-Anfrage
  • Umleitungsschritte ***
  • credentials-Flagge auslassen ***
  • Überprüfung auf Teilung von Resourcen ***
  • cross-origin request
  • cross-origin request status
  • custom request headers
  • simple cross-origin request
  • redirect steps
  • omit credentials flag
  • resource sharing check
Web IDL

Die IDL-Blöcke in dieser Spezifikation sind konforme IDL-Fragmente wie in der WebIDL-Spezifikation definiert. [WEBIDL]

The IDL blocks in this specification are conforming IDL fragments as defined by the WebIDL specification. [WEBIDL]

Die Begriffe unterstützte Eigenschaftsindizes, bestimme den Wert einer indizierten Eigenschaft, unterstützte benannte Eigenschaften, unterstützte Eigenschaftsnamen, bestimme den Wert einer benannten Eigenschaft, Array-Objekte einer Plattform und nur lesen (wenn auf Arrays angewendet) werden verwendet wie in der Spezifikation Web IDL definiert. Ähnlich ist der Algorithmus, um einen DOMString in eine Sequenz von Unicode-Zeichen umzuwandeln derjenige, der in der Spezifikation Web IDL definiert ist.

The terms supported property indices, determine the value of an indexed property, support named properties, supported property names, determine the value of a named property, platform array objects, and read only (when applied to arrays) are used as defined in the Web IDL specification. The algorithm to convert a DOMString to a sequence of Unicode characters is similarly that defined in the Web IDL specification.

Fordert diese Spezifikation vom Benutzeragenten, ein Date-Objekt zu erzeugen, das eine bestimmte Zeit repräsentiert (welche der Sonderwert Not-a-Number sein könnte), muss die Komponente Millisekunden dieser Zeit, sofern vorhanden, auf eine Integer verkürzt werden und der Zeitwert des neu erzeugten Objekts Date muss die resultierende verkürzte Zeit repräsentieren.

When this specification requires a user agent to create a Date object representing a particular time (which could be the special value Not-a-Number), the milliseconds component of that time, if any, must be truncated to an integer, and the time value of the newly created Date object must represent the resulting truncated time.

Ist zum Beispiel die Zeit 23045 Millionstel Sekunden nach 01:00 Uhr UTC am ersten Januar 2000 gegeben, das heißt, die Zeit 2000-01-01T00:00:00.023045Z, dann würde das Date-Objekt, das die Zeit repräsentiert, die gleiche Zeit repräsentieren wie das, welches erzeugt wird, um die Zeit 2000-01-01T00:00:00.023Z zu repräsentieren, 45 Millisekunden früher. Ist die gegebene Zeit NaN, dann ist das Ergebnis ein Date-Objekt, das einen Zeitwert NaN repräsentiert (was anzeigt, dass das Objekt keinen bestimmten Zeitpunkt repräsentiert).

For instance, given the time 23045 millionths of a second after 01:00 UTC on January 1st 2000, i.e. the time 2000-01-01T00:00:00.023045Z, then the Date object created representing that time would represent the same time as that created representing the time 2000-01-01T00:00:00.023Z, 45 millionths earlier. If the given time is NaN, then the result is a Date object that represents a time value NaN (indicating that the object does not represent a specific instant of time).

JavaScript

Einige Teile der Sprache, die von dieser Spezifiktion beschrieben sind, unterstützen nur JavaScript als zugrundeliegende Skriptsprache. [ECMA262]

Some parts of the language described by this specification only support JavaScript as the underlying scripting language. [ECMA262]

Der Begriff "JavaScript" wird statt dem offiziellen Begriff ECMAScript in Bezug auf ECMA262 verwendet, da der Begriff JavaScript verbreiteter ist. Ähnlich dazu wird der MIME-Typ text/javascript verwendet, um in dieser Spezifikation auf JavaScript zu verweisen, da dieser der meistbenutzte Typ ist, auch wenn er offziell nach RFC 4329 als obsoleter Typ gilt. [RFC4329]

The term "JavaScript" is used to refer to ECMA262, rather than the official term ECMAScript, since the term JavaScript is more widely known. Similarly, the MIME type used to refer to JavaScript in this specification is text/javascript, since that is the most commonly used type, despite it being an officially obsoleted type according to RFC 4329. [RFC4329]

Der Begriff Globale Umgebung in JavaScript bezieht sich auf das Konzept Globale Umgebung, das in der Spezifikation ECMAScript definiert ist.

The term JavaScript global environment refers to the global environment concept defined in the ECMAScript specification.

Der ECMAScript-Fehler SyntaxError ist auch in der Spezifikation ECMAScript definiert. [ECMA262]

The ECMAScript SyntaxError exception is also defined in the ECMAScript specification. [ECMA262]

DOM

Das "Document Object Model" (DOM) ist eine Repräsentation - ein Modell - eines Dokuments und seines Inhalts. Das DOM ist nicht nur eine API; in dieser Spezifikation sind die Konformitätskriterien einer HTML-Implementierung als Bearbeitungen des DOM definiert. [DOM]

The Document Object Model (DOM) is a representation — a model — of a document and its content. The DOM is not just an API; the conformance criteria of HTML implementations are defined, in this specification, in terms of operations on the DOM. [DOM]

Implementatierungen müssen das DOM unterstützen und die Ereignisse, die in (der externen Spezifikation) DOM Events definiert sind, da diese Spezifikation im Sinne des DOM definiert ist und einige der Features als Erweiterung der DOM-Schnittstellen definiert sind. [DOM] [DOMEVENTS]

Implementations must support DOM and the events defined in DOM Events, because this specification is defined in terms of the DOM, and some of the features are defined as extensions to the DOM interfaces. [DOM] [DOMEVENTS]

Insbesondere sind die folgenden Features in der DOM-Spezifikation definiert: [DOM]

In particular, the following features are defined in the DOM specification: [DOM]

  • Die Schnittstelle Attr
  • Die Schnittstelle Comment
  • Die Schnittstelle DOMImplementation
  • Die Schnittstelle Document
  • Die Schnittstelle DocumentFragment
  • Die Schnittstelle DocumentType
  • Die Schnittstelle DOMException
  • Die Schnittstelle ChildNode
  • Die Schnittstelle Element
  • Die Schnittstelle Node
  • Die Schnittstelle NodeList
  • Die Schnittstelle ProcessingInstruction
  • Die Schnittstelle Text
  • Die Schnittstelle HTMLCollection
  • Die Methode item()
  • Die Begriffe Sammlungen* und repräsentiert von der Sammlung
  • Die Schnittstelle DOMTokenList
  • Die Schnittstelle DOMSettableTokenList
  • Die Methode createDocument()
  • Die Methode createHTMLDocument()
  • Die Methode createElement()
  • Die Methode createElementNS()
  • Die Methode getElementById()
  • Die Methode insertBefore()
  • Das Attribut ownerDocument
  • Das Attribut childNodes
  • Das Attribut localName
  • Das Attribut parentNode
  • Das Attribut namespaceURI
  • Das Attribut tagName
  • Das Attribut id
  • Das Attribut textContent
  • Die Algorithmen insert, append, remove, replace und adopt für Knoten
  • Die Konzepte Knoten sind eingefügt und Knoten sind entfernt
  • Das Konzept Attributliste
  • Die Daten eines Textknotens
  • Die Schnittstelle Event
  • Die Schnittstelle EventTarget
  • EventInit dictionary type
  • Das Attribut target
  • Das Attribut isTrusted
  • Der Typ eines Ereignisses
  • Das Konzept eines Ereignis-Listeners und des Ereignis-Listeners, der sich auf ein EventTarget bezieht
  • Das Konzept eines regulären* Ereigniselters und eines grenzüberschreitenden Ereigniselters
  • Die Verschlüsselung (hier die Zeichenverschlüsselung) und der Inhaltstype eines Dokuments
  • Der Unterschied zwischen XML-Dokumenten und HTML-Dokumenten
  • Die Begriffe Quirks-Modus, begrenzter Quirks-Modus, und kein Quirks-Modus
  • Der Algorithmus, um einen Knoten zu klonen und das Konzept Cloning-Schritte, die von jenem Algorithmus verwendet werden
  • Das Konzept von Base-URL Veränderungsschritten und die Definition, was passiert, wenn ein Element von einer Base-URL-Veränderung betroffen ist
  • Das Konzept eines einzigartigen Identifizierers (ID) eines Dokuments
  • Das Konzept eines DOM-Bereichs, und die Begriffe Start, Ende und Grenzpunkt, wie er bei Bereichen angewendet wird.
  • Die Schnittstelle MutationObserver
  • Das Konzept MutationObserver Skriptumgebung
  • Der Algorithmus MutationObserver-Objekte invoke***
  • Die Schnittstelle Promise
  • Das Konzept resolver
  • Die Algorithmen fulfill und reject
  • Attr interface
  • Comment interface
  • DOMImplementation interface
  • Document interface
  • DocumentFragment interface
  • DocumentType interface
  • DOMException interface
  • ChildNode interface
  • Element interface
  • Node interface
  • NodeList interface
  • ProcessingInstruction interface
  • Text interface
  • HTMLCollection interface
  • item() method
  • The terms collections and represented by the collection
  • DOMTokenList interface
  • DOMSettableTokenList interface
  • createDocument() method
  • createHTMLDocument() method
  • createElement() method
  • createElementNS() method
  • getElementById() method
  • insertBefore() method
  • ownerDocument attribute
  • childNodes attribute
  • localName attribute
  • parentNode attribute
  • namespaceURI attribute
  • tagName attribute
  • id attribute
  • textContent attribute
  • The insert, append, remove, replace, and adopt algorithms for nodes
  • The nodes are inserted and nodes are removed concepts
  • The attribute list concept.
  • The data of a text node.
  • Event interface
  • EventTarget interface
  • EventInit dictionary type
  • target attribute
  • isTrusted attribute
  • The type of an event
  • The concept of an event listener and the event listeners associated with an EventTarget
  • The concept of a regular event parent and a cross-boundary event parent
  • The encoding (herein the character encoding) and content type of a Document
  • The distinction between XML documents and HTML documents
  • The terms quirks mode, limited-quirks mode, and no-quirks mode
  • The algorithm to clone a Node, and the concept of cloning steps used by that algorithm
  • The concept of base URL change steps and the definition of what happens when an element is affected by a base URL change
  • The concept of an element's unique identifier (ID)
  • The concept of a DOM range, and the terms start, end, and boundary point as applied to ranges.
  • MutationObserver interface
  • The MutationObserver scripting environment concept
  • The invoke MutationObserver objects algorithm
  • Promise interface
  • The resolver concept
  • The fulfill and reject algorithms

Der Begriff auswerfen (throw) in dieser Spezifikation wird entsprechend der Definition in der DOM-Spezifikation verwendet. Die folgenden Typen einer DOMException sind in der DOM-Spezifikation definiert: [DOM]

The term throw in this specification is used as defined in the DOM specification. The following DOMException types are defined in the DOM specification: [DOM]

  1. IndexSizeError
  2. HierarchyRequestError
  3. WrongDocumentError
  4. InvalidCharacterError
  5. NoModificationAllowedError
  6. NotFoundError
  7. NotSupportedError
  8. InvalidStateError
  9. SyntaxError
  10. InvalidModificationError
  11. NamespaceError
  12. InvalidAccessError
  13. SecurityError
  14. NetworkError
  15. AbortError
  16. URLMismatchError
  17. QuotaExceededError
  18. TimeoutError
  19. InvalidNodeTypeError
  20. DataCloneError
  1. IndexSizeError
  2. HierarchyRequestError
  3. WrongDocumentError
  4. InvalidCharacterError
  5. NoModificationAllowedError
  6. NotFoundError
  7. NotSupportedError
  8. InvalidStateError
  9. SyntaxError
  10. InvalidModificationError
  11. NamespaceError
  12. InvalidAccessError
  13. SecurityError
  14. NetworkError
  15. AbortError
  16. URLMismatchError
  17. QuotaExceededError
  18. TimeoutError
  19. InvalidNodeTypeError
  20. DataCloneError

Um zum Beispiel einen TimeoutError-Ausnahmefehler auszuwerfen, würde ein Benutzeragent ein DOMException-Objekt erzeugen, dessen Typ die Zeichenkette "TimeoutError" wäre (und dessen Code aus historischen Gründen die Nummer 23 wäre), und dann dieses Objekt als Ausnahmefehler auswerfen.

For example, to throw a TimeoutError exception, a user agent would construct a DOMException object whose type was the string "TimeoutError" (and whose code was the number 23, for legacy reasons) and actually throw that object as an exception.

Der mit einem Dokument verknüpfte URL, wie in der DOM-Spezifikation definiert, wird in dieser Spezifikation als die Adresse des Dokuments bezeichnet.

The URL associated with a Document, as defined in the DOM specification, is referred to in this specification as the document's address.

Die folgenden Features sind in der DOM-Spezifikation definiert: [DOMEVENTS]

The following features are defined in the DOM Events specification: [DOMEVENTS]

  • Die Schnittstelle MouseEvent
  • Der Dictionary*-Typ MouseEventInit
  • Das detailAttribut der Schnittstelle UIEvent
  • Das Ereignis click
  • MouseEvent interface
  • MouseEventInit dictionary type
  • The UIEvent interface's detail attribute
  • click event

Diese Spezifikation verwendet zuweilen den Begriff Name, um sich auf den Typ des Ereignisses zu beziehen wie in: "ein Ereignis namens click" oder "ist der Name des Ereignisses keypress". Die Bedeutungen der Begriffe "Name" und "Typ" für Ereignisse sind gleich.

This specification sometimes uses the term name to refer to the event's type; as in, "an event named click" or "if the event name is keypress". The terms "name" and "type" for events are synonymous.

Die folgenden Features sind in der Spezifikation "DOM Parsing and Serialization" definiert: [DOMPARSING]

The following features are defined in the DOM Parsing and Serialization specification: [DOMPARSING]

  • innerHTML
  • outerHTML
  • innerHTML
  • outerHTML

Es wird für Benutzeragenten empfohlen, auch die Features zu implementieren, die in den Spezifikationen HTML Editing APIs und UndoManager and DOM Transaction beschrieben sind. [EDITING] [UNDO]

User agents are also encouraged to implement the features described in the HTML Editing APIs and UndoManager and DOM Transaction specifications. [EDITING] [UNDO]

Diese Spezifikation bezieht sich auf die folgenden Teile der Spezifikation "Fullscreen", um zu definieren wie die Fullscreen-API mit den sandbox-Features in HTML zusammenarbeitet: [FULLSCREEN]

The following parts of the Fullscreen specification are referenced from this specification to define how the Fullscreen API interacts with the sandboxing features in HTML: [FULLSCREEN]

  • Das Konzept top layer
  • requestFullscreen()
  • Die Flagge fullscreen enabled
  • Der Algorithmus fully exit fullscreen
  • The top layer concept
  • requestFullscreen()
  • The fullscreen enabled flag
  • The fully exit fullscreen algorithm
Typisierte Arrays

Die Schnittstellen ArrayBuffer und ArrayBufferView und zugrundeliegende Konzepte der Spezifikation "Typed Array" werden für mehrere Features in dieser Spezifikation verwendet. Der Schnittstellentyp Uint8ClampedArray wird insbesondere in der Definition der 2D-API des Elements canvas verwendet. [TYPEDARRAY]

The ArrayBuffer and ArrayBufferView interfaces and underlying concepts from the Typed Array Specification are used for several features in this specification. The Uint8ClampedArray interface type is specifically used in the definition of the canvas element's 2D API. [TYPEDARRAY]

File API

Diese Spezifikation verwendet die folgenden Features, die in der Spezifikation "File API" definiert sind: [FILEAPI]

This specification uses the following features defined in the File API specification: [FILEAPI]

  • Blob
  • File
  • FileList
  • Blob.close()
  • Blob.type
  • Das Konzept read error
  • Blob
  • File
  • FileList
  • Blob.close()
  • Blob.type
  • The concept of read errors
XMLHttpRequest

Diese Spezifikation bezieht sich für einige nicht normative Anmerkungen und Beispiele auf die Spezifikation XMLHttpRequest. Die folgenden Features und Begriffe sind in der Spezifikation XMLHttpRequest: [XHR]

This specification references the XMLHttpRequest specification in some non-normative notes and examples. The following features and terms are defined in the XMLHttpRequest specification: [XHR]

  • XMLHttpRequest
  • XMLHttpRequest
Progress Events

Diese Spezifikation bezieht sich auf die Spezifikation "Progress Events", um zu beschreiben wie die beiden Spezifikationen zusammenarbeiten und verwendet dessen ProgressEvent-Features. Die folgenden Features und Begriffe sind in der Spezifikation "Progress Events" definiert: [PROGRESS-EVENTS]

This specification references the Progress Events specification to describe how the two specifications interact and to use its ProgressEvent features. The following features and terms are defined in the Progress Events specification: [PROGRESS-EVENTS]

  • ProgressEvent
  • Ein Fortschrittsereignis namens e abfeuern
  • ProgressEvent
  • Fire a progress event named e
Server-Sent Events

Die folgenden Begriffe sind in "Server-Sent Events" definiert: [EVENTSOURCE]

The following terms are defined in Server-Sent Events: [EVENTSOURCE]

  • EventSource
  • forcibly close
  • EventSource
  • forcibly close
Media Queries

Implementatierungen müssen die Sprache Media Queries unterstützen. [MQ]

Implementations must support the Media Queries language. [MQ]

CSS-Module

Obwohl die vollständige Unterstützung von CSS für Implementierungen dieser Spezifikation nicht erforderlich ist (auch wenn es zumindest für Web-Browser empfohlen ist), sind einige Features im Sinne von bestimmten CSS-Anforderungen definiert.

While support for CSS as a whole is not required of implementations of this specification (though it is encouraged, at least for Web browsers), some features are defined in terms of specific CSS requirements.

Insbesondere erfordern einige Features, dass eine Zeichenkette als ein CSS <color>-Wert verarbeitet wird. Wird ein CSS-Wert verarbeitet, fordert die CSS-Spezifikation, dass einige Fehlerverarbeitungsregeln angewendet werden. Diese gelten auch für diese Spezifikation. [CSSCOLOR] [CSS]

In particular, some features require that a string be parsed as a CSS <color> value. When parsing a CSS value, user agents are required by the CSS specifications to apply some error handling rules. These apply to this specification also. [CSSCOLOR] [CSS]

Zum Beispiel wird von Benutzeragenten gefordert, alle offenen Konstrukte zu schließen, wenn das Ende eines Style Sheets unerwartet aufgefunden* wird. Demnach wird bei der Verarbeitung der Zeichenkette "rgb(0,0,0" (ohne der schließenden Klammer) für einen Farbwert, die schließende Klammer durch den Fehlerverarbeitungsmechanismus impliziert, und ein Wert wird erhalten (die Farbe 'schwarz'). Jedoch kann das ähnliche Konstrukt "rgb(0,0," (ohne Klammer und mit fehlendem Wert für "blau") nicht verarbeitet werden, da das Schließen des Konstrukts nicht zu einem brauchbaren Wert führt.

For example, user agents are required to close all open constructs upon finding the end of a style sheet unexpectedly. Thus, when parsing the string "rgb(0,0,0" (with a missing close-parenthesis) for a color value, the close parenthesis is implied by this error handling rule, and a value is obtained (the color 'black'). However, the similar construct "rgb(0,0," (with both a missing parenthesis and a missing "blue" value) cannot be parsed, as closing the open construct does not result in a viable value.

Der Begriff Verweisidentifizierer eines CSS-Elements wird entsprechend der Definition in der Spezifikation CSS Image Values and Replaced Content verwendet, um die API zu definieren, die den Identifizierer deklariert, der mit der CSS-Funktion 'element()' verwendet wird. [CSSIMAGES]

The term CSS element reference identifier is used as defined in the CSS Image Values and Replaced Content specification to define the API that declares identifiers for use with the CSS 'element()' function. [CSSIMAGES]

Ähnlich dazu wird der Begriff stellt eine Farbquelle zur Verfügung* entsprechend der Definition in der Spezifikation CSS Image Values and Replaced Content verwendet, um das Zusammenspiel von bestimmten HTML-Elementen mit der CSS-Funktion 'element()' zu definieren. [CSSIMAGES]

Similarly, the term provides a paint source is used as defined in the CSS Image Values and Replaced Content specification to define the interaction of certain HTML elements with the CSS 'element()' function. [CSSIMAGES]

Der Begriff voreingestellte Objektgröße wird auch in der Spezifikation CSS Image Values and Replaced Content definiert. [CSSIMAGES]

The term default object size is also defined in the CSS Image Values and Replaced Content specification. [CSSIMAGES]

Die Unterstützung des "CSS Object Model" ist für Implementierungen erforderlich, die Skripte unterstützen. Die folgenden Features und Begriffe sind in der CSSOM-Spezifikation definiert: [CSSOM] [CSSOMVIEW]

Support for the CSS Object Model is required for implementations that support scripting. The following features and terms are defined in the CSSOM specifications: [CSSOM] [CSSOMVIEW]

  • Screen
  • LinkStyle
  • CSSStyleDeclaration
  • Das Attribut cssText von CSSStyleDeclaration
  • StyleSheet
  • sheet
  • disabled
  • Alternative Style Sheets und die bevorzugten Style Sheets
  • Serialisierung eines CSS-Wertes
  • Ein Element in den Sichtbereich scrollen
  • Zum Anfang einse Dokuments scrollen
  • Screen
  • LinkStyle
  • CSSStyleDeclaration
  • cssText attribute of CSSStyleDeclaration
  • StyleSheet
  • sheet
  • disabled
  • Alternative style sheet sets and the preferred style sheet set
  • Serializing a CSS value
  • Scroll an element into view
  • Scroll to the beginning of the document

Der Begriff CSS Style-Attribut ist in der Spezifikation CSS Style Attributes definiert. [CSSATTR]

The term CSS styling attribute is defined in the CSS Style Attributes specification. [CSSATTR]

Die Verwendung von Schriftarten durch das Objekt CanvasRenderingContext2D hängt von den Features ab, die in den CSS-Spezifikationen Fonts und Font Load Events beschrieben sind, insbesondere einschließlich FontLoader. [CSSFONTS] [CSSFONTLOAD]

The CanvasRenderingContext2D object's use of fonts depends on the features described in the CSS Fonts and Font Load Events specifications, including in particular FontLoader. [CSSFONTS] [CSSFONTLOAD]

SVG

Die folgende Schnittstelle wird in der SVG-Spezifikation definiert: [SVG]

The following interface is defined in the SVG specification: [SVG]

  • SVGMatrix
  • SVGMatrix
WebGL

Die folgende Schnittstelle ist in der Spezifikation WebGL definiert: [WEBGL]

The following interface is defined in the WebGL specification: [WEBGL]

  • WebGLRenderingContext
  • WebGLRenderingContext
WebVTT

Implementierungen könnten WebVTT als Text Track*-Format für Untertitel, Überschriften, den Titel eines Kapitels, Metadaten usw. in Bezug auf Media-Quellen unterstützen. [WEBVTT]

Implementations may support WebVTT as a text track format for subtitles, captions, chapter titles, metadata, etc, for media resources. [WEBVTT]

Die folgenden Begriffe, die in dieser Spezifikation verwendet werden, sind in der Spezifikation WebVTT definiert:

The following terms, used in this specification, are defined in the WebVTT specification:

  • WebVTT-Datei
  • WebVTT-Datei mit CUE*-Text
  • WebVTT-Datei mit Kapiteltiteltext
  • WebVTT-Datei, die nur verschachtelte CUEs verwendet
  • WebVTT-Parser
  • Die Regeln zur Aktualisierung der Anzeige von WebVTT Text Tracks
  • Die Regeln zur Interpretierung von WebVTT CUE-Text
  • Die WebVTT Text Track CUE-Schreibrichtung
  • WebVTT file
  • WebVTT file using cue text
  • WebVTT file using chapter title text
  • WebVTT file using only nested cues
  • WebVTT parser
  • The rules for updating the display of WebVTT text tracks
  • The rules for interpreting WebVTT cue text
  • The WebVTT text track cue writing direction
Das Protokoll WebSocket

Die folgenden Begriffe sind in der Spezifikation WebSocket-Protokoll definiert: [WSP]

The following terms are defined in the WebSocket protocol specification: [WSP]

  • eine WebSocket-Verbindung herstellen
  • die WebSocket-Verbindung ist hergestellt
  • validieren die Antwort des Servers
  • verwendete Erweiterungen
  • verwendetes Unterprotokoll
  • Header, um passende Cookies zu senden
  • gesetzte Cookies während des ersten Handshakes
  • eine WebSocket-Nachricht wurde empfangen
  • fail* die WebSocket-Verbindung
  • schließe die WebSocket-Verbindung
  • beginne den schließenden WebSocket-Handshake
  • der schließende WebSocket-Handshake hat begonnen
  • die WebSocket-Verbindung ist geschlossen (möglicherweise sauber)
  • der Code für "die WebSocket-Verbindung ist geschlossen
  • der Grund für "die WebSocket-Verbindung ist geschlossen
  • establish a WebSocket connection
  • the WebSocket connection is established
  • validate the server's response
  • extensions in use
  • subprotocol in use
  • headers to send appropriate cookies
  • cookies set during the server's opening handshake
  • a WebSocket message has been received
  • fail the WebSocket connection
  • close the WebSocket connection
  • start the WebSocket closing handshake
  • the WebSocket closing handshake is started
  • the WebSocket connection is closed (possibly cleanly)
  • the WebSocket connection close code
  • the WebSocket connection close reason
Web Workers

Die folgenden Begriffe sind in Web Workers definiert: [WEBWORKERS]

The following terms are defined in Web Workers: [WEBWORKERS]

  • Worker
  • closing
2D Context

Die folgenden Begriffe sind in 2D Context definiert: [CANVAS2D]

The following terms are defined in 2D Context: [CANVAS2D]

  • Bitmap-Größe angeben
Web Messaging

Die folgenden Begriffe sind in Web Messaging definiert: [WEBMSG]

The following terms are defined in Web Messaging: [WEBMSG]

  • MessagePort
ARIA

Die Begriffe strong native semantics wird entsprechend der Definition in der ARIA-Spezifikation verwendet. Der Begriffvoreingestellte implizite ARIA-Semantiken hat die gleiche Bedeutung wie der Begriff implizite WAI-ARIA-Semantiken wie er in der ARIA-Spezifikation verwendet wird. [ARIA]

The terms strong native semantics is used as defined in the ARIA specification. The term default implicit ARIA semantics has the same meaning as the term implicit WAI-ARIA semantics as used in the ARIA specification. [ARIA]

Die Attribute role und aria-* sind in der ARIA-Spezifikation definiert. [ARIA]

The role and aria-* attributes are defined in the ARIA specification. [ARIA]

Diese Spezifikation erfordert keine Unterstützung eines bestimmten Netzwerkprotokolls, einer bestimmten Style Sheet-Sprache, Skript-Sprache oder irgendwelche der DOM-Spezifikationen, die über die in der obigen Liste erforderlichen hinausgehen. Jedoch ist die Sprache, die in dieser Spezifikation beschrieben wird, auf CSS als Stilsprache, JavaScript als Skript-Sprache und HTTP als Netzwerkprotokoll vorbelastet und viele Features gehen davon aus, dass diese Sprachen und Protokolle verwendet werden.

This specification does not require support of any particular network protocol, style sheet language, scripting language, or any of the DOM specifications beyond those required in the list above. However, the language described by this specification is biased towards CSS as the styling language, JavaScript as the scripting language, and HTTP as the network protocol, and several features assume that those languages and protocols are in use.

Ein Benutzeragent, der das HTTP-Protokoll implementiert, muss die Spezifikation "Web Origin Concept" und die Spezifikation "HTTP State Management Mechanism" (Cookies) ebenfalls implementieren. [HTTP] [ORIGIN] [COOKIES]

A user agent that implements the HTTP protocol must implement the Web Origin Concept specification and the HTTP State Management Mechanism specification (Cookies) as well. [HTTP] [ORIGIN] [COOKIES]

Diese Spezifikation könnte bestimmte zusätzliche Anforderungen an Zeichenverschlüsselungen, Bildformate, Audioformate und Videoformate in den diesbezüglichen Abschnitten haben.

This specification might have certain additional requirements on character encodings, image formats, audio formats, and video formats in the respective sections.

2.2.3 Erweiterbarkeit

Von anbieterspezifischen proprietären Erweiterungen dieser Spezifikation für Benutzeragenten wird dringlichst abgeraten. Dokumente sollten solche Erweiterungen nicht verwenden, da dieses die Interoperabilität verringert und die Benutzerbasis fragmentiert, da nur Benutzern bestimmter Benutzeragenten Zugang zum infragekommenden Inhalt gestattet wird.

Vendor-specific proprietary user agent extensions to this specification are strongly discouraged. Documents must not use such extensions, as doing so reduces interoperability and fragments the user base, allowing only users of specific user agents to access the content in question.

Werden solche Erweiterungen dennoch gebraucht, zum Beispiel für experimentelle Zwecke, dann werden die Anbieter dringend gebeten, einen der folgenden Mechanismen zu verwenden:

If such extensions are nonetheless needed, e.g. for experimental purposes, then vendors are strongly urged to use one of the following extension mechanisms:

Attributnamen, die mit den beiden Zeichen "x-" beginnen, sind für die Verwendung durch Benutzeragenten reserviert und werden garantiert niemals formell zur HTML-Sprache hinzugefügt. Aus Gründen der Flexibilität sind auch Attributnamen mit Unterstrichen (das Zeichen U+005F LOW LINE) für experimentelle Zwecke reserviert und werden garantiert niemals formal zu der HTML-Sprache hinzugefügt.

Attribute names beginning with the two characters "x-" are reserved for user agent use and are guaranteed to never be formally added to the HTML language. For flexibility, attributes names containing underscores (the U+005F LOW LINE character) are also reserved for experimental purposes and are guaranteed to never be formally added to the HTML language.

Seiten, die solche Attribute verwenden, sind per Definition nicht konform.

Pages that use such attributes are by definition non-conforming.

Neue DOM-Erweiterungen, wie zum Beispiel neue Methoden und IDL-Attribute, sollten mit einem anbieterspezifischen Präfix versehen werden, um Kollisionen mit zukünftigen Versionen dieser Spezifikation zu vermeiden.

For DOM extensions, e.g. new methods and IDL attributes, the new members should be prefixed by vendor-specific strings to prevent clashes with future versions of this specification.

Experimentelle Ereignistypen sollten mit einem anbieterspezifischen Präfix versehen werden.

For events, experimental event types should be prefixed with vendor-specific strings.

Würde zum Beispiel ein Benutzeragent namens "Bittalt" ein Ereignis hinzufügen, wenn ein Benutzer in einem Aufzug nach oben fährt, könnte er das Präfix "bittalt" verwenden und dementsprechend das Ereignis "bittaltgehtrauf" nennen, möglicherweise mit einem Ereignis-Handler namens "onbittaltgehtrauf". Crazy peoplez examples.

For example, if a user agent called "Pleasold" were to add an event to indicate when the user is going up in an elevator, it could use the prefix "bittalt" and thus name the event "bittaltgoingup", possibly with an event handler attribute named "onbittaltgoingup".

Alle Erweiterungen müssen so definiert sein, dass die Verwendung von Erweiterungen weder Funktionalitäten widerspricht, noch unkonform zu Funktionalitäten ist, die in dieser Spezifikation definiert sind.

All extensions must be defined so that the use of extensions neither contradicts nor causes the non-conformance of functionality defined in the specification.

Auch wenn schärfstens davon abgeraten wird, könnte eine Implementierung "Foo Browser" zum Beispiel ein neues IDL-Attribut "fooTypeTime" zur DOM-Schnittstelle eines Kontrollelements hinzufügen, das die Zeit zurückgibt, die der Benutzer gebraucht hat, um den aktuellen Wert des Kontrollelements auszuwählen. Auf der anderen Seite würde die Definition eines neuen Kontrollelements, das im Elementarray eines Formulars auftaucht, eine Verletzung der oben genannten Anforderung sein, da es die Definition von Elementen, die in dieser Spezifikation gegeben sind, verletzen würde.

For example, while strongly discouraged from doing so, an implementation "Foo Browser" could add a new IDL attribute "fooTypeTime" to a control's DOM interface that returned the time it took the user to select the current value of a control (say). On the other hand, defining a new control that appears in a form's elements array would be in violation of the above requirement, as it would violate the definition of elements given in this specification.

Werden neue reflektierende* IDL-Attribute hinzugefügt, die sich auf Inhaltsattribute der Art "x-vendor-feature" beziehen, sollten die IDL-Attribute "vendorFeature" genannt werden (das bedeutet, das "x" wird vom IDL-Attributnamen abgeschnitten).

When adding new reflecting IDL attributes corresponding to content attributes of the form "x-vendor-feature", the IDL attribute should be named "vendorFeature" (i.e. the "x" is dropped from the IDL attribute's name).


Werden anbieterneutrale Erweiterungen zu dieser Spezifikation benötigt, kann entweder diese Spezifikation aktualisiert werden oder es kann eine Erweiterungsspezifikation geschrieben werden, welche die Anforderungen in dieser Spezifikation überschreibt. Wenn jemand, der diese Spezifikation zu seinen Aktivitäten hinzuzufügt, beschließt, auch die Anforderungen der Erweiterungsspezifikation anzuerkennen, dann wird sie eine angewendete Spezifikation.

When vendor-neutral extensions to this specification are needed, either this specification can be updated accordingly, or an extension specification can be written that overrides the requirements in this specification. When someone applying this specification to their activities decides that they will recognize the requirements of such an extension specification, it becomes an applicable specification.

Die Konformitätsterminologie für Dokumente hängt von der Natur der Änderungen ab, die von solch anwendbaren Spezifikationen eingeführt wurden und vom Inhalt und der beabsichtigten Interpretation des Dokuments. Anwendbare Spezifikationen KÖNNTEN neuen Dokumentinhalt definieren (zum Beispiel ein foobar-Element), KÖNNTEN bestimmten ansonsten konformen Inhalt verbieten (zum Beispiel den Gebrauch von <table>) oder KÖNNTEN die Semantiken, DOM-Abbildungen oder andere Verarbeitungsregeln für Inhalte verändern, die in dieser Spezifikation definiert sind. Ob ein Dokument ein konformes HTML5-Dokument ist oder nicht, hängt nicht vom Gebrauch von angewendeten Spezifikationen ab: sind die Syntax und Semantiken eines gegebenen konformen HTML5-Dokuments durch die Verwendung von angewendeten Spezifikationen unverändert, dann bleibt dieses Dokument ein konformes HTML5-Dokument. Wird die Semantik oder die Verarbeitung eines gegebenen (ansonsten konformen) Dokuments durch die Verwendung der angewendeten Spezifikationen verändert, dann ist es kein konformes HTML5-Dokument. In solchen Fällen SOLLTE die anwendbare Spezifikation Konformitätsterminologie definieren.

The conformance terminology for documents depends on the nature of the changes introduced by such applicable specifications, and on the content and intended interpretation of the document. Applicable specifications MAY define new document content (e.g. a foobar element), MAY prohibit certain otherwise conforming content (e.g. prohibit use of <table>s), or MAY change the semantics, DOM mappings, or other processing rules for content defined in this specification. Whether a document is or is not a conforming HTML5 document does not depend on the use of applicable specifications: if the syntax and semantics of a given conforming HTML5 document is unchanged by the use of applicable specification(s), then that document remains a conforming HTML5 document. If the semantics or processing of a given (otherwise conforming) document is changed by use of applicable specification(s), then it is not a conforming HTML5 document. For such cases, the applicable specifications SHOULD define conformance terminology.

Als eine vorgeschlagene, aber nicht erforderliche Konvention könnten solche Spezifikationen eine Konformitätsterminologie wie folgt definieren: "Konformes HTML5+XXX Dokument", hierbei ist XXX ein kurzer Name für die anwendbare Spezifikation. (Beispiel: "Konformes HTML5+AutomotiveExtensions Dokument").

As a suggested but not required convention, such specifications might define conformance terminology such as: "Conforming HTML5+XXX document", where XXX is a short name for the applicable specification. (Example: "Conforming HTML5+AutomotiveExtensions document").

Eine Konsequenz aus der oben gegebenen Regel ist, dass bestimmte syntaktisch korrekte HTML5-Dokumente in Gegenwart von angewendeten Spezifikationen keine konformen HTML5-Dokumente sein könnten. (Beispiel: die angewendete Spezifikation definiert, das <table> ein Möbelstück ist - ein Dokument, das entsprechend jener Spezifikation geschrieben ist und ein <table>-Element enthält, ist KEIN konformes HTML5-Dokument, auch wenn das Element syntaktisch richtiges HTML5 ist.)

a consequence of the rule given above is that certain syntactically correct HTML5 documents may not be conforming HTML5 documents in the presence of applicable specifications. (Example: the applicable specification defines <table> to be a piece of furniture — a document written to that specification and containing a <table> element is NOT a conforming HTML5 document, even if the element happens to be syntactically correct HTML5.)


Benutzeragenten müssen Elemente und Attribute, die sie nicht verstehen, als semantisch neutral behandeln; sie werden im DOM belassen (für DOM-Prozessoren) und nach dem CSS aufpoliert (für CSS-Prozessoren), aber es wir keine Bedeutung von ihnen abgeleitet.

User agents must treat elements and attributes that they do not understand as semantically neutral; leaving them in the DOM (for DOM processors), and styling them according to CSS (for CSS processors), but not inferring any meaning from them.

Wird die Unterstützung für ein Feature abgeschaltet (zum Beispiel als eine Notfallmaßnahme, um ein Sicherheitsproblem zu umgehen oder in der Entwicklung zu helfen oder aus Performance-Gründen), müssen sich Bentzteragenten so verhalten, als hätten sie in keinster Weise Unterstützung for dieses Feature, und als wäre das Feature in dieser Spezifikation nicht erwähnt. Wird auf ein bestimmtes Feature zum Beispiel über ein Attribut in der Web IDL-Schnittstelle zugegriffen, würde das Attribut selbst von den Objekten, die jene Schnittstelle implementieren, ausgelassen - das Attribut beim Objekt zu belassen und es Null zurückgeben oder einen Ausnahmefehler ausgeben zu lassen, ist nicht ausreichend.

When support for a feature is disabled (e.g. as an emergency measure to mitigate a security problem, or to aid in development, or for performance reasons), user agents must act as if they had no support for the feature whatsoever, and as if the feature was not mentioned in this specification. For example, if a particular feature is accessed via an attribute in a Web IDL interface, the attribute itself would be omitted from the objects that implement that interface — leaving the attribute on the object but making it return null or throw an exception is insufficient.

2.2.4 Zusammenarbeit mit XPath und XSLT

Implementatierungen von XPath 1.0, die mit HTML-Dokumenten arbeiten, die nach Regeln verarbeitet oder erzeugt werden, die in dieser Spezifikation beschrieben sind (zum Beispiel als Teil der API document.evaluate()), müssen sich so verhalten, als wäre die folgende Änderung an der XPath 1.0-Spezifikation vorgenommen worden.

Implementations of XPath 1.0 that operate on HTML documents parsed or created in the manners described in this specification (e.g. as part of the document.evaluate() API) must act as if the following edit was applied to the XPath 1.0 specification.

Entferne zuerst diesen Absatz:

First, remove this paragraph:

A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. This is the same way expansion is done for element type names in start and end-tags except that the default namespace declared with xmlns is not used: if the QName does not have a prefix, then the namespace URI is null (this is the same way attribute names are expanded). It is an error if the QName has a prefix for which there is no namespace declaration in the expression context.

A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. This is the same way expansion is done for element type names in start and end-tags except that the default namespace declared with xmlns is not used: if the QName does not have a prefix, then the namespace URI is null (this is the same way attribute names are expanded). It is an error if the QName has a prefix for which there is no namespace declaration in the expression context.

Dann füge stattdessen das Folgende ein:

Then, insert in its place the following:

A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. If the QName has a prefix, then there must be a namespace declaration for this prefix in the expression context, and the corresponding namespace URI is the one that is associated with this prefix. It is an error if the QName has a prefix for which there is no namespace declaration in the expression context.

A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. If the QName has a prefix, then there must be a namespace declaration for this prefix in the expression context, and the corresponding namespace URI is the one that is associated with this prefix. It is an error if the QName has a prefix for which there is no namespace declaration in the expression context.

If the QName has no prefix and the principal node type of the axis is element, then the default element namespace is used. Otherwise if the QName has no prefix, the namespace URI is null. The default element namespace is a member of the context for the XPath expression. The value of the default element namespace when executing an XPath expression through the DOM3 XPath API is determined in the following way:

If the QName has no prefix and the principal node type of the axis is element, then the default element namespace is used. Otherwise if the QName has no prefix, the namespace URI is null. The default element namespace is a member of the context for the XPath expression. The value of the default element namespace when executing an XPath expression through the DOM3 XPath API is determined in the following way:

  1. Ist der Kontextknoten aus dem HTML-DOM, ist der voreingestellte Elementnamensraum "http://www.w3.org/1999/xhtml".
  2. Ansonsten ist der voreingestellte Elementnamensraum-URI Null.
  1. If the context node is from an HTML DOM, the default element namespace is "http://www.w3.org/1999/xhtml".
  2. Otherwise, the default element namespace URI is null.

Dies ist äquivalent dazu, das Feature des voreingestellten Elementnamensraumes von XPath 2.0 zu XPath 1.0 hinzuzufügen und den HTML-Namensraum als voreingestellten Elementnamensraum für HTML-Dokumente zu verwenden. Dies wurde durch den Wunsch motiviert, dass Implementierungen zu älterem HTML-Inhalt kompatibel bleiben, und dennoch die Änderungen an HTML in Bezug auf den Namensraum für HMTL-Elemente unterstützen, die in dieser Spezifiktation eingeführt wurden. Und aus dem Wunsch heraus, XPath 1.0 statt XPath 2.0 zu verwenden. *** [Comment awaited]

This is equivalent to adding the default element namespace feature of XPath 2.0 to XPath 1.0, and using the HTML namespace as the default element namespace for HTML documents. It is motivated by the desire to have implementations be compatible with legacy HTML content while still supporting the changes that this specification introduces to HTML regarding the namespace used for HTML elements, and by the desire to use XPath 1.0 rather than XPath 2.0.

Diese Änderung ist ein absichtlicher Verstoß gegen die XPath 1.0-Spezifikation, motiviert durch den Wunsch, dass Implementierungen kompatibel zu altem Inhalt bleiben, und dennoch die Änderungen unterstützen, die diese Spezifikation in Bezug auf die Wahl des Namensraums für HTML-Elemente zu HTML hinzugefügt hat. [XPATH10]

This change is a willful violation of the XPath 1.0 specification, motivated by desire to have implementations be compatible with legacy content while still supporting the changes that this specification introduces to HTML regarding which namespace is used for HTML elements. [XPATH10]


XSLT 1.0-Prozessoren, die Ausgaben in ein DOM machen, wenn die Ausgabemethode "html" ist (entweder explizit oder durch die voreingestellte Regel in XSLT 1.0), sind wie folgt betroffen:

XSLT 1.0 processors outputting to a DOM when the output method is "html" (either explicitly or via the defaulting rule in XSLT 1.0) are affected as follows:

Gibt das Transformationsprogramm ein Element nicht in einen Namensraum aus, muss der Prozessor vor der Konstruktion des entsprechenden DOM-Elementknotens, den Namensraum des Elements in den HTML-Namensraum ändern, den lokalen Namen des Elements in ASCII-Kleinschreibung ändern und den Namen jedes Attributs im Element ohne Namensraum in ASCII-Kleinschreibung verändern.

If the transformation program outputs an element in no namespace, the processor must, prior to constructing the corresponding DOM element node, change the namespace of the element to the HTML namespace, ASCII-lowercase the element's local name, and ASCII-lowercase the names of any non-namespaced attributes on the element.

Diese Anforderung ist ein absichtlicher Verstoß gegen die Spezifikation XSLT 1.0. Der Verstoß ist erforderlich, weil diese Spezifikation die Regeln für Namensräume und die Groß- und Kleinschreibung für HTML auf eine Weise ändert, die ansonsten nicht kompatibel mit DOM-basierten XSLT-Transformationen sein würde. (Prozessoren, die die Ausgabe serialisieren, sind davon nicht betroffen.) [XSLT10]

This requirement is a willful violation of the XSLT 1.0 specification, required because this specification changes the namespaces and case-sensitivity rules of HTML in a manner that would otherwise be incompatible with DOM-based XSLT transformations. (Processors that serialize the output are unaffected.) [XSLT10]


Diese Spezifikation gibt nicht präzise an, wie die XSLT-Verarbeitung mit der Infrastruktur von HTML-Parsern zusammenarbeitet (zum Beispiel, ob sich ein XSLT-Prozessor so verhält, als setze er alle Elemente in einen Stapel mit offenen Elementen*). Jedoch müssen XSLT-Prozessoren die Verarbeitung einstellen, wenn sie erfolgreich abschließen und müssen die aktuelle Dokument-Readiness*** zuerst auf "interaktiv" und dann auf "vollständig" setzen, wenn ihre Verarbeitung abgebrochen wird.

This specification does not specify precisely how XSLT processing interacts with the HTML parser infrastructure (for example, whether an XSLT processor acts as if it puts any elements into a stack of open elements). However, XSLT processors must stop parsing if they successfully complete, and must set the current document readiness first to "interactive" and then to "complete" if they are aborted.


Diese Spezifikation gibt nicht an, wie XSLT mit dem Algorithmus Navigation zusammenarbeitet, wie sie mit dem event loop zusammenpasst, noch, wie Fehlerseiten zu behandeln sind (zum Beispiel ob XSLT-Fehler inkrementelle XSLT-Ausgaben ersetzen oder ob sie im Lauftext dargestellt werden usw.).

This specification does not specify how XSLT interacts with the navigation algorithm, how it fits in with the event loop, nor how error pages are to be handled (e.g. whether XSLT errors are to replace an incremental XSLT output, or are rendered inline, etc).

Es gibt auch zusätzliche nicht normative Kommentare bezüglich des Zusammenspiels von XSLT und HTML im Abschnitt script-Element und von XSLT, XPath und HTML im Abschnitt template-Element.

There are also additional non-normative comments regarding the interaction of XSLT and HTML in the script element section, and of XSLT, XPath, and HTML in the template element section.

2.3 Groß- und Kleinschreibung und Zeichenkettenvergleiche

Zwei Zeichenketten in Bezug auf die Groß- und Kleinschreibung zu vergleichen, bedeutet, sie genau von Code-Punkt zu Code-Punkt zu untersuchen.

Comparing two strings in a case-sensitive manner means comparing them exactly, code point for code point.

Zwei Zeichenketten ohne Rücksicht auf die Groß- und Kleinschreibung nach ASCII zu vergleichen, bedeutet, sie genau von Code-Punkt zu Code-Punkt zu vergleichen, mit der Ausnahme, dass die Zeichen aus dem Bereich U+0041 bis U+005A (d.h. lateinische Großbuchstaben von A bis Z) und die entsprechenden Zeichen im Bereich U+0061 bis U+007A (d.h. lateinische Kleinbuchstaben von A bis Z) als gleich angesehen werden*.

Comparing two strings in an ASCII case-insensitive manner means comparing them exactly, code point for code point, except that the characters in the range U+0041 to U+005A (i.e. LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z) and the corresponding characters in the range U+0061 to U+007A (i.e. LATIN SMALL LETTER A to LATIN SMALL LETTER Z) are considered to also match.

Zwei Zeichenketten in der Weise compatibility caseless zu vergleichen, bedeutet, die Unicode-Operation compatibility caseless match zu verwenden, um zwei Zeichenketten ohne sprachspezifische Anpassungen zu vergleichen. [UNICODE]

Comparing two strings in a compatibility caseless manner means using the Unicode compatibility caseless match operation to compare the two strings, with no language-specific tailoirings. [UNICODE]

Es sei denn, es ist anders angegeben, muss ein Zeichenkettenvergleich mit Rücksicht auf die Groß- und Keinschreibung ausgeführt werden.

Except where otherwise stated, string comparisons must be performed in a case-sensitive manner.

Eine Zeichenkette zu ASCII-Großschreibung zu konvertieren bedeutet, alle Zeichen im Bereich von U+0061 bis U+007A (d.h. lateinische Kleinbuchstaben von A bis Z) durch die entsprechenden Zeichen im Bereich von U+0041 bis U+005A (d.h. lateinische Großbuchstaben von A bis Z) zu ersetzen.

Converting a string to ASCII uppercase means replacing all characters in the range U+0061 to U+007A (i.e. LATIN SMALL LETTER A to LATIN SMALL LETTER Z) with the corresponding characters in the range U+0041 to U+005A (i.e. LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z).

Eine Zeichenkette zu ASCII-Kleinschreibung zu konvertieren, bedeutet, alle Zeichen im Bereich von U+0041 bis U+005A (d.h. lateinische Großbuchstaben von A bis Z) mit den entsprechenden Zeichen im Bereich von U+0061 bis U+007A (d.h. lateinische Kleinbuchstaben von A bis Z) zu ersetzen.

Converting a string to ASCII lowercase means replacing all characters in the range U+0041 to U+005A (i.e. LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z) with the corresponding characters in the range U+0061 to U+007A (i.e. LATIN SMALL LETTER A to LATIN SMALL LETTER Z).

Eine Zeichenkette pattern ist ein Präfix-Treffer für eine Zeichenkette s, wenn pattern nicht länger ist als s und ein Abtrennen von s nach der Länge von pattern zwei Zeichenketten übrig lässt, die übereinstimmen*.

A string pattern is a prefix match for a string s when pattern is not longer than s and truncating s to pattern's length leaves the two strings as matches of each other.

2.4 Bekannte Mikrosyntaxen*

Es gibt viele Stellen in HTML, die einen bestimmten Datentypen akzeptieren wie Datumsangaben oder Zahlen. Dieser Abschnitt beschreibt, welche Konformtitätskriterien für solche Formate gelten und wie sie zu verarbeiten sind.

There are various places in HTML that accept particular data types, such as dates or numbers. This section describes what the conformance criteria for content in those formats is, and how to parse them.

Implementierer werden dringend gebeten, Bibliotheken von Drittanbietern, die sie verwenden möchten, um die Verarbeitung von unten beschriebenen Syntaxen zu implementieren, sorgfältig zu überprüfen. Zum Beispiel ist es wahrscheinlich, dass in Datumsbibliotheken eine andere Fehlerverarbeitung implementiert ist, als in dieser Spezifikation gefordert wird, da die Fehlerverarbeitung in Spezifikationen, die ähnliche Datumssyntaxen beschreiben, wie sie in dieser Spezifikation verwendet werden, oft nicht definiert ist. Deshalb verhalten sich Implementierungen oft grundverschieden in Bezug auf dem Umgang mit Fehlern.

Implementors are strongly urged to carefully examine any third-party libraries they might consider using to implement the parsing of syntaxes described below. For example, date libraries are likely to implement error handling behavior that differs from what is required in this specification, since error-handling behavior is often not defined in specifications that describe date syntaxes similar to those used in this specification, and thus implementations tend to vary greatly in how they handle errors.

2.4.1 Gebräuchliche Parser-Idiome

Die Leerzeichen für den Zweck dieser Spezifikation sind U+0020 SPACE, "tab" (U+0009), "LF" (U+000A), "FF" (U+000C) und "CR" (U+000D).

The Leerzeichen, for the purposes of this specification, are U+0020 SPACE, "tab" (U+0009), "LF" (U+000A), "FF" (U+000C), and "CR" (U+000D).

Die "White_Space" Leerzeichen sind diejenigen mit der Unicode-Eigenschaft "White_Space" in der Unicode-Datei PropList.txt. [UNICODE]

The White_Space characters are those that have the Unicode property "White_Space" in the Unicode PropList.txt data file. [UNICODE]

Dies sollte nicht mit dem Wert "White_Space" (kurz "WS") verwechselt werden, der ein Wert der Eigenschaft "Bidi_Class" in der Datei Unicode.txt ist.

This should not be confused with the "White_Space" value (abbreviated "WS") of the "Bidi_Class" property in the Unicode.txt data file.

Kontrollzeichen sind diejenigen Zeichen, deren Unicode-Eigenschaft "General_Category" den Wert "Cc" in der Unicode-Datei UnicodeData.txt hat. [UNICODE]

The control characters are those whose Unicode "General_Category" property has the value "Cc" in the Unicode UnicodeData.txt data file. [UNICODE]

Großgeschriebene ASCII-Buchstaben sind die Zeichen im Bereich großgeschriebene ASCII-Buchstaben.

The uppercase ASCII letters are the characters in the range uppercase ASCII letters.

Kleingeschriebene ASCII-Buchstaben sind die Zeichen im Bereich kleingeschriebene ASCII-Buchstaben.

The lowercase ASCII letters are the characters in the range lowercase ASCII letters.

ASCII-Ziffern sind die Zeichen im Bereich ASCII-Ziffern.

The ASCII-Ziffern are the characters in the range ASCII-Ziffern.

Alphanummerische ASCII-Zeichen sind solche, die entweder großgeschriebene ASCII-Buchstaben, kleingeschriebene ASCII-Buchstaben oder ASCII-Ziffern sind.

The alphanumeric ASCII characters are those that are either uppercase ASCII letters, lowercase ASCII letters, or ASCII-Ziffern.

Die ASCII-Hexaziffern* sind die Zeichen in den Bereichen ASCII-Ziffern, lateinischer Großbuchstabe A (U+0041) bis lateinischer Großbuchstabe F (U+0046) und lateinischer Kleinbuchstabe A (U+0061) bis lateinischer Kleinbuchstabe F (U+0066).

The ASCII hex digits are the characters in the ranges ASCII-Ziffern, U+0041 LATIN CAPITAL LETTER A to U+0046 LATIN CAPITAL LETTER F, and U+0061 LATIN SMALL LETTER A to U+0066 LATIN SMALL LETTER F.

Großgeschriebene ASCII-Hexaziffern sind nur die Zeichen in den Bereichen ASCII-Ziffern und lateinischer Großbuchstabe A (U+0041) bis lateinischer Großbuchstabe F (U+0046).

The uppercase ASCII hex digits are the characters in the ranges ASCII-Ziffern and U+0041 LATIN CAPITAL LETTER A to U+0046 LATIN CAPITAL LETTER F only.

Kleingeschriebene ASCII-Hexaziffern sind nur die Zeichen in den Bereichen ASCII-Ziffern und lateinischer Kleinbuchstabe A (U+0061) bis lateinischer Kleinbuchstabe F (U+0066).

The lowercase ASCII hex digits are the characters in the ranges ASCII-Ziffern and U+0061 LATIN SMALL LETTER A to U+0066 LATIN SMALL LETTER F only.

Einige der unten beschriebenen Mikroparser folgen dem Muster, eine input-Variable zu besitzen, welche die zu verarbeitende Zeichenkette vorhält, und eine position-Variable zu besitzen, die auf das nächste Zeichen zeigt, das in input verarbeitet werden soll.

Some of the micro-parsers described below follow the pattern of having an input variable that holds the string being parsed, and having a position variable pointing at the next character to parse in input.

Für Parser, die nach diesem Muser vorgehen, bedeutet "ein Schritt, der vom Benutzeragenten fordert, eine Zeichensequenz zu sammeln", dass nach dem folgenden Algorithmus gearbeitet wird. Zeichen sind hierbei eine Menge von Zeichen, die gesammelt werden können:

For parsers based on this pattern, a step that requires the user agent to collect a sequence of characters means that the following algorithm must be run, with characters being the set of characters that can be collected:

  1. Lass input und position die gleichen Variablen sein wie die mit dem gleichen Namen im Algorithmus, der diesen Schritt aufgerufen hat.

  2. Lass result die leere Zeichenkette sein.

  3. Während position nicht über das Ende von input hinauszeigt und das Zeichen bei position eines der Zeichen ist, hänge jenes Zeichen an das Ende von result und rücke position weiter zum nächsten Zeichen in input.

  4. Gib result aus.

  1. Let input and position be the same variables as those of the same name in the algorithm that invoked these steps.

  2. Let result be the empty string.

  3. While position doesn't point past the end of input and the character at position is one of the characters, append that character to the end of result and advance position to the next character in input.

  4. Return result.

Der Schritt übergehe Leerzeichen bedeutet, dass der Benutzeragent eine Zeichensequenz sammeln muss, die aus Leerzeichen besteht. Die gesammelten Zeichen werden nicht verwendet.

The step skip whitespace means that the user agent must collect a sequence of characters that are Leerzeichen. The collected characters are not used.

Muss ein Benutzeragent von einer Zeichenkette die Zeilenumbrüche entfernen, dann muss der Benutzeragent alle Zeichen "LF" (U+000A) und "CR" (U+000D) aus dieser Zeichenkette entfernen.

When a user agent is to strip line breaks from a string, the user agent must remove any "LF" (U+000A) and "CR" (U+000D) characters from that string.

Muss ein Benutzeragent von einer Zeichenkette führende und nachfolgende Leerzeichen entfernen, dann muss der Benutzeragent alle Leerzeichen entfernen, die zu Beginn und am Ende einer Zeichenkett stehen.

When a user agent is to strip leading and trailing whitespace from a string, the user agent must remove all Leerzeichen that are at the start or end of the string.

Muss ein Benutzeragent in einer Zeichenkette Leerzeichen entfernen und zusammenführen, dann muss er jede Sequenz mit einem oder mehreren aufeinanderfolgenden Leerzeichen in dieser Zeichenkette mit einem einzigen Leerzeichen U+0020 ersetzen und dann von dieser Zeichenkette führende und nachfolgende Leerzeichen entfernen.

When a user agent is to strip and collapse whitespace in a string, it must replace any sequence of one or more consecutive Leerzeichen in that string with a single U+0020 SPACE character, and then strip leading and trailing whitespace from that string.

Muss ein Benutzeragent an einem bestimmten Begrenzungszeichen delimiter eine Zeichenkette unbedingt teilen , dann muss der folgende Algorithmus verwendet werden:

When a user agent has to strictly split a string on a particular delimiter character delimiter, it must use the following algorithm:

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger sein, der in input hineinzeigt, anfangs auf den Beginn der Zeichenkette.

  3. Lass tokens eine geordnete Liste mit Token (Zeichen) sein, anfangs leer.

  4. Während position nicht über das Ende von input hinauszeigt:

    1. Sammle eine Zeichensequenz, deren Zeichen nicht das delimiter-Zeichen sind.

    2. Hänge die im vorhergehenden Schritt gesammelte Zeichenkette an tokens.

    3. Rücke position zum nächsten Zeichen in input.

  5. Gib tokens zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let tokens be an ordered list of tokens, initially empty.

  4. While position is not past the end of input:

    1. Collect a sequence of characters that are not the delimiter character.

    2. Append the string collected in the previous step to tokens.

    3. Advance position to the next character in input.

  5. Return tokens.

In den besonderen Fällen, in denen eine Zeichenkette an Leerzeichen und an Kommata getrennt wird, gilt dieser Algorithmus nicht (jene Algorithmen führen auch das Abschneiden von Leerzeichen aus).

For the special cases of splitting a string on spaces and on commas, this algorithm does not apply (those algorithms also perform whitespace trimming).

2.4.2 Boolesche Attribute

Einige Attribute sind boolesche Attribute. Die Anwesenheit eines booleschen Attributs in einem Element repräsentiert den Wert wahr und die Abwesenheit des Attributs repräsentiert den Wert falsch.

A number of attributes are boolean attributes. The presence of a boolean attribute on an element represents the true value, and the absence of the attribute represents the false value.

Ist das Attribut vorhanden, muss sein Wert entweder eine leere Zeichenkette sein oder ein ASCII-Wert, der unabhängig von der Groß- und Kleinschreibung ein Treffer für den kononischen Namen des Attributs ist, ohne führende oder nachfolgende Leerzeichen.

If the attribute is present, its value must either be the empty string or a value that is an ASCII case-insensitive match for the attribute's canonical name, with no leading or trailing whitespace.

Die Werte "true" (wahr) und "false" (falsch) sind für boolesche Attribute nicht gestattet. Um den Wert falsch zu repräsentieren, darf das Attribut überhaupt nicht erscheinen.

The values "true" and "false" are not allowed on boolean attributes. To represent a false value, the attribute has to be omitted altogether.

Hier ist ein Beispiel einer Auswahlbox, die markiert und ausgeschaltet ist. Die Attribute checked und disabled sind die booleschen Attribute.

Here is an example of a checkbox that is checked and disabled. The checked and disabled attributes are the boolean attributes.

<label><input type=checkbox checked name=cheese disabled> Cheese</label>
<label><input type=checkbox checked name=cheese disabled> Cheese</label>

Dies könnte äquivalent wie folgt geschrieben werden:

This could be equivalently written as this:

<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>
<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>

Sie können Stile auch mischen; das Folgende ist auch äquivalent:

You can also mix styles; the following is still equivalent:

<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>
<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

2.4.3 Schlüsselworte und enumerated* Attribute

Einige Attribute sind so definiert, dass sie ein Schlüsselwort aus einer begrenzten Menge von Schlüsselworten annehmen. Solche Attribute werden enumerated* Attribute genannt. Jedes Schlüsselwort ist definiert, einen bestimmten Zustand zu repräsentieren (mehrere Schlüsselworte könnten den gleichen Zustand repräsentieren, in welchem Fall die Schlüsselworte Synonyme sind; zusätzlich kann von einigen Schlüsselworten gesagt werden, dass sie nicht konform sind und nur aus historischen Gründen in der Spezifikation sind). Zusätzlich können zwei voreingestellte Zustände gegeben werden. Der erste ist die Voreinstellung bei ungültigem Wert, der zweite ist die Voreinstellung bei fehlendem Wert.

Some attributes are defined as taking one of a finite set of keywords. Such attributes are called enumerated attributes. The keywords are each defined to map to a particular state (several keywords might map to the same state, in which case some of the keywords are synonyms of each other; additionally, some of the keywords can be said to be non-conforming, and are only in the specification for historical reasons). In addition, two default states can be given. The first is the invalid value default, the second is the missing value default.

Ist ein enumerated Attribut angegeben, dann muss der Attributwert ein Treffer der Art ASCII case-insensitive* für eines der gegebenen Schlüsselworte sein, die nicht als nicht konform gelten, ohne führende oder nachfolgende Leerzeichen.

If an enumerated attribute is specified, the attribute's value must be an ASCII case-insensitive match for one of the given keywords that are not said to be non-conforming, with no leading or trailing whitespace.

Ist ein Attribut angegeben und ist sein Wert ein ASCII case-insensitive Treffer für eines der gegebenen Schlüsselworte, dann ist der Zustand des Schlüsselworts der Zustand, den das Attribut repräsentiert. Stimmt der Attributwert nicht mit einem der gegebenen Schlüsselworte überein, aber das Attribut hat einen Voreinstellung bei ungültigem Wert, dann repräsentiert das Attribut jenen Zustand. Ansonsten, wenn der Attributwert mit keinem der Schlüsselworte übereinstimmt, aber ein Zustand als Voreinstellung bei fehlendem Wert definiert ist, dann ist jener der Zustand, der durch das Attribut repräsentiert wird. Ansonsten gibt es keine Voreinstellung und ungültige Werte bedeuten, dass kein Zustand repräsentiert wird.

When the attribute is specified, if its value is an ASCII case-insensitive match for one of the given keywords then that keyword's state is the state that the attribute represents. If the attribute value matches none of the given keywords, but the attribute has an invalid value default, then the attribute represents that state. Otherwise, if the attribute value matches none of the keywords but there is a missing value default state defined, then that is the state represented by the attribute. Otherwise, there is no default, and invalid values mean that there is no state represented.

Ist das Attribut nicht angegeben und ist ein Zustand für die Voreinstellung für fehlende Werte definiert, dann ist jenes der Zustand, repräsentiert durch das (fehlende) Attribut. Ansonsten bedeutet die Abwesenheit des Attributs, dass kein Zustand repräsentiert wird.

When the attribute is not specified, if there is a missing value default state defined, then that is the state represented by the (missing) attribute. Otherwise, the absence of the attribute means that there is no state represented.

Die leere Zeichenkette kann ein gültiges Schlüsselwort sein.

The empty string can be a valid keyword.

2.4.4 Zahlen

2.4.4.1 Ganzzahlen mit Vorzeichen

Eine Zeichenkette ist eine gültige Ganzzahl, wenn sie aus einer oder mehreren ASCII-Ziffern besteht, optional mit einem vorangestellten Zeichen "-" (U+002D).

A string is a valid integer if it consists of one or more ASCII-Ziffern, optionally prefixed with a "-" (U+002D) character.

Eine gültige Ganzzahl ohne ein vorangestelltes "-" (U+002D) repräsentiert die Zahl, die als ganze Dezimalzahl [Kommentar*] durch diese Zahlenzeichenkette ausgedrückt wird. Eine gültige Ganzzahl mit einem vorangestellten "-" (U+002D), repräsentiert die Zahl, die als ganze Dezimalzahl durch diese Zahlenzeichenkette, die dem Bindestrich-Minus (U+002D) folgt, ausgedrückt wird, nachdem sie von Null abgezogen wurde.

A valid integer without a "-" (U+002D) prefix represents the number that is represented in base ten by that string of digits. A valid integer with a "-" (U+002D) prefix represents the number represented in base ten by the string of digits that follows the U+002D HYPHEN-MINUS, subtracted from zero.

Die Regeln für die Verarbeitung von Ganzzahlen werden im folgenden Algorithmus gegeben. Wenn aufgerufen, müssen die Schritte in der gegebenen Reihenfolge abgearbeitet werden, und beim ersten Schritt, der einen Wert zurückgibt, muss abgebrochen werden. Dieser Algorithmus gibt entweder eine Ganzzahl zurück oder einen Fehler.

The rules for parsing integers are as given in the following algorithm. When invoked, the steps must be followed in the order given, aborting at the first step that returns a value. This algorithm will return either an integer or an error.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger sein, der in input hineinzeigt, anfangs auf den Beginn der Zeichenkette.

  3. Lass sign den Wert "positive" haben.

  4. Übergehe Leerzeichen.

  5. Ist position hinter dem Ende von input, gib einen Fehler zurück.

  6. Ist das Zeichen, auf das position zeigt (das erste Zeichen) das Zeichen "-" (U+002D):

    1. Lass sign "negative" sein.
    2. Rücke position zum nächsten Zeichen.
    3. Ist position hinter dem Ende von input, gib einen Fehler zurück.

    Ansonsten, ist das Zeichen, auf das position zeigt (das erste Zeichen) das Zeichen "+" (U+002B):

    1. Rücke position zum nächsten Zeichen. (Das "+" wird ignoriert, aber es ist nicht konform.)
    2. Ist position hinter dem Ende von input, gib einen Fehler zurück.
  7. Ist das Zeichen, auf das von position gezeigt wird, keine ASCII-Ziffer, dann gib einen Fehler zurück.

  8. Sammle eine Zeichensequenz, die aus ASCII-Ziffern besteht und interpretiere die resultierende Sequenz als ganze Dezimalzahl. Lass value jene Ganzzahl sein.

  9. Ist sign "positive", gib value zurück, ansonsten gib das Ergebnis zurück, das entsteht, wenn value von Null abgezogen wird.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let sign have the value "positive".

  4. Skip whitespace.

  5. If position is past the end of input, return an error.

  6. If the character indicated by position (the first character) is a "-" (U+002D) character:

    1. Let sign be "negative".
    2. Advance position to the next character.
    3. If position is past the end of input, return an error.

    Otherwise, if the character indicated by position (the first character) is a "+" (U+002B) character:

    1. Advance position to the next character. (The "+" is ignored, but it is not conforming.)
    2. If position is past the end of input, return an error.
  7. If the character indicated by position is not an ASCII digit, then return an error.

  8. Collect a sequence of characters that are ASCII-Ziffern, and interpret the resulting sequence as a base-ten integer. Let value be that integer.

  9. If sign is "positive", return value, otherwise return the result of subtracting value from zero.

2.4.4.2 Nicht negative Ganzzahlen

Eine Zeichenkette ist eine gültige nicht negative Ganzzahl, wenn sie aus einer oder mehreren ASCII-Ziffern besteht.

A string is a valid non-negative integer if it consists of one or more ASCII-Ziffern.

Eine gültige nicht negative Ganzzahl repräsentiert die Zahl, die als ganze Dezimalzahl durch die Zahlenzeichenkette repräsentiert wird.

A valid non-negative integer represents the number that is represented in base ten by that string of digits.

Die Regeln zur Verarbeitung von nicht negativen Ganzzahlen werden im folgenden Algorithmus angegeben. Wenn aufgerufen, müssen die Schritte in der gegebenen Reihenfolge abgearbeitet werden und beim ersten Schritt abgebrochen werden, der einen Wert zurückgibt. Dieser Algorithmus gibt entweder Null, eine positive Ganzzahl oder einen Fehler zurück.

The rules for parsing non-negative integers are as given in the following algorithm. When invoked, the steps must be followed in the order given, aborting at the first step that returns a value. This algorithm will return either zero, a positive integer, or an error.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass value das Ergebnis der Verarbeitung von input sein, unter Verwendung der Regeln für die Verarbeitung von Ganzzahlen.

  3. Ist value ein Fehler, gib einen Fehler zurück.

  4. Ist value weniger als Null, gib einen Fehler zurück.

  5. Gib value zurück.

  1. Let input be the string being parsed.

  2. Let value be the result of parsing input using the rules for parsing integers.

  3. If value is an error, return an error.

  4. If value is less than zero, return an error.

  5. Return value.

2.4.4.3 Gleitkommazahlen

Eine Zeichenkette ist eine gültige Gleitkommazahl, wenn sie aus Folgendem besteht:

A string is a valid floating-point number if it consists of:

  1. Optional das Zeichen "-" (U+002D).
  2. Eines oder beide der Folgenden, in der gegebenen Reihenfolge:
    1. Eine Serie von einer oder mehreren ASCII-Ziffern.
      1. Ein einziges Zeichen "." (U+002E).
      2. Eine Serie von einer oder mehreren ASCII-Ziffern.
  3. Optional:
    1. Entweder das Zeichen "e" (U+0065) oder das Zeichen "E" (U+0045).
    2. Optionaldas Zeichen "-" (U+002D) oder das Zeichen "+" (U+002B).
    3. Eine Serie von einer oder mehreren ASCII-Ziffern.
  1. Optionally, a "-" (U+002D) character.
  2. One or both of the following, in the given order:
    1. A series of one or more ASCII-Ziffern.
      1. A single "." (U+002E) character.
      2. A series of one or more ASCII-Ziffern.
  3. Optionally:
    1. Either a "e" (U+0065) character or a "E" (U+0045) character.
    2. Optionally, a "-" (U+002D) character or "+" (U+002B) character.
    3. A series of one or more ASCII-Ziffern.

Eine gültige Gleitkommazahl ist die Zahl, die durch die Multiplikation der Mantisse mit Zehn erhalten wird, erhöht durch die Größe des Exponenten. Die Mantisse ist hierbei die erste Zahl, interpretiert als Dezimalzahl (einschließlich des Kommas und der Zahl nach dem Komma, sofern vorhanden; die Mantisse wird als eine negative Zahl interpretiert, sofern die ganze Zeichenkette mit dem Zeichen "-" (U+002D) beginnt und die Zahl nicht Null ist). Der Exponent ist die Zahl nach dem E, sofern vorhanden (interpretiert als eine negative Zahl, sofern das Zeichen "-" (U+002D) zwischen dem E und der Zahl ist, und die Zahl nicht Null ist; ansonsten wird das Zeichen "+" (U+002B) zwischen dem E und der Zahl ignoriert, sofern eines vorhanden ist). Gibt es kein E, so wird der Exponent behandelt, als wäre er Null.

A valid floating-point number represents the number obtained by multiplying the significand by ten raised to the power of the exponent, where the significand is the first number, interpreted as base ten (including the decimal point and the number after the decimal point, if any, and interpreting the significand as a negative number if the whole string starts with a "-" (U+002D) character and the number is not zero), and where the exponent is the number after the E, if any (interpreted as a negative number if there is a "-" (U+002D) character between the E and the number and the number is not zero, or else ignoring a "+" (U+002B) character between the E and the number if there is one). If there is no E, then the exponent is treated as zero.

Die Werte Infinity und Not-a-Number (NaN) sind keine gültigen Gleitkommazahlen.

The Infinity and Not-a-Number (NaN) values are not valid floating-point numbers.

Die beste Darstellung einer Zahl n als Gleitkommazahl ist die Zeichenkette, die durch Anwenden des JavaScript-Operators ToString auf n erhalten wird. Das Ergebnis des JavaScript-Operators ToString ist nicht eindeutig bestimmt. Gibt es mehrere mögliche Zeichenketten, die vom JavaScript-Operator ToString für einen bestimmten Wert erhalten werden könnten, dann muss der Benutzeragent immer die gleiche Zeichenkette für diesen Wert zurückgeben (obwohl er von dem Wert abweichen könnte, den andere Benutzeragenten benutzen).

The best representation of the number n as a floating-point number is the string obtained from applying the JavaScript operator ToString to n. The JavaScript operator ToString is not uniquely determined. When there are multiple possible strings that could be obtained from the JavaScript operator ToString for a particular value, the user agent must always return the same string for that value (though it may differ from the value used by other user agents).

Die Regeln zur Verarbeitung von Gleitkommazahlenwerten werden im folgenden Algorithmus gegeben. Dieser Algorithmus muss bei ersten Schritt abgebrochen werden, der irgendetwas zurückgibt. Dieser Algorithmus gibt etweder eine Zahl oder einen Fehler zurück.

The rules for parsing floating-point number values are as given in the following algorithm. This algorithm must be aborted at the first step that returns something. This algorithm will return either a number or an error.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger sein, der in input hineinzeigt, anfangs auf den Beginn der Zeichenkette.

  3. Lass value den Wert 1 haben.

  4. Lass divisor den Wert 1 haben.

  5. Lass exponent den Wert 1 haben.

  6. Übergehe Leerzeichen.

  7. Ist position hinter dem Ende von input, gib einen Fehler zurück.

  8. Ist das Zeichen, auf das position zeigt, das Zeichen U+002D Bindestrich-Minus (-):

    1. Verändere value und divisor zu −1.
    2. Rücke position zum nächsten Zeichen vor.
    3. Ist position hinter dem Ende von input, gib einen Fehler zurück.

    Ansonsten, ist das Zeichen, auf das position zeigt (das erste Zeichen) das Zeichen "+" (U+002B):

    1. Rücke position zum nächsten Zeichen vor. (Das "+" wird ignoriert, aber es ist nicht konform.)
    2. Ist position hinter dem Ende von input, gib einen Fehler zurück.
  9. Ist das Zeichen, auf das von position gezeigt wird, ein "." (U+002E), und ist das nicht das letzte Zeichen in input, und das Zeichen hinter dem Zeichen, auf das von position gezeigt wird, ist eine ASCII-Ziffer, dann setze value auf Null und springe zu dem Schritt namens fraction.

  10. Ist das Zeichen, auf das position zeigt, keine ASCII-Ziffer, gib einen Fehler zurück.

  11. Sammle eine Zeichensequenz, deren Zeichen ASCII-Ziffern sind und interpretiere die erhaltene* Sequenz als eine ganze Dezimalzahl. Multipliziere value mit dieser Ganzzahl.

  12. Ist position hinter dem Ende von input, springe zum Schritt namens conversion.
  13. Fraction: Ist das Zeichen, auf das von position gezeigt wird, ein "." (U+002E), verwende diese Unterschritte:

    1. Rücke position auf das nächsten Zeichen vor.

    2. Ist position hinter dem Ende von input oder ist das Zeichen, auf das von position gezeigt wird, keine ASCII-Ziffer, "e" (U+0065) oder "E" (U+0045), dann springe zu dem Schritt conversion.

    3. Ist das Zeichen, auf das position zeigt, das Zeichen "e" (U+0065) oder das Zeichen "E" (U+0045), überspringe die restlichen dieser Unterschritte.

    4. Fraction loop: Multipliziere divisor mit zehn.

    5. Füge den Wert des Zeichens, auf das position zeigt, interpretiert als eine Dezimalziffer (0..9) und geteilt durch divisor, zu value hinzu.
    6. Rücke position auf das nächste Zeichen vor.

    7. Ist position hinter dem Ende von input, dann springe zu dem Schritt namens conversion.

    8. Ist da Zeichen, auf das position zeigt, eine ASCII-Ziffer, springe in diesen Unterschritten zurück zum Schritt namens fraction loop.

  14. Ist das Zeichen, auf das von position gezeigt wird, das Zeichen "e" (U+0065) oder das Zeichen "E" (U+0045), verwende diese Unterschritte:

    1. Rücke position auf das nächste Zeichen vor.

    2. Ist position hinter dem Ende von input, dann springe zu dem Schritt namens conversion.

    3. Ist das Zeichen, auf das von position gezeigt wird, das Zeichen "-" (U+002D):

      1. Ändere exponent zu −1.
      2. Rücke position zum nächsten Zeichen vor.
      3. Ist position hinter dem Ende von input, dann springe zu dem Schritt namens conversion.

      Ansonsten, ist das Zeichen, auf das von position gezeigt wird, das Zeichen "+" (U+002B):

      1. Rücke position zum nächsten Zeichen vor.
      2. Ist position hinter dem Ende von input, dann springe zu dem Schritt namens conversion.

    4. Ist das Zeichen, auf das von position gezeigt wird, keine ASCII-Ziffer, dann springe zu dem Schritt namens conversion.

    5. Sammle eine Zeichensequenz, deren Zeichen ASCII-Ziffern sind und interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Multipliziere exponent mit dieser Ganzzahl.

    6. Multipliziere value mit zehn, erhöht um die Größe des Exponenten exponent.

  15. Conversion: Lass S die Menge der endlichen IEEE 754 Gleitkommawerte mit doppelter Präzision sein, außer -0, aber mit zwei zusätzlichen Sonderwerten: 21024 und −21024.

  16. Lass rounded-value die Zahl in S sein, die am nächsten bei value liegt, und wähle die Zahl mit einer geraden Mantisse, wenn es zwei gleich nahe Werte gibt. (Für die beiden Sonderwerte 21024 und −21024 wird angenommen, dass sie für diesen Zweck gerade Mantissen haben.)

  17. Ist rounded-value 21024 oder −21024, gib einen Fehler zurück.

  18. Gib rounded-value zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let value have the value 1.

  4. Let divisor have the value 1.

  5. Let exponent have the value 1.

  6. Skip whitespace.

  7. If position is past the end of input, return an error.

  8. If the character indicated by position is a U+002D HYPHEN-MINUS character (-):

    1. Change value and divisor to −1.
    2. Advance position to the next character.
    3. If position is past the end of input, return an error.

    Otherwise, if the character indicated by position (the first character) is a "+" (U+002B) character:

    1. Advance position to the next character. (The "+" is ignored, but it is not conforming.)
    2. If position is past the end of input, return an error.
  9. If the character indicated by position is a "." (U+002E), and that is not the last character in input, and the character after the character indicated by position is an ASCII digit, then set value to zero and jump to the step labeled fraction.

  10. If the character indicated by position is not an ASCII digit, then return an error.

  11. Collect a sequence of characters that are ASCII-Ziffern, and interpret the resulting sequence as a base-ten integer. Multiply value by that integer.

  12. If position is past the end of input, jump to the step labeled conversion.
  13. Fraction: If the character indicated by position is a "." (U+002E), run these substeps:

    1. Advance position to the next character.

    2. If position is past the end of input, or if the character indicated by position is not an ASCII digit, "e" (U+0065), or "E" (U+0045), then jump to the step labeled conversion.

    3. If the character indicated by position is a "e" (U+0065) character or a "E" (U+0045) character, skip the remainder of these substeps.

    4. Fraction loop: Multiply divisor by ten.

    5. Add the value of the character indicated by position, interpreted as a base-ten digit (0..9) and divided by divisor, to value.
    6. Advance position to the next character.

    7. If position is past the end of input, then jump to the step labeled conversion.

    8. If the character indicated by position is an ASCII digit, jump back to the step labeled fraction loop in these substeps.

  14. If the character indicated by position is a "e" (U+0065) character or a "E" (U+0045) character, run these substeps:

    1. Advance position to the next character.

    2. If position is past the end of input, then jump to the step labeled conversion.

    3. If the character indicated by position is a "-" (U+002D) character:

      1. Change exponent to −1.
      2. Advance position to the next character.
      3. If position is past the end of input, then jump to the step labeled conversion.

      Otherwise, if the character indicated by position is a "+" (U+002B) character:

      1. Advance position to the next character.
      2. If position is past the end of input, then jump to the step labeled conversion.

    4. If the character indicated by position is not an ASCII digit, then jump to the step labeled conversion.

    5. Collect a sequence of characters that are ASCII-Ziffern, and interpret the resulting sequence as a base-ten integer. Multiply exponent by that integer.

    6. Multiply value by ten raised to the exponentth power.

  15. Conversion: Let S be the set of finite IEEE 754 double-precision floating-point values except −0, but with two special values added: 21024 and −21024.

  16. Let rounded-value be the number in S that is closest to value, selecting the number with an even significand if there are two equally close values. (The two special values 21024 and −21024 are considered to have even significands for this purpose.)

  17. If rounded-value is 21024 or −21024, return an error.

  18. Return rounded-value.

2.4.4.4 Prozentangaben und Längen

Die Regeln zur Verarbeitung von Dimensionierungswerten werden im folgenden Algorithmus gegeben. Wird er aufgerufen, müssen die Schritte in der gegebenen Reihenfolge abgearbeitet werden und beim ersten Schritt, der einen Wert zurückgibt, abgebrochen werden. Dieser Algorithmus gibt entweder eine Zahl größer oder gleich 1.0* (* Punkt als Dezimalzeichen) zurück oder einen Fehler; wird eine Zahl zurückgegeben, dann wird sie zudem als eine Prozentangabe oder eine Länge kategorisiert.

The rules for parsing dimension values are as given in the following algorithm. When invoked, the steps must be followed in the order given, aborting at the first step that returns a value. This algorithm will return either a number greater than or equal to 1.0, or an error; if a number is returned, then it is further categorized as either a percentage or a length.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position in input hinein zeigen, anfangs auf den Begninn der Zeichenkette.

  3. Übergehe Leerzeichen.

  4. Ist position hinter dem Ende von input, gib einen Fehler zurück.

  5. Ist das Zeichen, auf das von position gezeigt wird, das Pluszeichen U+002B (+), rücke position zum nächsten Zeichen vor.

  6. Sammle eine Zeichensequenz, deren Zeichen die Zeichen "0" (U+0030) sind und entsorge* sie.

  7. Ist position hinter dem Ende von input, gib einen Fehler zurück.

  8. Ist das Zeichen, auf das von position gezeigt wird, keine Ziffer von "1" (U+0031) bis "9" (U+0039), dann gib einen Fehler zurück.

  9. Sammle eine Zeichensequenz, deren Zeichen ASCII-Ziffern sind und interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Lass value diese Zahl sein.

  10. Ist position hinter dem Ende von input, gib value als eine Länge zurück.

  11. Ist das Zeichen, auf das position zeigt, das Punktzeichen U+002E (.):

    1. Rücke position zum nächsten Zeichen vor.

    2. Ist position hinter dem Ende von input oder ist das Zeichen, auf das position zeigt, keine ASCII-Ziffer, dann gib value als eine Länge zurück.

    3. Lass divisor den Wert 1 haben.

    4. Fraction loop: Multipliziere divisor mit zehn.

    5. Füge den Wert des Zeichens, auf das position zeigt, interpretiert als eine Dezimalziffer (0..9) und geteilt durch divisor zu value hinzu.
    6. Rücke position zum nächsten Zeichen vor.

    7. Ist position hinter dem Ende von input, dann gib value als Länge zurück.

    8. Ist das Zeichen, auf das von position gezeigt wird, eine ASCII-Ziffer, gehe zum Schritt namens fraction loop in diesen Unterschritten zurück.

  12. Ist position hinter dem Ende von input, gib value als eine Länge zurück.

  13. Ist das Zeichen, auf das durch position gezeigt wird, das Zeichen "%" (U+0025), gib value als Prozentangabe zurück.

  14. Gib value als eine Länge zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Skip whitespace.

  4. If position is past the end of input, return an error.

  5. If the character indicated by position is a U+002B PLUS SIGN character (+), advance position to the next character.

  6. Collect a sequence of characters that are "0" (U+0030) characters, and discard them.

  7. If position is past the end of input, return an error.

  8. If the character indicated by position is not one of "1" (U+0031) to "9" (U+0039), then return an error.

  9. Collect a sequence of characters that are ASCII digits, and interpret the resulting sequence as a base-ten integer. Let value be that number.

  10. If position is past the end of input, return value as a length.

  11. If the character indicated by position is a U+002E FULL STOP character (.):

    1. Advance position to the next character.

    2. If position is past the end of input, or if the character indicated by position is not an ASCII digit, then return value as a length.

    3. Let divisor have the value 1.

    4. Fraction loop: Multiply divisor by ten.

    5. Add the value of the character indicated by position, interpreted as a base-ten digit (0..9) and divided by divisor, to value.
    6. Advance position to the next character.

    7. If position is past the end of input, then return value as a length.

    8. If the character indicated by position is an ASCII digit, return to the step labeled fraction loop in these substeps.

  12. If position is past the end of input, return value as a length.

  13. If the character indicated by position is a "%" (U+0025) character, return value as a percentage.

  14. Return value as a length.

2.4.4.5 Liste mit Ganzzahlen

Eine gültige Liste mit Ganzzahlen ist eine Anzahl gültiger Ganzzahlen, die durch Kommazeichen U+002C getrennt sind, ohne weitere Zeichen (wie zum Beispiel Leerzeichen). Zusätzlich kann es eine Beschränkung in Bezug auf die Anzahl der Ganzzahlen oder den erlaubten Wertebereich geben.

A valid list of integers is a number of valid integers separated by U+002C COMMA characters, with no other characters (e.g. no Leerzeichen). In addition, there might be restrictions on the number of integers that can be given, or on the range of values allowed.

Die Regeln zur Verarbeitung einer Liste mit Ganzzahlen sind wie folgt:

The rules for parsing a list of integers are as follows:

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger sein, der in input hineinzeigt, anfangs auf den Beginn der Zeichenkette.

  3. Lass numbers eine anfangs leere Liste mit Ganzzahlen sein. Diese Liste wird das Ergebnis dieses Algorithmus sein.

  4. Gibt es ein Zeichen in der Zeichenkette input an der Position position und ist es entweder das Zeichen U+0020 SPACE, U+002C COMMA oder U+003B SEMICOLON, dann rücke position zum nächsten Zeichen in input vor oder hinter das Ende der Zeichenkette, soforn keine weiteren Zeichen vorhanden sind.

  5. Wenn position hinter das Ende von input zeigt, dann gib numbers zurück und breche ab.

  6. Ist das Zeichen in der Zeichenkette input an der Position position das Zeichen U+0020 SPACE, U+002C COMMA oder U+003B SEMICOLON ist, dann kehre zurück zu Schritt 4.

  7. Lass negated falsch sein.

  8. Lass value 0 sein.

  9. Lass started falsch sein. Diese Variable wird auf wahr gesetzt, wenn der Parser eine Zahl oder das Zeichen "-" (U+002D) sieht.

  10. Lass got number falsch sein. Diese Variable wird auf wahr gesetzt, wenn der Parser eine Zahl sieht.

  11. Lass finished falsch sein. Diese Variable wird auf wahr gesetzt, um den Parser in einen Modus zu versetzen, in dem er Zeichen bis zum nächsten Trennzeichen ignoriert.

  12. Lass bogus falsch sein.

  13. Parser: Ist das Zeichen in der Zeichenkette input an der Position position ein:

    Das Zeichen U+002D HYPHEN-MINUS

    Folge diesen Unterschritten:

    1. Ist got number wahr, dann lass finished wahr sein.
    2. Ist finished wahr, springe zu dem nächsten Schritt in den übergeordneten Schritten*.
    3. Ist started wahr, lass negated falsch sein.
    4. Ansonsten, ist started falsch und ist bogus falsch, lass negated wahr sein.
    5. Lass started wahr sein.
    Eine ASCII-Ziffer

    Folge diesen Unterschritten:

    1. Ist finished wahr, springe zum nächsten Schritt in den übergeordneten Schritten.
    2. Multipliziere value mit zehn.
    3. Füge den Wert der Ziffer, interpretiert als ganze Dezimalzahl, zu value hinzu.
    4. Lass started wahr sein.
    5. Lass got number wahr sein.
    Das Zeichen U+0020 SPACE
    Das Zeichen U+002C COMMA
    Das Zeichen U+003B SEMICOLON

    Folge diesen Unterschritten:

    1. Ist got number falsch, gib die Liste numbers zurück und breche ab. Dies passiert, wenn ein Eintrag in der Liste keine Ziffern hat, wie in "1,2,x,4".
    2. Ist negated wahr, dann negiere* value.
    3. Hänge value an die Liste numbers an.
    4. Springe zu Schritt 4 in den übergeordneten Schritten.
    Ein Zeichen im Bereich U+0001 bis U+001F, U+0021 bis U+002B, U+002D bis U+002F, U+003A, U+003C bis U+0040, U+005B bis U+0060, U+007b bis U+007F (das bedeutet, alle anderen nicht alphabetischen ASCII-Zeichen)

    Folge diesen Unterschritten:

    1. Ist got number wahr, lass finished wahr sein.
    2. Ist finished wahr, springe zum nächsten Schritt in den übergeordneten Schritten.
    3. Lass negated falsch sein.
    Alle anderen Zeichen

    Folge diesen Unterschritten:

    1. Ist finished wahr, springe zum nächsten Schritt in den übergeordneten Schritten.
    2. Lass negated falsch sein.
    3. Lass bogus wahr sein.
    4. Ist started wahr, dann gib die Liste numbers aus und breche ab. (Der Wert in value wird zuerst* nicht an die Liste angehängt; er wird fallengelassen.)
  14. Rücke position zum nächsten Zeichen in input vor oder über das Ende der Zeichenkette hinweg, wenn es keine weiteren Zeichen gibt.

  15. Zeigt position auf ein Zeichen (und nicht hinter das Ende von input), springe zum großen Parserschritt oben.

  16. Ist negated wahr, dann negiere value.

  17. Ist got number wahr, dann hänge value an die Liste numbers.

  18. Gib die Liste numbers zurück und breche ab.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let numbers be an initially empty list of integers. This list will be the result of this algorithm.

  4. If there is a character in the string input at position position, and it is either a U+0020 SPACE, U+002C COMMA, or U+003B SEMICOLON character, then advance position to the next character in input, or to beyond the end of the string if there are no more characters.

  5. If position points to beyond the end of input, return numbers and abort.

  6. If the character in the string input at position position is a U+0020 SPACE, U+002C COMMA, or U+003B SEMICOLON character, then return to step 4.

  7. Let negated be false.

  8. Let value be 0.

  9. Let started be false. This variable is set to true when the parser sees a number or a "-" (U+002D) character.

  10. Let got number be false. This variable is set to true when the parser sees a number.

  11. Let finished be false. This variable is set to true to switch parser into a mode where it ignores characters until the next separator.

  12. Let bogus be false.

  13. Parser: If the character in the string input at position position is:

    A U+002D HYPHEN-MINUS character

    Follow these substeps:

    1. If got number is true, let finished be true.
    2. If finished is true, skip to the next step in the overall set of steps.
    3. If started is true, let negated be false.
    4. Otherwise, if started is false and if bogus is false, let negated be true.
    5. Let started be true.
    An ASCII digit

    Follow these substeps:

    1. If finished is true, skip to the next step in the overall set of steps.
    2. Multiply value by ten.
    3. Add the value of the digit, interpreted in base ten, to value.
    4. Let started be true.
    5. Let got number be true.
    A U+0020 SPACE character
    A U+002C COMMA character
    A U+003B SEMICOLON character

    Follow these substeps:

    1. If got number is false, return the numbers list and abort. This happens if an entry in the list has no digits, as in "1,2,x,4".
    2. If negated is true, then negate value.
    3. Append value to the numbers list.
    4. Jump to step 4 in the overall set of steps.
    A character in the range U+0001 to U+001F, U+0021 to U+002B, U+002D to U+002F, U+003A, U+003C to U+0040, U+005B to U+0060, U+007b to U+007F (i.e. any other non-alphabetic ASCII character)

    Follow these substeps:

    1. If got number is true, let finished be true.
    2. If finished is true, skip to the next step in the overall set of steps.
    3. Let negated be false.
    Any other character

    Follow these substeps:

    1. If finished is true, skip to the next step in the overall set of steps.
    2. Let negated be false.
    3. Let bogus be true.
    4. If started is true, then return the numbers list, and abort. (The value in value is not appended to the list first; it is dropped.)
  14. Advance position to the next character in input, or to beyond the end of the string if there are no more characters.

  15. If position points to a character (and not to beyond the end of input), jump to the big Parser step above.

  16. If negated is true, then negate value.

  17. If got number is true, then append value to the numbers list.

  18. Return the numbers list and abort.

2.4.4.6 Listen mit Größen

Die Regeln zur Verarbeitung von Listen mit Größenangaben sind wie folgt. Diese Regeln geben eine Liste mit Null oder mehr Paaren zurück, die aus einer Zahl und einer Einheit bestehen, die Einheit ist entweder percentage, relative oder absolute***.

The rules for parsing a list of dimensions are as follows. These rules return a list of zero or more pairs consisting of a number and a unit, the unit being one of percentage, relative, and absolute.

  1. Lass raw input die Zeichenkette sein, die verarbeitet wird.

  2. Ist das letzte Zeichen in raw input das Zeichen "," (U+002C), dann entferne dieses Zeichen von raw input.

  3. Teile die Zeichenkette raw input an Kommas. Lass raw tokens die resultierende Liste mit Werten* sein.

  4. Lass result eine leere Liste mit den Paaren Zahl/Einheit sein.

  5. Für jeden Wert in raw tokens, veranlasse die folgenden Unterschritte:

    1. Lass input den Wert sein.

    2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

    3. Lass value die Zahl 0 sein.

    4. Lass unit absolute sein.

    5. Ist position hinter dem Ende von input, setze unit auf relative und springe zum letzten Unterschritt.

    6. Ist das Zeichen an position eine ASCII-Ziffer, sammle eine Sequenz mit Zeichen, die ASCII-Ziffern sind. Interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl und erhöhe value um diese Ganzzahl.

    7. Ist das Zeichen an position das Zeichen "." (U+002E), veranlasse diese Unterschritte:

      1. Sammle eine Sequenz mit Zeichen, bestehend aus Leerzeichen und ASCII-Ziffern. Lass s die erhaltene Sequenz sein.

      2. Entferne alle Leerzeichen in s.

      3. If s is not the empty string, run these subsubsteps:

        1. Lass length die Anzahl der Zeichen in s sein (nachdem die Leerzeichen entfernt wurden).

        2. Lass fraction das Ergebnis der Interpretation von s als ganze Dezimalzahl sein, um dann jene Zahl durch 10length zu teilen.

        3. Erhöhe value um fraction.

    8. Lasse Leerzeichen aus.

    9. Ist das Zeichen an position das Zeichen "%" (U+0025), dann setze unit auf percentage.

      Ansonsten, ist das Zeichen an position das Zeichen "*" (U+002A), dann setze unit auf relative.

    10. Füge eine Entrag zu result hinzu, bestehend aus der von value gegebenen Zahl und die Einheit, gegeben von unit.

  6. Gib die Liste result zurück.

  1. Let raw input be the string being parsed.

  2. If the last character in raw input is a "," (U+002C) character, then remove that character from raw input.

  3. Split the string raw input on commas. Let raw tokens be the resulting list of tokens.

  4. Let result be an empty list of number/unit pairs.

  5. For each token in raw tokens, run the following substeps:

    1. Let input be the token.

    2. Let position be a pointer into input, initially pointing at the start of the string.

    3. Let value be the number 0.

    4. Let unit be absolute.

    5. If position is past the end of input, set unit to relative and jump to the last substep.

    6. If the character at position is an ASCII digit, collect a sequence of characters that are ASCII-Ziffern, interpret the resulting sequence as an integer in base ten, and increment value by that integer.

    7. If the character at position is a "." (U+002E) character, run these substeps:

      1. Collect a sequence of characters consisting of Leerzeichen and ASCII-Ziffern. Let s be the resulting sequence.

      2. Remove all Leerzeichen in s.

      3. If s is not the empty string, run these subsubsteps:

        1. Let length be the number of characters in s (after the spaces were removed).

        2. Let fraction be the result of interpreting s as a base-ten integer, and then dividing that number by 10length.

        3. Increment value by fraction.

    8. Skip whitespace.

    9. If the character at position is a "%" (U+0025) character, then set unit to percentage.

      Otherwise, if the character at position is a U+002A ASTERISK character (*), then set unit to relative.

    10. Add an entry to result consisting of the number given by value and the unit given by unit.

  6. Return the list result.

2.4.5 Datum und Zeit

In den folgenden Algorithmen ist die Anzahl der Tage im Monat month des Jahres year: 31, wenn month 1, 3, 5, 7, 8, 10 oder 12 ist; 30, wenn month 4, 6, 9 oder 11 ist; 29, wenn month 2 ist und year eine Zahl ist, die durch 400 teilbar ist oder wenn year eine Zahl ist, die durch 4 teilbar ist, jedoch nicht durch 100; und ansonsten 28. Dies berücksichtigt die Schaltjahre im Gregorianischen Kalender. [GREGORIAN]

In the algorithms below, the number of days in month month of year year is: 31 if month is 1, 3, 5, 7, 8, 10, or 12; 30 if month is 4, 6, 9, or 11; 29 if month is 2 and year is a number divisible by 400, or if year is a number divisible by 4 but not by 100; and 28 otherwise. This takes into account leap years in the Gregorian calendar. [GREGORIAN]

Werden ASCII-Ziffern in Datums- und Zeitsyntaxen verwendet, die in diesem Abschnitt definiert sind, dann handelt es sich um Ganzzahlen des Dezimalsystems.

When ASCII-Ziffern are used in the date and time syntaxes defined in this section, they express numbers in base ten.

Obwohl die hier beschriebenen Formate als Untermenge des korrespondierenden Formats ISO8601 gedacht sind, definiert diese Spezifikation die Verarbeitungsregeln viel genauer als ISO8601. Implementierer sollten daher Bibliotheken zur Verarbeitung von Datumsangaben sorgfältig prüfen, bevor sie verwendet werden, um die unten beschriebenen Verarbeitungsregeln zu implementieren; ISO8601-Bibliotheken könnten das Datum und die Zeit eventuell nicht genau in der gleichen Weise verarbeiten. [ISO8601]

While the formats described here are intended to be subsets of the corresponding ISO8601 formats, this specification defines parsing rules in much more detail than ISO8601. Implementors are therefore encouraged to carefully examine any date parsing libraries before using them to implement the parsing rules described below; ISO8601 libraries might not parse dates and times in exactly the same manner. [ISO8601]

Wenn sich diese Spezifikation auf den proleptischen Gregorianischen Kalender bezieht, spricht sie vom modernen Gregorianischen Kalender, zurückgerechnet auf das Jahr 1. Ein Datum im proleptischen Gregorianischen Kalender, manchmal explizit als proleptisches Gregorianisches Datum bezeichnet, ist ein Datum, das mit jenem Kalender beschrieben wird, selbst wenn dieser Kalender zu der betreffenden Zeit nicht verwendet wurde (oder existent war). [GREGORIAN] Siehe Wikipedia: proleptisch

Where this specification refers to the proleptic Gregorian calendar, it means the modern Gregorian calendar, extrapolated backwards to year 1. A date in the proleptic Gregorian calendar, sometimes explicitly referred to as a proleptic-Gregorian date, is one that is described using that calendar even if that calendar was not in use at the time (or place) in question. [GREGORIAN]

Die Verwendung des Gregorianischen Kalenders als Bezugsformat in dieser Spezifikation ist eine willkürliche Wahl, die durch die kulturelle Befangenheit der Beteiligten an dieser Entscheidung resultiert. Beachten Sie auch den Abschnitt Datums-, Zeit und Zahlenformate in Formularen (für Autoren), Implementierungsanmerkungen in Bezug auf die Lokalisierung von Formularkontrollelementen und das Element time.

The use of the Gregorian calendar as the wire format in this specification is an arbitrary choice resulting from the cultural biases of those involved in the decision. See also the section discussing date, time, and number formats in forms (for authors), implemention notes regarding localization of form controls, and the time element.

2.4.5.1 Monate

Ein Monat besteht aus einem bestimmten proleptischen Gregorianischen Datum ohne Zeitzoneninformationen und ohne Datumsinformation, die über das Jahr und den Monat hinausgeht. [GREGORIAN]

A month consists of a specific proleptic-Gregorian date with no time-zone information and no date information beyond a year and a month. [GREGORIAN]

Eine Zeichenkette ist eine gültige Zeichenkette für Monat, die ein Jahr year und einen Monat month repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid month string representing a year year and month month if it consists of the following components in the given order:

  1. Vier oder mehr ASCII-Ziffern, die year repräsentieren, wobei year > 0 ist.
  2. Ein Zeichen "-" (U+002D).
  3. Zwei ASCII-Ziffern, die den Monat month repräsentieren, im Bereich 1 ≤ month ≤ 12.
  1. Four or more ASCII-Ziffern, representing year, where year > 0
  2. A "-" (U+002D) character
  3. Two ASCII-Ziffern, representing the month month, in the range 1 ≤ month ≤ 12

Die Regeln, um eine Monatszeichenkette zu verarbeiten sind wie folgt. Dies wird entweder ein Jahr und einen Monat zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a month string are as follows. This will return either a year and month, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Monatskomponente, um ein year und month zu erhalten. Wird nichts zurückgegeben, dann breche ab.

  4. Ist position nicht hinter dem Ende von input, dann breche ab.

  5. Gib year und month zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a month component to obtain year and month. If this returns nothing, then fail.

  4. If position is not beyond the end of input, then fail.

  5. Return year and month.

Die Regeln zur Verarbeitung einer Monatskomponente, wenn eine Zeichenkette input und eine Position position gegeben sind, sind wie folgt. Dies wird entweder ein Jahr und einen Monat zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a month component, given an input string and a position, are as follows. This will return either a year and a month, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Sammle eine Sequenz mit Zeichen, die ASCII-Ziffern sind. Ist die gesammelte Sequenz nicht mindestens vier Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als ganze Dezimalzahl. Lass die Zahl das Jahr year sein.

  2. Ist year keine Zahl größer als Null, dann breche ab.

  3. Ist position hinter dem Ende von input oder ist das Zeichen an der Position position kein U+002D HYPHEN-MINUS-Zeichen, dann breche ab. Ansonsten bewege position ein Zeichen weiter.

  4. Sammle eine Sequenz Zeichen, die ASCII-Ziffern sind. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Lass die Zahl den Monat month sein.

  5. Ist month keine Zahl im Bereich 1 ≤ month ≤ 12, dann breche ab.

  6. Gib year und month zurück.

  1. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not at least four characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the year.

  2. If year is not a number greater than zero, then fail.

  3. If position is beyond the end of input or if the character at position is not a U+002D HYPHEN-MINUS character, then fail. Otherwise, move position forwards one character.

  4. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the month.

  5. If month is not a number in the range 1 ≤ month ≤ 12, then fail.

  6. Return year and month.

2.4.5.2 Datumsangaben

Ein Datum besteht aus einem bestimmten proleptischen Gregorianischen Datum ohne Zeitzoneninformationen, das sich aus einem Jahr, einem Monat und einem Tag zusammensetzt. [GREGORIAN]

A date consists of a specific proleptic-Gregorian date with no time-zone information, consisting of a year, a month, and a day. [GREGORIAN]

Eine Zeichenkette ist eine gültige Zeichenkette für ein Datum, die ein Jahr year, einen Monat month und einen Tag day repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid date string representing a year year, month month, and day day if it consists of the following components in the given order:

  1. Eine gültige Zeichenkette für Monat, die ein Jahr year und einen Monat month repräsentiert.
  2. Ein Zeichen "-" (U+002D)
  3. Zwei ASCII-Ziffern, die day im Bereich 1 ≤ day ≤ maxday repräsentieren, bei dem maxday die Anzahl der Tage im Monat month und im Jahr year ist.
  1. A valid month string, representing year and month
  2. A "-" (U+002D) character
  3. Two ASCII-Ziffern, representing day, in the range 1 ≤ day ≤ maxday where maxday is the number of days in the month month and year year

Die Regeln zur Verarbeitung einer Zeichenkette für Datum sind wie folgt. Dieses wird entweder ein Datum oder nichts zurückgeben. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet dies, dass er an dieser Stelle abbricht und nichts zurückgibt.

The rules to parse a date string are as follows. This will return either a date, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Datumskomponente, um year, month und day zu erhalten. Gibt dies nichts zurück, dann breche ab.

  4. Ist position nicht hinter dem Ende von input, dann breche ab.

  5. Lass date das Datum mit dem Jahr year, dem Monat month und dem Tag day sein.

  6. Gib date zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a date component to obtain year, month, and day. If this returns nothing, then fail.

  4. If position is not beyond the end of input, then fail.

  5. Let date be the date with year year, month month, and day day.

  6. Return date.

Die Regeln zur Verarbeitung einer Datumskomponente bei einer gegebenen Zeichenkette input und einer Position position sind wie folgt. Dies gibt entweder ein Jahr, einen Monat und einen Tag zurück oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a date component, given an input string and a position, are as follows. This will return either a year, a month, and a day, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Verarbeite eine Monatskomponente, um year und month zu erhalten. Gibt dies nichts zurück, dann breche ab.

  2. Lass maxday die Anzahl der Tage im Monat month des Jahres year sein.

  3. Ist position hinter dem Ende von input oder ist das Zeichen an position kein U+002D HYPHEN-MINUS-Zeichen, dann breche ab. Ansonsten rücke position ein Zeichen vorwärts.

  4. Sammle eine Sequenz mit Zeichen, die aus ASCII-Ziffern bestehen. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die resultierende Sequenz als eine ganze Dezimalzahl. Lass die Zahl der Tag day sein.

  5. Ist day keine Zahl im Bereich 1 ≤ day ≤  maxday, dann breche ab.

  6. Gib year, month und day zurück.

  1. Parse a month component to obtain year and month. If this returns nothing, then fail.

  2. Let maxday be the number of days in month month of year year.

  3. If position is beyond the end of input or if the character at position is not a U+002D HYPHEN-MINUS character, then fail. Otherwise, move position forwards one character.

  4. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the day.

  5. If day is not a number in the range 1 ≤ day ≤ maxday, then fail.

  6. Return year, month, and day.

2.4.5.3 Datum ohne Jahresangabe

Ein Datum ohne Jahresangabe besteht aus einem Gregorianischen Monat und einem Tag innerhalb jenes Monats, aber ohne ein angegebenes Jahr. [GREGORIAN]

A yearless date consists of a Gregorian month and a day within that month, but with no associated year. [GREGORIAN]

Eine Zeichenkette ist eine gültige Zeichenkette für ein Datum ohne Jahresangabe, die einen Monat month und einen Tag day repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid yearless date string representing a month month and a day day if it consists of the following components in the given order:

  1. Optional, zwei Zeichen "-" (U+002D).
  2. Zwei ASCII-Ziffern, die einen Monat month im Bereich 1 ≤ month ≤ 12 repräsentieren.
  3. Ein Zeichen "-" (U+002D)
  4. Zwei ASCII-Ziffern, die day im Bereich 1 ≤ day ≤ maxday repräsentieren, wobei maxday die Anzahl der Tage im Monat month eines beliebigen Schaltjahres ist (z. Bsp. 4 oder 2000).
  1. Optionally, two "-" (U+002D) characters
  2. Two ASCII-Ziffern, representing the month month, in the range 1 ≤ month ≤ 12
  3. A "-" (U+002D) character
  4. Two ASCII-Ziffern, representing day, in the range 1 ≤ day ≤ maxday where maxday is the number of days in the month month and any arbitrary leap year (e.g. 4 or 2000)

Mit anderen Worten, ist der Monat month "02", also Februar, dann kann der Tag 29 sein, als wäre das Jahr ein Schaltjahr.

In other words, if the month is "02", meaning February, then the day can be 29, as if the year was a leap year.

Die Regeln zur Verarbeitung einer Zeichenkette für ein Datum ohne Jahresangabe sind wie folgt. Dieses gibt entweder einen Monat und einen Tag zurück oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a yearless date string are as follows. This will return either a month and a day, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Datumskomponente ohne Jahresangabe, um month und day zu erhalten. Gibt dies nichts zurück, dann breche ab.

  4. Ist position nicht hinter dem Ende von input, dann breche ab.

  5. Gib month und day zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a yearless date component to obtain month and day. If this returns nothing, then fail.

  4. If position is not beyond the end of input, then fail.

  5. Return month and day.

Die Regeln zur Verarbeitung einer Datumskomponente ohne Jahresangabe bei gegebener Zeichenkette input und einer Position position sind wie folgt. Dies gibt entweder einen Monat und einen Tag zurück oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a yearless date component, given an input string and a position, are as follows. This will return either a month and a day, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Sammle eine Sequenz von Zeichen, die aus den Zeichen "-" (U+002D) besteht. Ist die gesammelte Sequenz nicht genau Null oder zwei Zeichen lang, dann breche ab.

  2. Sammle eine Sequenz von Zeichen, die aus ASCII-Ziffern bestehen. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Lass die Zahl der Monat month sein.

  3. Ist month keine Zahl im Bereich 1 ≤ month ≤ 12, dann breche ab.

  4. Lass maxday die Anzahl der Tage im Monat month eines beliebigen Schaltjahres sein (z. Bsp. 4 oder 2000).

  5. Ist position hinter dem Ende von input oder ist das Zeichen an der Position position kein U+002D HYPHEN-MINUS-Zeichen, dann breche ab. Ansonsten rücke position ein Zeichen weiter.

  6. Sammle eine Sequenz von Zeichen, die ASCII-Ziffern sind. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Lass diese Zahl der Tag day sein.

  7. Ist day keine Zahl im Bereich 1 ≤ day ≤  maxday, dann breche ab.

  8. Gib month und day zurück.

  1. Collect a sequence of characters that are "-" (U+002D) characters. If the collected sequence is not exactly zero or two characters long, then fail.

  2. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the month.

  3. If month is not a number in the range 1 ≤ month ≤ 12, then fail.

  4. Let maxday be the number of days in month month of any arbitrary leap year (e.g. 4 or 2000).

  5. If position is beyond the end of input or if the character at position is not a U+002D HYPHEN-MINUS character, then fail. Otherwise, move position forwards one character.

  6. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the day.

  7. If day is not a number in the range 1 ≤ day ≤ maxday, then fail.

  8. Return month and day.

2.4.5.4 Zeiten

Eine Zeit time besteht aus einer bestimmten Zeit ohne Zeitzoneninformationen, die aus einer Stunde, einer Minute, einer Sekunde und dem Bruchteil einer Sekunde besteht.

A time consists of a specific time with no time-zone information, consisting of an hour, a minute, a second, and a fraction of a second.

Eine Zeichenkette ist eine gültige Zeichenkette für Zeit, die eine Stunde hour, eine Minute minute und eine Sekunde second repräsentiert, wenn sie aus den gegebenen Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid time string representing an hour hour, a minute minute, and a second second if it consists of the following components in the given order:

  1. Zwei ASCII-Ziffern, die hour im Bereich 0 ≤ hour ≤ 23 repräsentieren.
  2. Ein Zeichen ":" (U+003A).
  3. Zwei ASCII-Ziffern, die minute im Bereich 0 ≤ minute ≤ 59 repräsentieren.
  4. Optional (erforderlich wenn second nicht Null ist):
    1. Ein Zeichen ":" (U+003A)
    2. Zwei ASCII-Ziffern, die den ganzzahligen Teil von second im Bereich 0 ≤ s ≤ 59 repräsentieren.
    3. Optional (erforderlich wenn second keine Ganzzahl ist):
      1. Ein Zeichen (.) 002E FULL STOP.
      2. Eine, zwei oder drei ASCII-Ziffern, die einen Bruchteil von second repräsentieren.
  1. Two ASCII-Ziffern, representing hour, in the range 0 ≤ hour ≤ 23
  2. A ":" (U+003A) character
  3. Two ASCII-Ziffern, representing minute, in the range 0 ≤ minute ≤ 59
  4. Optionally (required if second is non-zero):
    1. A ":" (U+003A) character
    2. Two ASCII-Ziffern, representing the integer part of second, in the range 0 ≤ s ≤ 59
    3. Optionally (required if second is not an integer):
      1. A 002E FULL STOP character (.)
      2. One, two, or three ASCII-Ziffern, representing the fractional part of second

Die Komponente second kann nicht 60 oder 61 sein; Schaltsekunden können nicht repräsentiert werden.

The second component cannot be 60 or 61; leap seconds cannot be represented.

Die Reglen zur Verarbeitung einer Zeichenkette für Zeit sind wie folgt. Dies wird eine Zeit zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a time string are as follows. This will return either a time, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Zeitkomponente, um hour, minute und second zu erhalten. Gibt dies nichts zurück, dann breche ab.

  4. Ist position nicht hinter dem Ende von input, dann breche ab.

  5. Lass time die Zeit mit der Stunde hour, der Minute minute und der Sekunde second sein.

  6. Gib time zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a time component to obtain hour, minute, and second. If this returns nothing, then fail.

  4. If position is not beyond the end of input, then fail.

  5. Let time be the time with hour hour, minute minute, and second second.

  6. Return time.

Die Regeln zur Verarbeitung einer Zeitkomponente bei gegebener Zeichenkette input und einer Position position, sind wie folgt. Dies wird entweder eine Stunde, eine Minute und eine Sekunde zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a time component, given an input string and a position, are as follows. This will return either an hour, a minute, and a second, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Sammle eine Sequenz von Zeichen, die aus ASCII-Ziffern besteht. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als dezimale Ganzzahl. Lass die Zahl die Stunde hour sein.

  2. Ist hour keine Zahl im Bereich 0 ≤ hour ≤ 23, dann breche ab.
  3. Ist position hinter dem Ende von input oder ist das Zeichen an position kein Doppelpunktzeichen U+003A COLON, dann breche ab. Ansonsten rücke position ein Zeichen weiter.

  4. Sammle eine Sequenz von Zeichen, die aus ASCII-Ziffern bestehen. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltenen Zeichenfolge als ein ganze Dezimalzahl. Lass die Zahl die Minute minute sein.

  5. Ist minute keine Zahl im Bereich 0 ≤ minute ≤ 59, dann breche ab.
  6. Lass second eine Zeichenkette mit dem Wert "0" sein.

  7. Ist position nicht hinter dem Ende von input und ist das Zeichen an position ein Doppelpunktzeichen U+003A COLON, dann verarbeite diese Unterschritte:

    1. Rücke position zum nächsten Zeichen in input vor.

    2. Ist position hinter dem Ende von input oder beim letzten Zeichen von input oder sind die nächsten zwei Zeichen in input, die bei position anfangen, nicht beide ASCII-Ziffern, dann breche ab.

    3. Sammle eine Sequenz von Zeichen, die entweder ASCII-Ziffern sind oder Punktzeichen U+002E FULL STOP. Ist die gesammelte Sequenz drei Zeichen lang oder ist sie länger als drei Zeichen und ist das dritte Zeichen kein Punktzeichen U+002E FULL STOP oder hat es mehr als ein Punktzeichen U+002E FULL STOP, dann breche ab. Ansonsten lass die gesammelte Zeichenkette second sein, anstatt dessen vorherigen Wert zu verwenden.

  8. Interpretiere second als eine Dezimalzahl (moglicherweise mit einem Bruchteil). Lass second diese Zahl sein, anstatt der Zeichenketten-Version***.

  9. Ist second keine Zahl im Bereich 0 ≤ second  < 60, dann breche ab.

  10. Gib hour, minute und second zurück.

  1. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the hour.

  2. If hour is not a number in the range 0 ≤ hour ≤ 23, then fail.
  3. If position is beyond the end of input or if the character at position is not a U+003A COLON character, then fail. Otherwise, move position forwards one character.

  4. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the minute.

  5. If minute is not a number in the range 0 ≤ minute ≤ 59, then fail.
  6. Let second be a string with the value "0".

  7. If position is not beyond the end of input and the character at position is a U+003A COLON, then run these substeps:

    1. Advance position to the next character in input.

    2. If position is beyond the end of input, or at the last character in input, or if the next two characters in input starting at position are not both ASCII digits, then fail.

    3. Collect a sequence of characters that are either ASCII-Ziffern or U+002E FULL STOP characters. If the collected sequence is three characters long, or if it is longer than three characters long and the third character is not a U+002E FULL STOP character, or if it has more than one U+002E FULL STOP character, then fail. Otherwise, let the collected string be second instead of its previous value.

  8. Interpret second as a base-ten number (possibly with a fractional part). Let second be that number instead of the string version.

  9. If second is not a number in the range 0 ≤ second < 60, then fail.

  10. Return hour, minute, and second.

2.4.5.5 Floating dates and times

Ein floating date and time besteht aus einem bestimmten proleptischen Gregorianischen Datum, das aus einem Jahr, einem Monat, einem Tag und einer Zeit besteht, die wiederum aus einer Stunde, einer Minute, einer Sekunde und einem Bruchteil einer Sekunde besteht, jedoch ohne Angabe einer Zeitzone. [GREGORIAN]

A floating date and time consists of a specific proleptic-Gregorian date, consisting of a year, a month, and a day, and a time, consisting of an hour, a minute, a second, and a fraction of a second, but expressed without a time zone. [GREGORIAN]

Eine Zeichenkette ist eine gültige Zeichenkette für floating Datum und Zeit, die ein Datum und eine Zeit repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid floating date and time string representing a date and time if it consists of the following components in the given order:

  1. Eine gültige Zeichenkette für Datum, die das Datum repräsentiert.
  2. Ein Zeichen "T" (U+0054) oder ein Zeichen U+0020 SPACE.
  3. Eine gültige Zeichenkette für Zeit, die die Zeit repräsentiert.
  1. A valid date string representing the date
  2. A "T" (U+0054) character or a U+0020 SPACE character
  3. A valid time string representing the time

Eine Zeichenkette ist eine gültige normalisierte Zeichenkette für floating Datum und Zeit, die ein Datum und eine Zeit repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid normalized floating date and time string representing a date and time if it consists of the following components in the given order:

  1. Eine gültige Zeichenkette für Datum, die das Datum repräsentiert.
  2. Ein Zeichen "T" (U+0054).
  3. Eine gültige Zeichenkette für Zeit, die die Zeit repräsentiert, ausgedrückt als die kürzest mögliche Zeichenkette für die gegebene Zeit (zum Beispiel durch vollständiges Auslassen der Sekundenkomponente, wenn die gegebene Zeit null Sekunden nach der Minute ist).
  1. A valid date string representing the date
  2. A "T" (U+0054) character
  3. A valid time string representing the time, expressed as the shortest possible string for the given time (e.g. omitting the seconds component entirely if the given time is zero seconds past the minute)

Die Regeln zur Verarbeitung von Zeichenketten für floating Datum und Zeit sind wie folgt. Dies wird entweder ein Datum und eine Zeit zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a floating date and time string are as follows. This will return either a date and time, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Datumskomponente, um year, month und day zu erhalten. Gibt dieses nichts zurück, dann breche ab.

  4. Ist position hinter dem Ende von input oder ist das Zeichen an position weder ein Zeichen U+0054 LATIN CAPITAL LETTER T (T), noch ein Leerzeichen U+0020 SPACE, dann breche ab. Ansonsten rücke position ein Zeichen voraus.

  5. Verarbeite die Zeitkomponente, um hour, minute und second zu erhalten. Gibt dies nichts zurück, dann breche ab.

  6. Ist position nicht hinter dem Ende von input, dann breche ab.

  7. Lass date das Datum mit dem Jahr year, dem Monat month und dem Tag day sein.

  8. Lass time die Zeit mit der Stunde hour, der Minute minute und der Sekunde second sein.

  9. Gib date und time zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a date component to obtain year, month, and day. If this returns nothing, then fail.

  4. If position is beyond the end of input or if the character at position is neither a U+0054 LATIN CAPITAL LETTER T character (T) nor a U+0020 SPACE character, then fail. Otherwise, move position forwards one character.

  5. Parse a time component to obtain hour, minute, and second. If this returns nothing, then fail.

  6. If position is not beyond the end of input, then fail.

  7. Let date be the date with year year, month month, and day day.

  8. Let time be the time with hour hour, minute minute, and second second.

  9. Return date and time.

2.4.5.6 Zeitzonen

Eine Zeitzonenversatz besteht aus einer Anzahl von Stunden und Minuten mit Vorzeichen.

A time-zone offset consists of a signed number of hours and minutes.

Eine Zeichenkette ist eine gültige Zeichenkette für einen Zeitzonenversatz, die einen Zeitzonenversatz repräsentiert, wenn sie entweder aus dem Folgenden besteht:

A string is a valid time-zone offset string representing a time-zone offset if it consists of either:

Dieses Format gestattet Zeitzonenversatz von -23:59 bis +23:59. In der aktuellen Praxis liegt der Bereich des Versatzes von existierenden Zeitzonen bei -12:00 bis +14:00 und die Minutenkomponente des Versatzes von aktuellen Zeitzonen ist entweder 00, 30 oder 45. Es gibt jedoch keine Garantie, dass dies für immer so bleiben wird; Zeitzonen werden durch Länder beliebig verändert und folgen keinem Standard.

This format allows for time-zone offsets from -23:59 to +23:59. In practice, however, right now the range of offsets of actual time zones is -12:00 to +14:00, and the minutes component of offsets of actual time zones is always either 00, 30, or 45. There is no guarantee that this will remain so forever, however; time zones are changed by countries at will and do not follow a standard.

Beachten Sie ebenfalls die Anmerkungen zur Verwendung und Beispiele im Abschnitt unten, Globale Angaben für Datum und Zeit, der Details zur Verwendung von Zeitzonenversatz in Bezug auf historische Zeiten enthält, in denen die formalen Zeitzonen noch nicht bestanden.

See also the usage notes and examples in the global date and time section below for details on using time-zone offsets with historical times that predate the formation of formal time zones.

Die Regeln zur Verarbeitung einer Zeichenkette für Zeitzonenversatz sind wie folgt. Dies wird entweder einen Zeitzonenversatz zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a time-zone offset string are as follows. This will return either a time-zone offset, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Zeitzonenversatzkomponente, um die Zeitzonenstunden timezonehours und die Zeitzonenminuten timezoneminutes zu erhalten. Gibt dies nichts zurück, dann breche ab.

  4. Ist position nicht hinter dem Ende von input, dann breche ab.

  5. Gib den Zeitzonenversatz zurück, der aus den Stunden timezonehours und den Minuten timezoneminutes von UTC besteht.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a time-zone offset component to obtain timezonehours and timezoneminutes. If this returns nothing, then fail. *** missing li ***

  4. If position is not beyond the end of input, then fail.

  5. Return the time-zone offset that is timezonehours hours and timezoneminutes minutes from UTC.

Die Regeln zur Verarbeitung einer Zeitzonenversatzkomponente bei gegebener Zeichenkette input und einer Position position sind wie folgt. Dies wird entweder Zeitzonenstunden und Zeitzonenminuten zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a time-zone offset component, given an input string and a position, are as follows. This will return either time-zone hours and time-zone minutes, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Ist das Zeichen an der Position position das Zeichen U+005A LATIN CAPITAL LETTER Z (Z), dann:

    1. Lass timezonehours 0 sein.

    2. Lass timezoneminutes 0 sein.

    3. Rücke position zum folgenden Zeichen in input vor.

    Ansonsten, wenn das Zeichen bei position entweder ein "+" (U+002B) oder ein "-" (U+002D) ist, dann:

    1. Ist das Zeichen an der Position position ein "+" (U+002B), lass das Vorzeichen sign "positiv" sein. Ansonsten; ist es ein "-" (U+002D), lass das Vorzeichen sign "negativ" sein.

    2. Rücke position zum nächsten Zeichen in input.

    3. Sammle eine Sequenz von Zeichen, die aus ASCII-Ziffern besteht. Lass s die gesammelte Sequenz sein.

    4. Ist s genau zwei Zeichen lang, dann verarbeite diese Unterschritte:

      1. Interpretiere s als eine ganze Dezimalzahl. Lass diese Zahl die Zeitzonenversatzstunden timezonehours sein.

      2. Ist position hinter dem Ende von input oder ist das Zeichen an der Position position kein Doppelpunktzeichen U+003A COLON, dann breche ab. Ansonsten rücke position ein Zeichen voraus.

      3. Sammle eine Sequenz mit Zeichen, die aus ASCII-Ziffern bestehen. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Lass diese Zahl die Zeitzonenversatzminuten timezoneminutes sein.

      Ist s genau vier Zeichen lang, dann verarbeite diese Unterschritte:

      1. Interpretiere die ersten zwei Zeichen von s als eine ganze Dezimalzahl. Lass diese Zahl timezonehours sein.

      2. Interpretiere die letzten beiden Zeichen von s als eine ganze Dezimalzahl. Lass diese Zahl timezoneminutes sein.

      Ansonsten breche ab.

    5. Ist timezonehours keine Zahl im Bereich von 0 ≤ timezonehours ≤ 23, dann breche ab.
    6. Ist sign "negativ", dann negiere timezonehours.
    7. Ist timezoneminutes keine Zahl im Bereich von 0 ≤ timezoneminutes ≤ 59, dann breche ab.
    8. Ist sign "negativ", dann negiere timezoneminutes.

    Ansonsten breche ab.

  2. Gib timezonehours und timezoneminutes zurück.

  1. If the character at position is a U+005A LATIN CAPITAL LETTER Z character (Z), then:

    1. Let timezonehours be 0.

    2. Let timezoneminutes be 0.

    3. Advance position to the next character in input.

    Otherwise, if the character at position is either a "+" (U+002B) or a "-" (U+002D), then:

    1. If the character at position is a "+" (U+002B), let sign be "positive". Otherwise, it's a "-" (U+002D); let sign be "negative".

    2. Advance position to the next character in input.

    3. Collect a sequence of characters that are ASCII-Ziffern. Let s be the collected sequence.

    4. If s is exactly two characters long, then run these substeps:

      1. Interpret s as a base-ten integer. Let that number be the timezonehours.

      2. If position is beyond the end of input or if the character at position is not a U+003A COLON character, then fail. Otherwise, move position forwards one character.

      3. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the timezoneminutes.

      If s is exactly four characters long, then run these substeps:

      1. Interpret the first two characters of s as a base-ten integer. Let that number be the timezonehours.

      2. Interpret the last two characters of s as a base-ten integer. Let that number be the timezoneminutes.

      Otherwise, fail.

    5. If timezonehours is not a number in the range 0 ≤ timezonehours ≤ 23, then fail.
    6. If sign is "negative", then negate timezonehours.
    7. If timezoneminutes is not a number in the range 0 ≤ timezoneminutes ≤ 59, then fail.
    8. If sign is "negative", then negate timezoneminutes.

    Otherwise, fail.

  2. Return timezonehours and timezoneminutes.

2.4.5.7 Globales Datum und Zeit

Globales Datum und Zeit besteht aus einem bestimmten proleptischen Gregorianischen Datum, bestehend aus einem Jahr, einem Monat, einem Tag und einer Zeit, die wiederum aus einer Stunde, einer Minute, einer Sekunde und dem Bruchteil einer Sekunde besteht, ausgedrückt mit dem Zeitzonenversatz, bestehend aus einer Zahl für Stunden und Minuten und einem Vorzeichen. [GREGORIAN]

A global date and time consists of a specific proleptic-Gregorian date, consisting of a year, a month, and a day, and a time, consisting of an hour, a minute, a second, and a fraction of a second, expressed with a time-zone offset, consisting of a signed number of hours and minutes. [GREGORIAN]

Eine Zeichenkette ist eine gültige Zeichenkette für globales Datum und Zeit, die ein Datum, eine Zeit, und einen Zeitzonenversatz repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid global date and time string representing a date, time, and a time-zone offset if it consists of the following components in the given order:

  1. Einer gültigen Zeichenkette für Datum, die das Datum repräsentiert.
  2. Einem Zeichen "T" (U+0054) oder einem Leerzeichen U+0020 SPACE.
  3. Einer gültigen Zeichenkette für Zeit, die die Zeit repräsentiert.
  4. Einer gültigen Zeichenkette für Zeitzonenversatz, die den Zeitzonenversatz repräsentiert.
  1. A valid date string representing the date
  2. A "T" (U+0054) character or a U+0020 SPACE character
  3. A valid time string representing the time
  4. A valid time-zone offset string representing the time-zone offset

Zeiten in Datumsangaben vor der Festlegung von UTC in der Mitte des zwanzigsten Jahrhunderts müssen mit UT1 (zeitgenössische Sonnen-Erd-Zeit am Breitengrad 0°) ausgedrückt und interpretiert werden, nicht in UTC (die Annäherung von UT1, die in SI-Sekunden tickt). Zeiten vor der Festlegung von Zeitzonen müssen als UT1-Zeiten mit expliziten Zeitzonen ausgedrückt und interpretiert werden, die den zeitgenössischen Unterschied der lokalen Zeit und der Zeit in Greenwich, London annähert.***

Times in dates before the formation of UTC in the mid twentieth century must be expressed and interpreted in terms of UT1 (contemporary Earth solar time at the 0° longitude), not UTC (the approximation of UT1 that ticks in SI seconds). Time before the formation of time zones must be expressed and interpeted as UT1 times with explicit time zones that approximate the contemporary difference between the appropriate local time and the time observed at the location of Greenwich, London.

Im Folgenden einige Beispiele für Daten, die als gültige Zeichenketten für Datum und Zeit geschrieben sind.

The following are some examples of dates written as valid global date and time strings.

"0037-12-13 00:00Z"
Mitternacht in Gegenden, die London-Zeit verwenden, zum Geburtstag von Nero (dem Römischen Kaiser). Siehe unten für eine weiterführende Erörterung, auf welches Datum sich dies wirklich bezieht.
"1979-10-14T12:00:00.001-04:00"
Eine Millisekunde nach Mittag am 14. Oktober 1979 in der Zeitzone, die an der Ostküste der USA während der Sommerzeit gilt.
"8592-01-01T02:09+02:09"
Mitternacht UTC am ersten Januar 8592. Die Zeitzone, die mit dieser Zeit assoziiert ist, ist zwei Stunden und neun Minuten gegenüber UTC voraus, was aktuell keine reale Zeitzone ist, aber dennoch erlaubt.
"0037-12-13 00:00Z"
Midnight in areas using London time on the birthday of Nero (the Roman Emperor). See below for further discussion on which date this actually corresponds to.
"1979-10-14T12:00:00.001-04:00"
One millisecond after noon on October 14th 1979, in the time zone in use on the east coast of the USA during daylight saving time.
"8592-01-01T02:09+02:09"
Midnight UTC on the 1st of January, 8592. The time zone associated with that time is two hours and nine minutes ahead of UTC, which is not currently a real time zone, but is nonetheless allowed.

Einiges über diese Daten ist interessant***:

Several things are notable about these dates:

Der Zonenversatz ist keine vollständige Zeitzonenspezifikation. Wenn mit realen Datums- und Zeitwerten gearbeitet wird, ziehen Sie in Betracht, ein getrenntes Feld für die Zeitzone zu verwenden, evtl. IANA-Zeitzonen-IDs. [TIMEZONES]

The zone offset is not a complete time zone specification. When working with real date and time values, consider using a separate field for time zone, perhaps using IANA time zone IDs. [TIMEZONES]

Eine Zeichenkette ist eine gültige Zeichenkette für eine normalisierte erzwungenes UTC-Glabaldatum und Zeit, die ein Datum, eine Zeit und einen Zeitzonenversatz repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid normalized forced-UTC global date and time string representing a date, time, and a time-zone offset if it consists of the following components in the given order:

  1. Eine gültige Zeichenkette für Datum, die das Datum, umgerechnet in die Zeitzone UTC, repräsentiert.
  2. Ein Zeichen "T" (U+0054)
  3. Eine gültige Zeichenkette für Zeit, die die Zeit, umgerechnet in die Zeitzone UTC, repräsentiert und als kürzeste mögliche Zeichenkette für die gegebene Zeit ausgedrückt wird (zum Beispiel durch Weglassen der Sekundenkomponente, wenn die gegebene Zeit null Sekunden nach der Minute ist).
  4. Ein Zeichen "Z" (U+005A).
  1. A valid date string representing the date converted to the UTC time zone
  2. A "T" (U+0054) character
  3. A valid time string representing the time converted to the UTC time zone and expressed as the shortest possible string for the given time (e.g. omitting the seconds component entirely if the given time is zero seconds past the minute)
  4. A "Z" (U+005A) character

Die Regeln zur Verarbeitung einer Zeichenkette für globales Datum und Zeit sind wie folgt. Dieses wird entweder eine Zeit in UTC mit dazugehörigen Informationen zum Zeitzonenversatz für round-tripping*** oder Anzeigezwecke zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a global date and time string are as follows. This will return either a time in UTC, with associated time-zone offset information for round-tripping or display purposes, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Verarbeite eine Datumskomponente, um year, month und day zu erhalten. Gibt dies nichts zurück, dann breche ab.

  4. Ist position hinter dem Ende von input oder ist das Zeichen an der Position position weder ein Zeichen U+0054 LATIN CAPITAL LETTER T (T) noch ein Leerzeichen U+0020 SPACE, dann breche ab. Ansonsten bewege position ein Zeichen voraus.

  5. Verarbeite die Zeitkomponente, um hour, minute und second zu erhalten. Gibt dies nichts zurück, dann breche ab.

  6. Ist position hinter dem Ende von input, dann breche ab.

  7. Verarbeite die Zeitzonenversatzkomponente, um timezonehours und timezoneminutes zu erhalten. Gibt dies nichts zurück, dann breche ab.

  8. Ist position nicht hinter dem Ende von input, dann breche ab.

  9. Lass time den Zeitpunkt im Jahr year, im Monat month, am Tage day, in der Stunde hour, der Minute minute, der Sekunde second sein und ziehe die Stunden timezonehours und die Minuten timezoneminutes ab. Dieser Zeitpunkt ist ein Zeitpunkt in der UTC-Zeitzone.

  10. Lass timezone timezonehours Stunden und timezoneminutes Minuten von UTC entfernt sein.

  11. Gib time und timezone zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Parse a date component to obtain year, month, and day. If this returns nothing, then fail.

  4. If position is beyond the end of input or if the character at position is neither a U+0054 LATIN CAPITAL LETTER T character (T) nor a U+0020 SPACE character, then fail. Otherwise, move position forwards one character.

  5. Parse a time component to obtain hour, minute, and second. If this returns nothing, then fail.

  6. If position is beyond the end of input, then fail.

  7. Parse a time-zone offset component to obtain timezonehours and timezoneminutes. If this returns nothing, then fail.

  8. If position is not beyond the end of input, then fail.

  9. Let time be the moment in time at year year, month month, day day, hours hour, minute minute, second second, subtracting timezonehours hours and timezoneminutes minutes. That moment in time is a moment in the UTC time zone.

  10. Let timezone be timezonehours hours and timezoneminutes minutes from UTC.

  11. Return time and timezone.

2.4.5.8 Wochen

Eine Woche week besteht aus einer Wochenjahreszahl und einer Wochenzahl (im Deutschen meist als Kalenderwoche (KW) bezeichnet), die eine siebentägige Periode repräsentiert, die montags beginnt. Jedes Wochenjahr in diesem Kalendersystem hat entweder 52 oder 53 solcher siebentägigen Perioden wie weiter unten definiert. Die siebentägige Periode, die am Gregorianischen Datum 29. Dezember 1969 (1969-12-29) beginnt, ist als Woche Nummer 1 im Wochenjahr 1970 festgelegt. Darauffolgende Wochen werden sequenziell nummeriert. Die Woche vor der Woche Nummer 1 ist die letzte Woche im vorherigen Wochenjahr und umgekehrt. [GREGORIAN]

A week consists of a week-year number and a week number representing a seven-day period starting on a Monday. Each week-year in this calendaring system has either 52 or 53 such seven-day periods, as defined below. The seven-day period starting on the Gregorian date Monday December 29th 1969 (1969-12-29) is defined as week number 1 in week-year 1970. Consecutive weeks are numbered sequentially. The week before the number 1 week in a week-year is the last week in the previous week-year, and vice versa. [GREGORIAN]

Eine Woche mit einer Zahl year hat 53 Wochen, wenn sie entweder zu einem Jahr year im proleptischen Gregorianischen Kalender gehört, das einen Donnerstag als seinen ersten Tag hat (1. Januar) oder ein Jahr year im proleptischen Gregorianischen Kalender, das einen Mittwoch als seinen ersten Tag (1. Januar) hat, und in dem year eine Zahl ist, die durch 400 geteilt werden kann, oder eine Zahl, die durch 4 teilbar ist, aber nicht durch 100. Alle anderen Wochen haben 52 Wochen.

A week-year with a number year has 53 weeks if it corresponds to either a year year in the proleptic Gregorian calendar that has a Thursday as its first day (January 1st), or a year year in the proleptic Gregorian calendar that has a Wednesday as its first day (January 1st) and where year is a number divisible by 400, or a number divisible by 4 but not by 100. All other week-years have 52 weeks.

Die Wochenzahl des letzten Tages eines Wochenjahres mit 53 Wochen ist 53; die Wochenzahl des letzten Tages eines Wochenjahres mit 52 Wochen ist 52.

The week number of the last day of a week-year with 53 weeks is 53; the week number of the last day of a week-year with 52 weeks is 52.

Die Wochenjahreszahl eines bestimmten Tages kann sich vom der Jahreszahl des Jahres unterscheiden, das diesen Tag im proleptischen Gregorianischen Kalender enthält. Die erste Woche in einem Wochenjahr y ist die Woche, die den ersten Donnerstag des Gregorianischen Jahres y beinhaltet.

The week-year number of a particular day can be different than the number of the year that contains that day in the proleptic Gregorian calendar. The first week in a week-year y is the week that contains the first Thursday of the Gregorian year y.

Für die moderne Verwendung ist eine Woche week, wie sie hier definiert ist, äquivalent zu ISO-Wochen wie sie in ISO 8601 definiert sind. [ISO8601]

For modern purposes, a week as defined here is equivalent to ISO weeks as defined in ISO 8601. [ISO8601]

Eine Zeichenkette ist eine gültige Zeichenkette für Woche, die ein Wochenjahr year und eine Woche week repräsentiert, wenn sie aus den folgenden Komponenten in der gegebenen Reihenfolge besteht:

A string is a valid week string representing a week-year year and week week if it consists of the following components in the given order:

  1. Vier oder mehr ASCII-Ziffern, die year repräsentieren, wobei year > 0 ist.
  2. Ein Zeichen "-" (U+002D).
  3. Ein Zeichen "W" (U+0057).
  4. Zwei ASCII-Ziffern, welche die Woche week im Bereich 1 ≤ week ≤ maxweek repräsentieren, wobei maxweek die Wochenzahl des letzten Tages des Wochenjahres year ist.
  1. Four or more ASCII-Ziffern, representing year, where year > 0
  2. A "-" (U+002D) character
  3. A "W" (U+0057) character
  4. Two ASCII-Ziffern, representing the week week, in the range 1 ≤ week ≤ maxweek, where maxweek is the week number of the last day of week-year year

Die Regeln zur Verarbeitung einer Zeichenkette für Woche sind wie folgt. Dieses gibt entweder eine Wochenjahreszahl und eine Wochennummer zurück oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a week string are as follows. This will return either a week-year number and week number, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Sammle eine Sequenz mit Zeichen, die aus ASCII-Ziffern bestehen. Ist die gesammelte Sequenz nicht mindestens vier Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl. Lass diese Zahl das Jahr year sein.

  4. Ist die Zahl year nicht größer als Null, dann breche ab.

  5. Ist position hinter dem Ende von input oder ist das Zeichen an der Position position kein Minuszeichen U+002D HYPHEN-MINUS, dann breche ab. Ansonsten rücke position ein Zeichen voraus.

  6. Ist position hinter dem Ende von input oder ist das Zeichen an der Position position nicht das Zeichen "W" (U+0057), dann breche ab. Ansonsten rücke position ein Zeichen voraus.

  7. Sammle eine Sequenz mit Zeichen, die aus ASCII-Ziffern besteht. Ist die gesammelte Sequenz nicht genau zwei Zeichen lang, dann breche ab. Ansonsten interpretiere die erhaltene Sequenz als ganze Dezimalzahl. Lass diese Zahl die Woche week sein.

  8. Lass maxweek die Wochennummer des letzten Tages des Jahres year sein.

  9. Ist week keine Zahl im Bereich 1 ≤ week ≤  maxweek, dann breche ab.

  10. Ist position nicht hinter dem Ende von input, dann breche ab.

  11. Gib die Wochenjahreszahl year und die Wochennummer week zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not at least four characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the year.

  4. If year is not a number greater than zero, then fail.

  5. If position is beyond the end of input or if the character at position is not a U+002D HYPHEN-MINUS character, then fail. Otherwise, move position forwards one character.

  6. If position is beyond the end of input or if the character at position is not a "W" (U+0057) character, then fail. Otherwise, move position forwards one character.

  7. Collect a sequence of characters that are ASCII-Ziffern. If the collected sequence is not exactly two characters long, then fail. Otherwise, interpret the resulting sequence as a base-ten integer. Let that number be the week.

  8. Let maxweek be the week number of the last day of year year.

  9. If week is not a number in the range 1 ≤ week ≤  maxweek, then fail.

  10. If position is not beyond the end of input, then fail.

  11. Return the week-year number year and the week number week.

2.4.5.9 Zeitdauer

Eine Zeitdauer duration besteht aus einer Anzahl von Sekunden.

A duration consists of a number of seconds.

Da Monate und Sekunden nicht vergleichbar sind (ein Monat ist keine präzise Anzahl von Sekunden, sondern eine Periode, dessen genaue Länge vom Tag abhängt, von dem aus er gemessen wird), kann eine Zeitdauer duration, wie sie hier in dieser Spezifikation definiert ist, keine Monate (oder Jahre, die äquivalent zu 12 Monaten sind) beinhalten. Nur eine Zeitdauer, die eine bestimmte Anzahl von Sekunden enthält, kann beschrieben werden.

Since months and seconds are not comparable (a month is not a precise number of seconds, but is instead a period whose exact length depends on the precise day from which it is measured) a duration as defined in this specification cannot include months (or years, which are equivalent to twelve months). Only durations that describe a specific number of seconds can be described.

Eine Zeichenkette ist eine gültige Zeichenkette für eine Zeitdauer, die eine Zeitdauer duration t repräsentiert, wenn sie aus einem Bestandteil der folgenden besteht:

A string is a valid duration string representing a duration t if it consists of either of the following:

Die Regeln zur Verarbeitung einer Zeichenkette für eine Zeitdauer sind wie folgt. Dies wird entweder eine Zeitdauer duration zurückgeben oder nichts. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a duration string are as follows. This will return either a duration or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Lass months, seconds und component count Null sein.

  4. Lass M-disambiguator minutes sein.

    Der andere Wert dieses Schalters ist months. Es wird verwendet, um von der Einheit "M" in der ISO8601-Zeitdauer zu unterscheiden, die die gleiche Einheit für Monate und Minuten verwendet. Monate sind nicht gestattet, werden aber für eine zukünftige Kompatibilität verarbeitet, um eine Missinterpretation einer ISO8601-Zeitdauer zu vermeiden, die in anderen Kontexten gültig sein würde.

  5. Übergehe Leerzeichen.

  6. Ist position hinter dem Ende von input, dann breche ab.

  7. Ist das Zeichen in input, auf das von position gezeigt wird, ein Zeichen U+0050 LATIN CAPITAL LETTER P, dann rücke position zum nächsten Zeichen vor. Setze M-disambiguator auf months und übergehe Leerzeichen.

  8. Lass die folgenden Unterschritte in einer Schleife ablaufen bis ein Schritt die Schleife abbricht oder der gesamte Algorithmus abbricht***:

    1. Lass units undefiniert sein. Es wird einer der folgenden Werte zugeordnet werden: years, months, weeks, days, hours, minutes und seconds.

    2. Lass next character undefiniert sein. Es wird verwendet, um Zeichen von input zu verarbeiten.

    3. Ist position hinter dem Ende von input, dann verlasse die Schleife.

    4. Ist das Zeichen in input, auf das von position gezeigt wird, ein Zeichen U+0054 LATIN CAPITAL LETTER T, dann rücke position zum nächsten Zeichen vor. Setze M-disambiguator auf minutes, übergehe Leerzeichen und kehre zum Beginn der Schleife zurück.

    5. Setze next character auf das Zeichen in input, auf das von position gezeigt wird.

    6. Ist next character ein Punktzeichen "." (U+002E), dann lasse N gleich Null sein. (Rücke position nicht vor. Das wird unten erledigt.)

      Ansonsten, ist next character eine ASCII-Ziffer, dann sammle eine Sequenz mit Zeichen, die aus ASCII-Ziffern bestehen, interpretiere die erhaltene Sequenz als eine ganze Dezimalzahl und lass N diese Zahl sein.

      Ansonsten ist next character nicht Teil einer Zahl; breche ab.

    7. Ist position hinter dem Ende von input, dann breche ab.

    8. Setze next character auf das Zeichen in input, auf das von position gezeigt wird und rücke diesmal position zum nächsten Zeichen vor. (War next character zuvor ein Punktzeichen U+002E FULL STOP (.), wird es auch diesmal jenes Zeichen sein.)

    9. Ist next character ein Punktzeichen "." (U+002E), dann verarbeite diese Unterschritte:

      1. Sammle eine Sequenz mit Zeichen, die aus ASCII-Ziffern besteht. Lass s die erhaltene Sequenz sein.

      2. Ist s die leere Zeichenkette, dann breche ab.

      3. Lass length die Anzahl der Zeichen in s sein.

      4. Lass fraction das Ergebnis der Interpretation von s als ganze Dezimalzahl sein und teile dann diese Zahl durch 10length.

      5. Inkrementiere N mit fraction.

      6. Übergehe Leerzeichen.

      7. Ist position hinter dem Ende von input, dann breche ab.

      8. Setze next character auf das Zeichen in input, auf das position zeigt und rücke position zum nächsten Zeichen vor.

      9. Ist next character weder ein Zeichen U+0053 LATIN CAPITAL LETTER S, noch das Zeichen U+0073 LATIN SMALL LETTER S, dann breche ab.

      10. Setze units auf seconds.

      Ansonsten, verarbeite diese Unterschritte:

      1. Ist next character ein Leerzeichen, dann übergehe Leerzeichen, setze next character auf das Zeichen in input, auf das position zeigt und rücke position zum nächsten Zeichen vor.

      2. Ist next character das Zeichen U+0059 LATIN CAPITAL LETTER Y oder das Zeichen U+0079 LATIN SMALL LETTER Y, setze units auf years und setze M-disambiguator auf months.

        Ist next character das Zeichen U+004D LATIN CAPITAL LETTER M oder das Zeichen U+006D LATIN SMALL LETTER M und ist M-disambiguator months, dann setze units auf months.

        Ist next character das Zeichen U+0057 LATIN CAPITAL LETTER W oder das Zeichen U+0077 LATIN SMALL LETTER W, setze units auf weeks und setze M-disambiguator auf minutes.

        Ist next character das Zeichen U+0044 LATIN CAPITAL LETTER D oder das Zeichen U+0064 LATIN SMALL LETTER D, setze units auf days und setze M-disambiguator auf minutes.

        Ist next character das Zeichen U+0048 LATIN CAPITAL LETTER H oder das Zeichen U+0068 LATIN SMALL LETTER H, setze units auf hours und setze M-disambiguator auf minutes.

        Ist next character das Zeichen U+004D LATIN CAPITAL LETTER M oder das Zeichen U+006D LATIN SMALL LETTER M und ist M-disambiguator is minutes, dann setze units auf minutes.

        Ist next character das Zeichen U+0053 LATIN CAPITAL LETTER S oder das Zeichen U+0073 LATIN SMALL LETTER S, setze units auf seconds und setze M-disambiguator auf minutes.

        Ansonsten, ist next character keines der Zeichen oben, breche ab.

    10. Inkrementiere component count.

    11. Lass multiplier 1 sein.

    12. Ist units years, multipliziere multiplier mit 12 und setze units auf months.

    13. Ist units months, addiere das Produkt von N und multiplier auf months.

      Ansonsten, verarbeite diese Unterschritte:

      1. Ist units weeks, multipliziere multiplier mit 7 und setze units auf days.

      2. Ist units days, multipliziere multiplier mit 24 und setze units auf hours.

      3. Ist units hours, multipliziere multiplier mit 60 und setze units auf minutes.

      4. Ist units minutes, multipliziere multiplier mit 60 und setze units auf seconds.

      5. Zwangsweise ist units jetzt seconds. Addiere das Produkt von N und multiplier zu seconds.

    14. Übergehe Leerzeichen.

  9. Ist component count Null, breche ab.

  10. Ist months nicht Null, breche ab.

  11. Gib die Zeitdauer duration zurück die aus seconds Sekunden besteht.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let months, seconds, and component count all be zero.

  4. Let M-disambiguator be minutes.

    This flag's other value is months. It is used to disambiguate the "M" unit in ISO8601 durations, which use the same unit for months and minutes. Months are not allowed, but are parsed for future compatibility and to avoid misinterpreting ISO8601 durations that would be valid in other contexts.

  5. Skip whitespace.

  6. If position is past the end of input, then fail.

  7. If the character in input pointed to by position is a U+0050 LATIN CAPITAL LETTER P character, then advance position to the next character, set M-disambiguator to months, and skip whitespace.

  8. Run the following substeps in a loop, until a step requiring the loop to be broken or the entire algorithm to fail is reached:

    1. Let units be undefined. It will be assigned one of the following values: years, months, weeks, days, hours, minutes, and seconds.

    2. Let next character be undefined. It is used to process characters from the input.

    3. If position is past the end of input, then break the loop.

    4. If the character in input pointed to by position is a U+0054 LATIN CAPITAL LETTER T character, then advance position to the next character, set M-disambiguator to minutes, skip whitespace, and return to the top of the loop.

    5. Set next character to the character in input pointed to by position.

    6. If next character is a "." (U+002E) character, then let N equal zero. (Do not advance position. That is taken care of below.)

      Otherwise, if next character is an ASCII digit, then collect a sequence of characters that are ASCII digits, interpret the resulting sequence as a base-ten integer, and let N be that number.

      Otherwise next character is not part of a number; fail.

    7. If position is past the end of input, then fail.

    8. Set next character to the character in input pointed to by position, and this time advance position to the next character. (If next character was a U+002E FULL STOP character (.) before, it will still be that character this time.)

    9. If next character is a "." (U+002E) character, then run these substeps:

      1. Collect a sequence of characters that are ASCII-Ziffern. Let s be the resulting sequence.

      2. If s is the empty string, then fail.

      3. Let length be the number of characters in s.

      4. Let fraction be the result of interpreting s as a base-ten integer, and then dividing that number by 10length.

      5. Increment N by fraction.

      6. Skip whitespace.

      7. If position is past the end of input, then fail.

      8. Set next character to the character in input pointed to by position, and advance position to the next character.

      9. If next character is neither a U+0053 LATIN CAPITAL LETTER S character nor a U+0073 LATIN SMALL LETTER S character, then fail.

      10. Set units to seconds.

      Otherwise, run these substeps:

      1. If next character is a space character, then skip whitespace, set next character to the character in input pointed to by position, and advance position to the next character.

      2. If next character is a U+0059 LATIN CAPITAL LETTER Y character, or a U+0079 LATIN SMALL LETTER Y character, set units to years and set M-disambiguator to months.

        If next character is a U+004D LATIN CAPITAL LETTER M character or a U+006D LATIN SMALL LETTER M character, and M-disambiguator is months, then set units to months.

        If next character is a U+0057 LATIN CAPITAL LETTER W character or a U+0077 LATIN SMALL LETTER W character, set units to weeks and set M-disambiguator to minutes.

        If next character is a U+0044 LATIN CAPITAL LETTER D character or a U+0064 LATIN SMALL LETTER D character, set units to days and set M-disambiguator to minutes.

        If next character is a U+0048 LATIN CAPITAL LETTER H character or a U+0068 LATIN SMALL LETTER H character, set units to hours and set M-disambiguator to minutes.

        If next character is a U+004D LATIN CAPITAL LETTER M character or a U+006D LATIN SMALL LETTER M character, and M-disambiguator is minutes, then set units to minutes.

        If next character is a U+0053 LATIN CAPITAL LETTER S character or a U+0073 LATIN SMALL LETTER S character, set units to seconds and set M-disambiguator to minutes.

        Otherwise if next character is none of the above characters, then fail.

    10. Increment component count.

    11. Let multiplier be 1.

    12. If units is years, multiply multiplier by 12 and set units to months.

    13. If units is months, add the product of N and multiplier to months.

      Otherwise, run these substeps:

      1. If units is weeks, multiply multiplier by 7 and set units to days.

      2. If units is days, multiply multiplier by 24 and set units to hours.

      3. If units is hours, multiply multiplier by 60 and set units to minutes.

      4. If units is minutes, multiply multiplier by 60 and set units to seconds.

      5. Forcibly, units is now seconds. Add the product of N and multiplier to seconds.

    14. Skip whitespace.

  9. If component count is zero, fail.

  10. If months is not zero, fail.

  11. Return the duration consisting of seconds seconds.

2.4.5.10 Verschwommenere Momente in der Zeit

Eine Zeichenkette ist eine gültige Zeichenkette für Datum mit einer optionalen Zeit, wenn sie auch eines der folgenden Dinge ist:

A string is a valid date string with optional time if it is also one of the following:


Die Regeln zur Verarbeitung einer Zeichenkette für Datum und Zeit sind wie folgt. Der Algorithmus wird entweder ein Datum date, eine Zeit time, ein globales Datum mit Zeit global date and time oder nichts zurück geben. Sagt der Algorithmus an irgendeiner Stelle, dass er "scheitert", bedeutet das, dass er an diesem Punkt abbricht und nichts zurückgibt.

The rules to parse a date or time string are as follows. The algorithm will return either a date, a time, a global date and time, or nothing. If at any point the algorithm says that it "fails", this means that it is aborted at that point and returns nothing.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Beginn der Zeichenkette zeigend.

  3. Setze start position auf die gleiche Position wie position.

  4. Setze die Schalter date present und time present auf wahr.

  5. Verarbeite eine Datumskomponente, um year, month und day zu erhalten. Wenn das scheitert, setze den Schalter date present auf falsch.

  6. Ist date present wahr und position ist nicht hinter dem Ende von input und ist das Zeichen an der Position position entweder das Zeichen "T" (U+0054) oder ein Leerzeichen U+0020 SPACE, dann rücke position zum nächsten Zeichen in input vor.

    Ansonsten, wenn date present wahr ist und entweder position hinter dem Ende von input ist oder das Zeichen an der Position position weder das Zeichen "T" (U+0054) noch ein Leerzeichen U+0020 SPACE sind, dann setze time present auf falsch.

    Ansonsten, wenn date present falsch ist, dann setze position zurück an die gleiche Position, an der start position ist.

  7. Ist der Schalter für time present wahr, dann verarbeite eine Zeitkomponente, um hour, minute und second zu erhalten. Gibt dies nichts zurück, dann breche ab.

  8. Sind die Schalter date present und time present beide wahr, aber ist position hinter dem Ende von input, dann breche ab.

  9. Sind die Schalter date present und time present beide wahr, verarbeite eine Zeitzonenversatzkomponente, um timezonehours und timezoneminutes zu erhalten. Gibt dieses nichts zurück, dann breche ab.

  10. Ist position nicht hinter dem Ende von input, dann breche ab.

  11. Ist der Schalter date present und der Schalter time present falsch, dann lass date das Datum mit dem Jahr year, dem Monat month und dem Tag day sein und gib date zurück.

    Ansonsten, wenn der Schalter time present wahr ist und der Schalter date present falsch, dann lass time die Zeit mit Stunde hour, Minute minute und Sekunde secondsein und gib time zurück.

    Ansonsten, lass time den Zeitpunkt im Jahr year, Monat month, Tag day, Stunde hour, Minute minute, Sekunde second, abzüglich der Stunden timezonehours und der Minuten timezoneminutes, sein. Dieser Zeitpunkt sei ein Moment in der UTC-Zeitzone; lass timezone timezonehours Stunden und timezoneminutes Minuten entfernt von UTC sein; und gib time und timezone zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Set start position to the same position as position.

  4. Set the date present and time present flags to true.

  5. Parse a date component to obtain year, month, and day. If this fails, then set the date present flag to false.

  6. If date present is true, and position is not beyond the end of input, and the character at position is either a "T" (U+0054) character or a U+0020 SPACE character, then advance position to the next character in input.

    Otherwise, if date present is true, and either position is beyond the end of input or the character at position is neither a "T" (U+0054) character nor a U+0020 SPACE character, then set time present to false.

    Otherwise, if date present is false, set position back to the same position as start position.

  7. If the time present flag is true, then parse a time component to obtain hour, minute, and second. If this returns nothing, then fail.

  8. If the date present and time present flags are both true, but position is beyond the end of input, then fail.

  9. If the date present and time present flags are both true, parse a time-zone offset component to obtain timezonehours and timezoneminutes. If this returns nothing, then fail.

  10. If position is not beyond the end of input, then fail.

  11. If the date present flag is true and the time present flag is false, then let date be the date with year year, month month, and day day, and return date.

    Otherwise, if the time present flag is true and the date present flag is false, then let time be the time with hour hour, minute minute, and second second, and return time.

    Otherwise, let time be the moment in time at year year, month month, day day, hours hour, minute minute, second second, subtracting timezonehours hours and timezoneminutes minutes, that moment in time being a moment in the UTC time zone; let timezone be timezonehours hours and timezoneminutes minutes from UTC; and return time and timezone.

2.4.6 Farben

Eine einfache Farbe besteht aus drei 8-bit Nummern im Bereich 0 bis 255, welche die Komponenten rot, grün und blau der Farbe im sRGB-Farbraum repräsentieren. [SRGB]

A simple color consists of three 8-bit numbers in the range 0..255, representing the red, green, and blue components of the color respectively, in the sRGB color space. [SRGB]

Eine Zeichenkette ist eine gültige einfache Farbe, wenn sie genau sieben Zeichen lang ist und das erste Zeichen das Zeichen "#" (U+0023) ist und die übrigen Zeichen alle ASCII-Hexadezimalziffern sind. Die ersten beiden Ziffern repräsentieren die rote Komponente, die mittleren zwei Ziffern die grüne Komponente und die letzten beiden Ziffern die blaue Komponente in Hexadezimalschreibweise.

A string is a valid simple color if it is exactly seven characters long, and the first character is a "#" (U+0023) character, and the remaining six characters are all ASCII hex digits, with the first two digits representing the red component, the middle two digits representing the green component, and the last two digits representing the blue component, in hexadecimal.

Eine Zeichenkette ist eine gültige kleingeschriebene einfache Farbe, wenn sie eine gültige einfache Farbe ist und keine Zeichen aus dem Bereich U+0041 LATIN CAPITAL LETTER A bis U+0046 LATIN CAPITAL LETTER F verwendet.

A string is a valid lowercase simple color if it is a valid simple color and doesn't use any characters in the range U+0041 LATIN CAPITAL LETTER A to U+0046 LATIN CAPITAL LETTER F.

Die Regeln zur Verarbeitung von einfachen Farbwerten sind, wie im folgenden Algorithmus gegeben. Wenn aufgerufen, müssen die Schritte in der gegebenen Reihenfolge verarbeitet werden. Beim ersten Schritt, der einen Wert zurück gibt, muss abgebrochen werden. Dieser Algorithmus gibt entweder eine einfache Farbe oder einen Fehler zurück.

The rules for parsing simple color values are as given in the following algorithm. When invoked, the steps must be followed in the order given, aborting at the first step that returns a value. This algorithm will return either a simple color or an error.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Ist input nicht genau sieben Zeichen lang, dann gib einen Fehler zurück.

  3. Ist das erste Zeichen in input kein Raute-Zeichen U+0023 NUMBER SIGN (#), dann gib einen Fehler zurück.

  4. Sind die letzten sechs Zeichen von input nicht ausschließlich ASCII-Hexadezimalziffern, dann gib einen Fehler zurück.

  5. Lass result eine einfache Farbe sein.

  6. Interpretiere das zweite und dritte Zeichen als eine Hexadezimalzahl und lass das Ergebnis die rote Komponente von result sein.

  7. Interpretiere das vierte und das fünfte Zeichen als eine Hexadezimalzahl und lass das Ergebnis die grüne Komponente von result sein.

  8. Interpretiere die sixth and seventh Zeichen als eine Hexadezimalzahl und lass das Ergebnis die blaue Komponente von result sein.

  9. Gib result zurück.

  1. Let input be the string being parsed.

  2. If input is not exactly seven characters long, then return an error.

  3. If the first character in input is not a U+0023 NUMBER SIGN character (#), then return an error.

  4. If the last six characters of input are not all ASCII hex digits, then return an error.

  5. Let result be a simple color.

  6. Interpret the second and third characters as a hexadecimal number and let the result be the red component of result.

  7. Interpret the fourth and fifth characters as a hexadecimal number and let the result be the green component of result.

  8. Interpret the sixth and seventh characters as a hexadecimal number and let the result be the blue component of result.

  9. Return result.

Die Regeln zur Serialisierung von einfachen Farbwerten bei einer gegebenen einfachen Farbe sind wie im folgenden Algorithmus gegeben:

The rules for serializing simple color values given a simple color are as given in the following algorithm:

  1. Lass result eine Zeichenkette sein, die aus einem einzigen Zeichen "#" (U+0023) besteht.

  2. Konvertiere die rote, grüne und blaue Komponente nacheinander in zweistellige Hexadezimalzahlen, verwende kleingeschriebene Hexadezimalziffern dazu, fülle einstellige Zahlen mit Nullen auf, falls nötig und hänge diese Zahlen in der Reihenfolge rot, grün, blau an result.

  3. Gib result zurück, welches eine gültige kleingeschriebene einfache Farbe sein wird.

  1. Let result be a string consisting of a single "#" (U+0023) character.

  2. Convert the red, green, and blue components in turn to two-digit hexadecimal numbers using lowercase ASCII hex digits, zero-padding if necessary, and append these numbers to result, in the order red, green, blue.

  3. Return result, which will be a valid lowercase simple color.


Einige obsolete Legacy-Attribute verarbeiten Farben in einer komplizierteren Weise und verwenden die Regeln zur Verarbeitung eines Legacy-Farbwertes, die in dem folgenden Algorithmus gegeben werden. Wenn aufgerufen, müssen die Schritte in der gegebenen Reihenfolge verarbeitet werden. Beim ersten Schritt, der einen Wert zurück gibt, muss abgebrochen werden. Dieser Algorithmus gibt entweder eine einfache Farbe oder einen Fehler zurück.

Some obsolete legacy attributes parse colors in a more complicated manner, using the rules for parsing a legacy color value, which are given in the following algorithm. When invoked, the steps must be followed in the order given, aborting at the first step that returns a value. This algorithm will return either a simple color or an error.

  1. Lass input die Zeichenkette sein, die verarbeitet wird.

  2. Ist input eine leere Zeichenkette, dann gib einen Fehler zurück.

  3. Entferne führende und nachfolgende Leerzeichen aus input.

  4. Ist input ein Treffer für die Zeichenkette "transparent" unbeachtet der Groß- und Kleinschreibweise des ASCII , dann gib einen Fehler zurück.

  5. Ist input ein Treffer für die im Abschnitt SVG color keywords aufgelisteten Schlüsselwörter in der CSS3-Farbspezifikation, unbeachtet der Groß- und Kleinschreibweise des ASCII, dann gib die einfache Farbe zurück, die für das entsprechende Schlüsselwort gilt. *** Nochmal lesen *** [CSSCOLOR]

    CSS2-Systemfarben werden nicht erkannt.

  6. Ist input vier Zeichen lang, und ist das erste Zeichen in input das Zeichen "#" (U+0023) und sind die letzten drei Zeichen von input input alle ASCII-Hexadezimalziffern, dann verarbeite diese Unterschritte:

    1. Lass result eine einfache Farbe sein.

    2. Interpretiere das zweite Zeichen von input als eine Hexadezimalziffer; lass die rote Komponente von result die erhaltene Zahl mit 17 multipliziert sein.

    3. Interpretiere das dritte Zeichen von input als eine Hexadezimalziffer; lass die grüne Komponente von result die erhaltene Zahl mit 17 multipliziert sein.

    4. Interpretiere das vierte Zeichen von input als eine Hexadezimalziffer; lass die blaue Komponete von result die erhaltene Zahl mit 17 multipliziert sein.

    5. Gib result zurück.

  7. Ersetze jedes Zeichen in input die einen Unicode-Codepunkt größer als U+FFFF haben (das bedeutet, alle Zeichen, die nicht in der grundlegenden mehrsprachigen Ebene sind) mit der zweistelligen Zeichenkette "00".

  8. Ist input länger als 128 Zeichen, kürze input und lasse nur die ersten 128 Zeichen übrig.

  9. Ist das erste Zeichen in input das Zeichen "#" (U+0023), entferne es.

  10. Entferne alle Zeichen in input, die keine ASCII-Hexadezimalziffern sind, mit dem Zeichen "0" (U+0030).

  11. Während die Länge von input Null ist oder kein Mehrfaches von drei, füge das Zeichen "0" (U+0030) zu input hinzu.

  12. Teile input in drei Zeichenketten gleicher Länge, um drei Komponenten zu erhalten. Lass length die Länge jener Komponenten sein (ein Drittel der Länge von input).

  13. Ist length größer als 8, dann entferne die führenden length-8-Zeichen in jeder Komponente und lass length 8 sein.

  14. Während length größer ist als zwei und das erste Zeichen in jeder Komponente das Zeichen "0" (U+0030) ist, entferne das Zeichen und verringere length um eins.

  15. Ist length immernoch größer als zwei, verkürze jede Komponente und lasse nur die ersten beiden Zeichen in jeder übrig.

  16. Lass result eine einfache Farbe sein.

  17. Interpretiere die erste Komponente als eine Hexadezimalzahl; lass die rote Komponente von result die resultierende Zahl sein.

  18. Interpretiere die zweite Komponente als eine Hexadezimalzahl; lass die grüne Komponente von result die resultierende Zahl sein.

  19. Interpretiere die dritte Komponente als eine Hexadezimalzahl; lass die blaue Komponente von result die resultierende Zahl sein.

  20. Gib result zurück.

  1. Let input be the string being parsed.

  2. If input is the empty string, then return an error.

  3. Strip leading and trailing whitespace from input.

  4. If input is an ASCII case-insensitive match for the string "transparent", then return an error.

  5. If input is an ASCII case-insensitive match for one of the keywords listed in the SVG color keywords section of the CSS3 Color specification, then return the simple color corresponding to that keyword. [CSSCOLOR]

    CSS2 System Colors are not recognised.

  6. If input is four characters long, and the first character in input is a "#" (U+0023) character, and the last three characters of input are all ASCII hex digits, then run these substeps:

    1. Let result be a simple color.

    2. Interpret the second character of input as a hexadecimal digit; let the red component of result be the resulting number multiplied by 17.

    3. Interpret the third character of input as a hexadecimal digit; let the green component of result be the resulting number multiplied by 17.

    4. Interpret the fourth character of input as a hexadecimal digit; let the blue component of result be the resulting number multiplied by 17.

    5. Return result.

  7. Replace any characters in input that have a Unicode code point greater than U+FFFF (i.e. any characters that are not in the basic multilingual plane) with the two-character string "00".

  8. If input is longer than 128 characters, truncate input, leaving only the first 128 characters.

  9. If the first character in input is a "#" (U+0023) character, remove it.

  10. Replace any character in input that is not an ASCII hex digit with the character "0" (U+0030).

  11. While input's length is zero or not a multiple of three, append a "0" (U+0030) character to input.

  12. Split input into three strings of equal length, to obtain three components. Let length be the length of those components (one third the length of input).

  13. If length is greater than 8, then remove the leading length-8 characters in each component, and let length be 8.

  14. While length is greater than two and the first character in each component is a "0" (U+0030) character, remove that character and reduce length by one.

  15. If length is still greater than two, truncate each component, leaving only the first two characters in each.

  16. Let result be a simple color.

  17. Interpret the first component as a hexadecimal number; let the red component of result be the resulting number.

  18. Interpret the second component as a hexadecimal number; let the green component of result be the resulting number.

  19. Interpret the third component as a hexadecimal number; let the blue component of result be the resulting number.

  20. Return result.


2.4.7 Durch Leerzeichen getrennte Token

Eine Zusammenstellung aus Token, die durch Leerzeichen getrennt sind ist eine Zeichenkette, die null oder mehrere Worte enthält (bekannt als Token), getrennt durch ein oder mehrere Leerzeichen, wobei Worte aus irgendeiner Zeichenkette mit einem oder mehreren Zeichen bestehen, von denen kein Zeichen ein Leerzeichen ist.

A set of space-separated tokens is a string containing zero or more words (known as tokens) separated by one or more Leerzeichen, where words consist of any string of one or more characters, none of which are Leerzeichen.

Eine Zeichenkette, die eine Zusammenstellung von Token besitzt, die durch Leerzeichen getrennt sind, kann führende und nachfolgende Leerzeichen haben.

A string containing a set of space-separated tokens may have leading or trailing Leerzeichen.

Eine ungeordnete Zusammenstellung aus einzigartigen durch Leerzeichen getrennte Token ist eine Zusammenstellung aus Token, die durch Leerzeichen getrennt sind, bei der keines der Token mehrfach vorkommt.

An unordered set of unique space-separated tokens is a set of space-separated tokens where none of the tokens are duplicated.

Eine geordnete Zusammenstellung aus einzigartigen Token, die durch Leerzeichen getrennt sind ist eine Zusammenstellung von Token, die durch Leerzeichen getrennt sind, bei der keines der Token mehrfach vorkommt, aber bei der die Reihenfolge Bedeutung hat.

An ordered set of unique space-separated tokens is a set of space-separated tokens where none of the tokens are duplicated but where the order of the tokens is meaningful.

Zusammenstellungen aus Token, die durch Leerzeichen getrennt sind, haben manchmal eine definierte Menge erlaubter Werte. Ist eine Zusammenstellung von definierten Werten definiert ist, müssen alle Token aus jener Liste der erlaubten Werte sein; andere Werte sind nicht konform. Ist keine Zusammenstellung mit erlaubten Werten gegeben, dan sind alle Werte konform.

Sets of space-separated tokens sometimes have a defined set of allowed values. When a set of allowed values is defined, the tokens must all be from that list of allowed values; other values are non-conforming. If no such set of allowed values is provided, then all values are conforming.

Wie Token in einer Zusammenstellung von Token, die durch Leerzeichen getrennt sind verglichen werden müssen (zum Beispiel ob mit gleicher Groß- und Kleinschreibung oder nicht) wird individuell für eine Zusammenstellung definiert.

How tokens in a set of space-separated tokens are to be compared (e.g. case-sensitively or not) is defined on a per-set basis.

Muss ein Benutzerprogramm eine Zeichenkette an Leerzeichen trennen, dann muss es den folgenden Algorithmus verwenden:

When a user agent has to split a string on spaces, it must use the following algorithm:

  1. Lass input die zu verarbeitende Zeichenkette sein.

  2. Lass position einen Zeiger in input hinein sein, der Anfangs auf den Beginn der Zeichenkette zeigt.

  3. Lass tokens eine geordnete Liste mit Token sein, anfangs leer.

  4. Übergehe Leerzeichen.

  5. Während position nicht hinter dem Ende von input ist:

    1. Sammle eine Sequenz aus Zeichen, die keine Leerzeichen sind.

    2. Hänge die Zeichenkette, die im vorherigen Schritt gesammelt wurde, an tokens.

    3. Übergehe Leerzeichen.

  6. Gib tokens zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let tokens be an ordered list of tokens, initially empty.

  4. Skip whitespace

  5. While position is not past the end of input:

    1. Collect a sequence of characters that are not Leerzeichen.

    2. Append the string collected in the previous step to tokens.

    3. Skip whitespace

  6. Return tokens.

2.4.8 Token, die durch Komma getrennt sind

Eine Zusammenstellung von Token, die durch Komma getrennt sind ist eine Zeichenkette, die null oder mehrere Token enthält, jedes vom nächsten durch ein einzelnes Kommazeichen "," (U+002C) getrennt, wobei das Token aus irgendeiner Zeichenkette mit null oder mehreren Zeichen besteht, die weder mit Leerzeichen beginnt oder endet, noch irgendwelche Kommazeichen "," (U+002C) enthält und optional von Leerzeichen umgeben ist.

A set of comma-separated tokens is a string containing zero or more tokens each separated from the next by a single "," (U+002C) character, where tokens consist of any string of zero or more characters, neither beginning nor ending with space characters, nor containing any "," (U+002C) characters, and optionally surrounded by Leerzeichen.

Die Zeichenkette " a ,b,,d d " besteht zum Beispiel aus vier Token: "a", "b", die leere Zeichenkette und "d d". Führende und nachfolgende Leerzeichen um jedes Token herum zählen nicht als Teil des Tokens und die leere Zeichenkette kann ein Token sein.

For instance, the string " a ,b,,d d " consists of four tokens: "a", "b", the empty string, and "d d". Leading and trailing whitespace around each token doesn't count as part of the token, and the empty string can be a token.

Zusammenstellungen aus Token, die durch Kommata getrennt sind haben manchmal weitere Einschränkungen dazu, woraus ein gültiges Token besteht. Wenn solche Einschränkungen definiert sind, muss das Token all diese Einschränkungen einhalten; andere Werte sind nicht konform. Sind solche Einschränkungen nicht angegeben, dann sind alle Werte konform.

Sets of comma-separated tokens sometimes have further restrictions on what consists a valid token. When such restrictions are defined, the tokens must all fit within those restrictions; other values are non-conforming. If no such restrictions are specified, then all values are conforming.

Wenn ein Benutzerprogramm eine Zeichenkette an Kommata aufspalten muss, dann muss es den folgenden Algorithmus verwenden:

When a user agent has to split a string on commas, it must use the following algorithm:

  1. Lass input die zu verarbeitende Zeichenkette sein.

  2. Lass position einen Zeiger in input hinein sein, anfangs auf den Anfang der Zeichenkette zeigend.

  3. Lass tokens eine geordnete Liste mit Token sein, anfangs leer.

  4. Token: Ist position hinter dem Ende von input, springe zum letzten Schritt.

  5. Sammle eine Sequenz von Zeichen, die keine Kommata "," (U+002C) sind. Lass s die erhaltene Sequenz sein (die eventuell die leere Zeichenkette sein kann).

  6. Entferne führende und nachfolgende Leerzeichen von s.

  7. Hänge s an tokens an.

  8. Ist position nicht hinter dem Ende von input, dann ist das Zeichen an der Position position ein Kommazeichen "," (U+002C); rücke position hinter jenes Zeichen.

  9. Springe zurück zum Schritt, der Token genannt wird.

  10. Gib tokens zurück.

  1. Let input be the string being parsed.

  2. Let position be a pointer into input, initially pointing at the start of the string.

  3. Let tokens be an ordered list of tokens, initially empty.

  4. Token: If position is past the end of input, jump to the last step.

  5. Collect a sequence of characters that are not "," (U+002C) characters. Let s be the resulting sequence (which might be the empty string).

  6. Strip leading and trailing whitespace from s.

  7. Append s to tokens.

  8. If position is not past the end of input, then the character at position is a "," (U+002C) character; advance position past that character.

  9. Jump back to the step labeled token.

  10. Return tokens.

2.4.9 Verweis

Ein gültiger Raute-Name-Verweis***Erklärung warum so geschrieben*** zu einem Element des Typs type ist eine Zeichenkette, die aus einem Rautezeichen "#" (U+0023) besteht, gefolgt von einer Zeichenkette, die genau dem Wert des Attributs name eines Elements mit dem Typ type im Dokument entspricht.

A valid hash-name reference to an element of type type is a string consisting of a "#" (U+0023) character followed by a string which exactly matches the value of the name attribute of an element with type type in the document.

Die Regeln zur Verarbeitung eines Raute-Name-Verweises zu einem Element des Typs type sind wie folgt:

The rules for parsing a hash-name reference to an element of type type are as follows:

  1. Enthält die zu verarbeitende Zeichenkette kein Rautezeichen U+0023 NUMBER SIGN oder ist das erste solche Zeichen in der Zeichenkette das letzte Zeichen in der Zeichenkette, dann gib null zurück und breche diese Schritte ab.

  2. Lass s die Zeichenkette sein, die direkt mit dem Zeichen hinter dem ersten Rautezeichen U+0023 NUMBER SIGN in der Zeichenkette beginnt und bis zum Ende der Zeichenkette verarbeitet wird. ***Bugreport machen***

  3. Gib das erste Element des Typs type zurück, das ein Attribut id hat, dessen Wert ein von der Groß- und Kleinschreibung abhängiger Treffer für s ist, oder das ein Attribut name hat, dessen Wert ein compatibility caseless*** Treffer für s ist.

https://www.w3.org/International/wiki/CaseForCaselessHTML

http://www.unicode.org/versions/Unicode7.0.0/ch05.pdf#G21180

  1. If the string being parsed does not contain a U+0023 NUMBER SIGN character, or if the first such character in the string is the last character in the string, then return null and abort these steps.

  2. Let s be the string from the character immediately after the first U+0023 NUMBER SIGN character in the string being parsed up to the end of that string.

  3. Return the first element of type type that has an id attribute whose value is a case-sensitive match for s or a name attribute whose value is a compatibility caseless match for s.

2.4.10 Media Queries

Eine Zeichenkette ist eine gültige Media Query, wenn sie der Produktion* media_query_list der Spezifikation Media Queries entspricht. [MQ]

A string is a valid media query if it matches the media_query_list production of the Media Queries specification. [MQ]

Eine Zeichenkette entspricht der Umgebung des Benutzers, wenn sie die leere Zeichenkette ist, eine Zeichenkette, die nur aus Leerzeichen besteht oder eine Media Query, die der Umgebung des Benutzers entsprechend der Definitionen, die in der Spezifikation Media Queries gegeben sind, entpricht. [MQ]

A string matches the environment of the user if it is the empty string, a string consisting of only Leerzeichen, or is a media query that matches the user's environment according to the definitions given in the Media Queries specification. [MQ]

2.5 URLs

2.5.1 Terminologie

Gleich vorweg, "der" URL, "der" Uniform Resource Locator, "der" Quellenlokalisierer oder "der" Quellenanzeiger ist in dieser Übersetzung männlich. Das URL oder die URL mögen andernorts auch in Gebrauch sein. Diese Übersetzung möchte sich nicht an der Diskussion beteiligen, welches nun der Heilige Grahl ist. Diese Zeit ist besser in die Übersetzung investiert.

Ein URL ist ein gültiger URL, wenn er konform zu den Konformitätsanforderungen für Autoren im URL-Standard ist. [URL]

A URL is a valid URL if it conforms to the authoring conformance requirements in the URL standard. [URL]

Eine Zeichenkette ist ein gültiger nicht leerer URL, wenn sie ein gültiger URL ist, aber nicht die leere Zeichenkette.

A string is a valid non-empty URL if it is a valid URL but it is not the empty string.

Eine Zeichenkette ist ein gültiger URL, der möglicherweise von Leerzeichen umgeben ist, sofern er nach dem Entfernen von führenden und nachfolgenden Leerzeichen ein gültiger URL ist.

A string is a valid URL potentially surrounded by spaces if, after stripping leading and trailing whitespace from it, it is a valid URL.

Eine Zeichenkette ist ein gültiger nicht leerer URL, der möglicherweise von Leerzeichen umgeben ist, sofern er nach dem Entfernen von führenden und nachfolgenden Leerzeichen ein gültiger nicht leerer URL ist.

A string is a valid non-empty URL potentially surrounded by spaces if, after stripping leading and trailing whitespace from it, it is a valid non-empty URL.

Diese Spezifikation definiert den URL about:legacy-compat als einen reservierten, aber nicht auflösbaren about:-URL, zur Verwendung in DOCTYPEs in HTML-Dokumenten, wenn er zur Kompatibilität mit XML-Tools nötig ist. [ABOUT]

This specification defines the URL about:legacy-compat as a reserved, though unresolvable, about: URL, for use in DOCTYPEs in HTML documents when needed for compatibility with XML tools. [ABOUT]

Diese Spezifikation definiert den URL about:srcdoc als einen reservierten, aber nicht auflösbaren about:-URL, der als die Adresse des Dokuments von iframe srcdoc-Dokumenten verwendet wird. [ABOUT]

This specification defines the URL about:srcdoc as a reserved, though unresolvable, about: URL, that is used as the document's address of iframe srcdoc documents. [ABOUT]

Der Fallback Basis-URL eines Dokumentobjekts ist der absolute URL, der durch Verarbeitung dieser Unterschritte erhalten wird:

The fallback base URL of a Document object is the absolute URL obtained by running these substeps:

  1. Ist das Dokument ein iframe srcdoc-Dokument, dann gib den Dokumentbasis-URL des Dokuments zurück, dass das Dokument des Browsing-Kontextcontainers des Browsing-Kontextes ist und breche diese Schritte ab.

  2. Ist die Adresse des Dokuments about:blank und hat der Browsing-Kontext des Dokuments einen Erzeuger-Browsing-Kontext, dann gib die Dokumentbasis-URL des Erzeugerdokuments an und breche diese Schritte ab.

  3. Gib die Adresse des Dokuments zurück.

  1. If the Document is an iframe srcdoc document, then return the document base URL of the Document's browsing context's browsing context container's Document and abort these steps.

  2. If the document's address is about:blank, and the Document's browsing context has a creator browsing context, then return the document base URL of the creator Document, and abort these steps.

  3. Return the document's address.

Der Dokumentbasis-URL eines Dokumentobjekts ist der absolute URL, der durch Verarbeitung dieser Unterschritte erhalten wird:

The document base URL of a Document object is the absolute URL obtained by running these substeps:

  1. Gibt es kein Element base mit einem Attribut href im Dokument, dann ist der Dokumentbasis-URL der Fallback Basis-URL des Dokuments; breche diese Schritte ab.

  2. Ansonsten ist der Dokumentbasis-URL der eingefrorene Basis-URL des ersten Elements base im DokumentDocument, das ein Attribut href hat, in Baumreihenfolge.

  1. If there is no base element that has an href attribute in the Document, then the document base URL is the Document's fallback base URL; abort these steps.

  2. Otherwise, the document base URL is the frozen base URL of the first base element in the Document that has an href attribute, in tree order.

2.5.2 URLs auflösen

Die Auflösung eines URL ist der Vorgang, einen relativen URL zu verwenden und den absoluten URL zu erhalten, den er impliziert.

Resolving a URL is the process of taking a relative URL and obtaining the absolute URL that it implies.

Zur Auflösung eines URL zu einem absoluten URL, relativ zu entweder einem anderen absoluten URL oder einem Element, muss das Benutzerprogramm die folgenden Schritte verwenden. Die Auflösung eines URL kann zu einem Fehler führen, in welchem Fall der URL nicht auflösbar ist.

To resolve a URL to an absolute URL relative to either another absolute URL or an element, the user agent must use the following steps. Resolving a URL can result in an error, in which case the URL is not resolvable.

  1. Lass url den URL sein, der aufgelöst wird.

  2. Lass encoding wie folgt bestimmt werden:

    Hatte der URL eine Zeichenkodierung, als der URL erzeugt oder definiert wurde oder als der Algorithmus aufgerufen wurde
    Die URL-Zeichenkodierung ist wie definiert.
    Kam der URL von einem Skript (zum Beispiel als Argument einer Methode)
    Die URL-Zeichenkodierung ist die URL-Zeichenkodierung der API, angegeben durch das settings objects*** des Skripts.
    Kam der URL von einem DOM-Knoten (zum Beispiel von einem Element)
    Der Knoten hat ein Dokument und die URL-Zeichenkodierung ist die Dokumentzeichenkodierung.
  3. Ist encoding eine UTF-16-Verschlüsselung, dann ändere den Wert von encoding auf UTF-8.

  4. Wurde der Algorithmus mit einem absoluten URL aufgerufen, um ihn als Basis-URL zu verwenden, dann lass base diesen absoluten URL sein.

    Ansonsten, lass base den Basis-URL des Elements sein.

  5. Verwende den URL-Parser für url, mit base als den Basis-URL, und mit encoding als die Verschlüsselung.

  6. Gibt dieses einen Fehler zurück, dann breche diese Schritte mit einem Fehler ab.

  7. Lass verarbeiteter URL das Ergebnis des URL-Parsers sein.

  8. Lass serialisierter URL das Ergebnis der Anwenung des URL-Serialisierers auf verarbeiteter URL sein.

  9. Gib serialisierter URL als den erhaltenen absoluten URL zurück und verarbeitete URL als den erhaltenen verarbeiteten URL.

  1. Let url be the URL being resolved.

  2. Let encoding be determined as follows:

    If the URL had a character encoding defined when the URL was created or defined or when this algorithm was invoked
    The URL character encoding is as defined.
    If the URL came from a script (e.g. as an argument to a method)
    The URL character encoding is the API URL character encoding specified by the script's settings object.
    If the URL came from a DOM node (e.g. from an element)
    The node has a Document, and the URL character encoding is the document's character encoding.
  3. If encoding is a UTF-16 encoding, then change the value of encoding to UTF-8.

  4. If the algorithm was invoked with an absolute URL to use as the base URL, let base be that absolute URL.

    Otherwise, let base be the element's base URL.

  5. Apply the URL parser to url, with base as the base URL, with encoding as the encoding.

  6. If this returns failure, then abort these steps with an error.

  7. Let parsed URL be the result of the URL parser.

  8. Let serialized URL be the result of apply the URL serializer to parsed URL.

  9. Return serialized URL as the resulting absolute URL and parsed URL as the resulting parsed URL.

Bei gegebenem Element ist der Elementbasis-URL der Basis-URI des Elements, wie in der Spezifikation XML-Base definiert. Der Basis-URI der Dokumententität ist hierbei als der Dokumentbasis-URL des Dokumentsdefiniert, welches das Element enthält. [XMLBASE]

Given an element, the element's base URL is the base URI of the element, as defined by the XML Base specification, with the base URI of the document entity being defined as the document base URL of the Document that owns the element. [XMLBASE]

Zur Einhaltung der Spezifikation XML Base, müssen Benutzerprogramme sich so verhalten, als ob alle Dokumentobjekte XML-Dokumente repräsentieren würden.

For the purposes of the XML Base specification, user agents must act as if all Document objects represented XML documents.

xml:base-Attribute können selbst in HTML-Fragmenten vorhanden sein, da solche Attribute dynamisch über Skripte hinzugefügt werden können. (Solche Skripte wiederum wären jedoch nicht konform, da xml:base-Attribute in HTML-Dokumenten nicht gestattet sind.)

It is possible for xml:base attributes to be present even in HTML fragments, as such attributes can be added dynamically using script. (Such scripts would not be conforming, however, as xml:base attributes are not allowed in HTML documents.)

2.5.3 Dynamische Veränderungen an Base-URLs

Wird ein xml:base-Attribut angegeben, verändert oder entfernt, wird das Element des Attributs und alle Nachfahren des Element durch eine Änderung des Base-URL betroffen.

When an xml:base attribute is set, changed, or removed, the attribute's element, and all descendant elements, are affected by a base URL change.

Ändert sich der Dokumentbasis-URL eines Dokuments, werden alle Elemente in jenem Dokument durch eine Änderung des Base-URL betroffen.

When a document's document base URL changes, all elements in that document are affected by a base URL change.

Die folgenden Schritte sind Basis-URL-Veränderungschritte, die ablaufen, wenn ein Element durch eine Änderung des Base-URL betroffen ist (wie durch die DOM-Spezifikation definiert):

The following are base URL change steps, which run when an element is affected by a base URL change (as defined by the DOM specification):

Erzeugt das Elemente einen Hyperlink

Wird der absolute URL, der durch den Hyperlink identifiziert wird, dem Benutzer angezeigt oder beeinflussen irgendwelche Daten, die von jenem URL abgeleitet werden, die Anzeige, dann sollte das Attribut href relativ zu dem Element noch einmal aufgelöst werden und die Benutzerschnittstelle (UI) sollte angemessen aktualisiert werden.

Zum Beispiel könnten die CSS-Pseudoklassen :link/:visited betroffen worden sein.

Ist das Element ein q, blockquote, ins oder del mit einem Attribut cite

Wird der absolute URL, der durch das Attribut cite identifiziert wird, dem Benutzer angezeigt oder beeinflussen irgendwelche Daten , die von jenem URL abgeleitet werden, die Anzeige, dann sollte der URL relativ zu dem Element noch einmal aufgelöst werden und die Benutzerschnittstelle (UI) sollte angemessen aktualisiert werden.

Ansonsten

Das Element wird nicht direkt betroffen.

Zum Beispiel betrifft die Änderung des Basis-URL nicht die Bilder, die durch img-Elemente angezeigt werden, obwohl nachfolgende Zugriffe des IDL-Attributs src von einem Skript einen neuen absoluten URL zurückgeben werden, der eventuell nicht mehr zu dem Bild gehört, das angezeigt wird.

If the element creates a hyperlink

If the absolute URL identified by the hyperlink is being shown to the user, or if any data derived from that URL is affecting the display, then the href attribute should be re-resolved relative to the element and the UI updated appropriately.

For example, the CSS :link/:visited pseudo-classes might have been affected.

If the element is a q, blockquote, ins, or del element with a cite attribute

If the absolute URL identified by the cite attribute is being shown to the user, or if any data derived from that URL is affecting the display, then the URL should be re-resolved relative to the element and the UI updated appropriately.

Otherwise

The element is not directly affected.

For instance, changing the base URL doesn't affect the image displayed by img elements, although subsequent accesses of the src IDL attribute from script will return a new absolute URL that might no longer correspond to the image being shown.

2.6 Quellen abrufen

2.6.1 Terminologie

Benutzerprogramme können zahlreiche Übertragungsprotokolle implementieren, aber diese Spezifikation definiert hauptsächlich das Verhalten in Bezug auf HTTP. [HTTP]

User agents can implement a variety of transfer protocols, but this specification mostly defines behavior in terms of HTTP. [HTTP]

Die Methode HTTP GET ist äquivalent zum voreingestellten Abrufvorgang des Protokolls. Zum Beispiel RETR in FTP. Solche Vorgänge sind idempotent und sicher in HTTP-Begriffen.

The HTTP GET method is equivalent to the default retrieval action of the protocol. For example, RETR in FTP. Such actions are idempotent and safe, in HTTP terms.

https://de.wikipedia.org/wiki/Idempotenz

Die HTTP Antwortcodes sind äquivalent zu Statussen in anderen Protokollen, die die gleichen Grundbedeutungen haben. Zum Beispiel ist der Fehler "Datei nicht gefunden" äquivalent zum Code 404, ein Server-Fehler ist äquivalent zu den Codes 5xx und so weiter.

The HTTP response codes are equivalent to statuses in other protocols that have the same basic meanings. For example, a "file not found" error is equivalent to a 404 code, a server error is equivalent to a 5xx code, and so on.

Die HTTP-Header sind äquivalent zu Feldern in anderen Protokollen, die die gleiche Grundbedeutungen haben. Zum Beispiel sind die HTTP-Authentifizierungs-Header äquivalent zu den Authentifizierungsaspekten des FTP-Protokolls.

The HTTP headers are equivalent to fields in other protocols that have the same basic meaning. For example, the HTTP authentication headers are equivalent to the authentication aspects of the FTP protocol.

Die Referrer-Quelle*** ist entweder ein Dokument oder ein URL.

A referrer source is either a Document or a URL.

2.6.2 Verarbeitungsmodell

Wenn ein Benutzerprogramm eine Quelle oder einen URL abrufen soll, optional von einem Ursprung origin, optional eine bestimmte Referrer-Quelle als eine überschreibende Referrer-Quelle verwendet wird, und optional mit einem oder mehreren Schaltern "synchron", "manuelle Umleitung", "erzwinge gleichen Ursprung" oder "blockiere Cookies", dann müssen die folgenden Schritte abgearbeitet werden. (Wenn ein URL abgerufen werden soll, dann identifiziert der URL die Quelle, die abzurufen ist.)

When a user agent is to fetch a resource or URL, optionally from an origin origin, optionally using a specific referrer source as an override referrer source, and optionally with any of a synchronous flag, a manual redirect flag, a force same-origin flag, and a block cookies flag, the following steps must be run. (When a URL is to be fetched, the URL identifies a resource to be obtained.)

  1. Gibt es eine bestimmte überschreibende Referrer-Quelle und ist sie ein URL, dann lass referrer die überschreibende Referrer-Quelle sein und springe zu dem Schritt Referrer bereinigen.

  2. Lass document das entsprechende*** Dokument sein, wie durch die folgende Liste gegeben:

    Gibt es eine bestimmte überschreibende Referrer-Quelle
    Die überschreibende Referrer-Quelle.
    Beim Navigieren
    Das aktive Dokument des Quell-Browsing-Kontextes.
    Wenn Quellen für ein Element abgerufen werden
    Das Dokument des Elements.
  3. Während document ein iframe srcdoc-Dokument ist, lass document stattdessen das Dokument des document's browsing context's browsing context container's. *** ARGL, später wie oben

  4. Ist der Ursprung*** origin des Dokuments kein Schema/Host/Port-Tuple, dann setze referrer auf die leere Zeichenkette und springe zu den Schritt Referrer bereinigen.

  5. Lass referrer die Adresse des Dokuments document sein. ***

  6. Referrer bereinigen: Wende den URL-Parser auf referrer an und lass verarbeiteter Referrer den erhaltenen verarbeiteten URL sein.

  7. Lass referrer das Ergebnis der Anwendung des URL-Serialisierers auf verarbeiteter Referrer sein, der Schalter "Fragment ausgeschlossen" sei gesetzt.

  8. Ist referrer nicht die leere Zeichenkette, ist es nicht data: URL und ist es nicht die URL "about:blank", dann erzeuge die Adresse der Quelle, von der Anfrage-URIs erhalten werden wie von HTTP für den Referer (sic) header from referrer erwartet*** wird. [HTTP]

    Ansonsten muss der Referer (sic), unabhängig von seinem Wert, übergangen werden.

  9. Wurde der Algorithmus nicht mit dem Schalter synchron aufgerufen, dann verarbeite die übrigen Schritte asynchron.

  10. Hat das Dokument, mit dem jegliche durch diesen Algorithmus eingereihten Aufgaben verknüpft wären, keinen verküpften Browsing-Kontext, dann breche diese Schritte ab.

  11. Dies ist der Hauptschritt.

    Wird die Quelle aus einem Anwendungs-Cache erhalten, dann verwende die Daten aus jenem Anwendungs-Cache, als wären sie in einer Weise entsprechend seiner URL empfangen worden.

    Wird die Quelle durch einen absoluten URL identifiziert und soll die Quelle mit Hilfe einer idempotenten Aktion erhalten werden (wie einem HTTP GET oder äquivalent), und wurde es schon aus anderen Gründen heruntergeladen (zum Beispiel einem anderen Aufruf dieses Algorithmus) und wäre dieser Aufruf identisch zu vorhergehenden (zum Beispiel gleiche Accept- und Origin-Header), und ist das Benutzerprogramm so konfiguriert, dass es die Daten von bestehenden Downloads wiederverwendet, statt sie neu zu initialisieren, dann verwende die Ergebnisse des existierenden Downloads anstatt einen neuen zu beginnen.*** OldM.

    Ansonten, wird die Quelle durch einen absoluten URL mit einem Schema, das keinen Mechanismus definiert, eine Quelle zu empfangen (ist es zum Beispiel eine mailto:-URL oder einen, die das Benutzerprogramm nicht unterstützt, dann verhalte Dich so, als wäre die Quelle ein HTTP 204 "No Content response with no other metadata***".

    Ansonsten, wird die Quelle durch den URL about:blank identifiziert, dann ist die Quelle sofort verfügbar und besteht aus der leeren Zeichenkette ohne Metadaten.

    Ansonsten, lade die Quelle zu einer Zeit, die dem Benutzer und dem Benuterprogramm passend erscheinen, herunter (oder erhalte sie auf andere Weise) und wende die Semantiken der entsprechenden Spezifikation an ( wende zum Beispiel die Operation HTTP GET oder POST an, oder lese die Datei von der Festplatte oder erweitere data:-URLs, usw.).

    Für Zwecke des (sic) Referer-Headers, verwende die Adresse der Quelle, von der Anfrage-URIs erhalten werden, die im früheren Schritt erzeugt wurden.

    Für die Zwecke des Origin-Headers, wenn der Abruf-Algorithmus explizit von einem Ursprung origin eingeleitet wurde, dann ist der Ursprung, der die HTTP-Anfrage eingeleitet hat origin. Ansonsten ist es eine Anfrage aus einem "datengeschützten***" Kontext. [ORIGIN]

  12. Wurde der Algorithmus nicht mit dem Schalter "blockiere Cookies" eingeleitet und gibt es Cookies, die gesetzt werden müssen, dann muss das Benutzerprogramm die folgenden Unterschritte verarbeiten:

    1. Warte bis der Besitz des Mutex-Speichers [] von dieser Instanz des abrufenden Algorithmus übernommen werden kann.

    2. Übernehme den Besitz des Mutex-Speichers.

    3. Aktualisiere die Cookies. [COOKIES] (This is a fingerprinting vector.)

    4. Gib den Mutex-Speicher wieder frei.

  13. Ist die abgerufene Quelle eine HTTP-Umleitung oder ein Äquivalent, dann:

    Ist der Schlater "erzwinge gleichen Ursprung" gesetzt und hat der URL des Ziels der Weiterleitung nicht den gleichen Ursprung wie der URL, für den der Abrufenalgorithmus eingeleitet wurde:

    Breche diese Schritte ab und gib einen Fehler für diesen Algorithmus zurück, als wäre es nicht möglich gewesen, den Remote-Host zu kontaktieren.

    Ist der Schalter "manuelle Weiterleitung gesetzt

    Fahre fort, verwende die abgerufene Quelle (die Weiterleitung) als das Ergebnis des Algorithmus. Erfordert der aufrufende Algorithmus daraufhin vom Benutzerprogramm, der Weiterleitung transparent*** zu folgen, dann muss das Benutzerprogramm diesen Algorithmus vom Hauptschritt aus weiter verfolgen, aber er muss anstatt der originalen Quelle das Ziel der Weiterleitung als die abzurufende Quelle verwenden.

    Ansonsten

    Zuerst, wende die relevanten Anforderungen für Weiterleitungen an (wie die Anzeige von entsprechenden Eingabeaufforderungen siehe später unten). Dann verarbeite Hauptschritt noch einmal neu, aber verwende das Ziel der Weiterleitung als die abzurufende Quelle anstatt der ursprünglichen Quelle. In Bezug auf HTTP-Anfragen muss die neue Anfrage die gleichen Header wie die originale Anfrage enthalten, außer die Header, für die andere Anforderungen angegeben sind (wie zum Beispiel der Host-Header). [HTTP]

    Die HTTP-Spezifikation fordert, dass den Weiterleitungen 301, 302 und 307 nicht ohne die Bestätigung des Benutzers gefolgt wird, wenn sie in Bezug auf Methoden angewendet werden, die nicht den sicheren Methoden entsprechen. Das wäre eine angemessene Eingabeaufforderung für (für die Zwecke der***) die Anforderungen im Absatz oben. [HTTP]

  14. Wurde der Algorithmus nicht mit dem Schalter "synchron" eingeleitet: Ist die Quelle verfügbar, oder gibt es einen Fehler in irgendeiner Beschreibung, setze die Aufgabe in die Warteschlange, die die Quelle entsprechend verwendet. Kann die Quelle inkrementell verarbeitet werden, wie zum Beispiel bei einem progressiven, interlaced JPEG oder einer HTML-Datei, können zusätzliche Aufgaben in die Verarbeitungschlange eingereiht werden, um die Daten während des Downloads zu verarbeiten. Die Aufgabenquelle für diese Aufgaben ist die networking*** Aufgabenquelle.

    Ansonsten gib die Quelle oder Fehlerinformationen an die aufrufende Quelle zurück.

  1. If there is a specific override referrer source, and it is a URL, then let referrer be the override referrer source, and jump to the step labeled clean referrer.

  2. Let document be the appropriate Document as given by the following list:

    If there is a specific override referrer source
    The override referrer source.
    When navigating
    The active document of the source browsing context.
    When fetching resources for an element
    The element's Document.
  3. While document is an iframe srcdoc document, let document be document's browsing context's browsing context container's Document instead.

  4. If the origin of Document is not a scheme/host/port tuple, then set referrer to the empty string and jump to the step labeled clean referrer.

  5. Let referrer be the document's address of document.

  6. Clean referrer: Apply the URL parser to referrer and let parsed referrer be the resulting parsed URL.

  7. Let referrer be the result of applying the URL serializer to parsed referrer, with the exclude fragment flag set.

  8. If referrer is not the empty string, is not a data: URL, and is not the URL "about:blank", then generate the address of the resource from which Request-URIs are obtained as required by HTTP for the Referer (sic) header from referrer. [HTTP]

    Otherwise, the Referer (sic) header must be omitted, regardless of its value.

  9. If the algorithm was not invoked with the synchronous flag, perform the remaining steps asynchronously.

  10. If the Document with which any tasks queued by this algorithm would be associated doesn't have an associated browsing context, then abort these steps.

  11. This is the main step.

    If the resource is to be obtained from an application cache, then use the data from that application cache, as if it had been obtained in the manner appropriate given its URL.

    If the resource is identified by an absolute URL, and the resource is to be obtained using an idempotent action (such as an HTTP GET or equivalent), and it is already being downloaded for other reasons (e.g. another invocation of this algorithm), and this request would be identical to the previous one (e.g. same Accept and Origin headers), and the user agent is configured such that it is to reuse the data from the existing download instead of initiating a new one, then use the results of the existing download instead of starting a new one.

    Otherwise, if the resource is identified by an absolute URL with a scheme that does not define a mechanism to obtain the resource (e.g. it is a mailto: URL) or that the user agent does not support, then act as if the resource was an HTTP 204 No Content response with no other metadata.

    Otherwise, if the resource is identified by the URL about:blank, then the resource is immediately available and consists of the empty string, with no metadata.

    Otherwise, at a time convenient to the user and the user agent, download (or otherwise obtain) the resource, applying the semantics of the relevant specifications (e.g. performing an HTTP GET or POST operation, or reading the file from disk, or expanding data: URLs, etc).

    For the purposes of the Referer (sic) header, use the address of the resource from which Request-URIs are obtained generated in the earlier step.

    For the purposes of the Origin header, if the fetching algorithm was explicitly initiated from an origin, then the origin that initiated the HTTP request is origin. Otherwise, this is a request from a "privacy-sensitive" context. [ORIGIN]

  12. If the algorithm was not invoked with the block cookies flag, and there are cookies to be set, then the user agent must run the following substeps:

    1. Wait until ownership of the storage mutex can be taken by this instance of the fetching algorithm.

    2. Take ownership of the storage mutex.

    3. Update the cookies. [COOKIES] (This is a fingerprinting vector.)

    4. Release the storage mutex so that it is once again free.

  13. If the fetched resource is an HTTP redirect or equivalent, then:

    If the force same-origin flag is set and the URL of the target of the redirect does not have the same origin as the URL for which the fetch algorithm was invoked

    Abort these steps and return failure from this algorithm, as if the remote host could not be contacted.

    If the manual redirect flag is set

    Continue, using the fetched resource (the redirect) as the result of the algorithm. If the calling algorithm subsequently requires the user agent to transparently follow the redirect, then the user agent must resume this algorithm from the main step, but using the target of the redirect as the resource to fetch, rather than the original resource.

    Otherwise

    First, apply any relevant requirements for redirects (such as showing any appropriate prompts). Then, redo main step, but using the target of the redirect as the resource to fetch, rather than the original resource. For HTTP requests, the new request must include the same headers as the original request, except for headers for which other requirements are specified (such as the Host header). [HTTP]

    The HTTP specification requires that 301, 302, and 307 redirects, when applied to methods other than the safe methods, not be followed without user confirmation. That would be an appropriate prompt for the purposes of the requirement in the paragraph above. [HTTP]

  14. If the algorithm was not invoked with the synchronous flag: When the resource is available, or if there is an error of some description, queue a task that uses the resource as appropriate. If the resource can be processed incrementally, as, for instance, with a progressively interlaced JPEG or an HTML file, additional tasks may be queued to process the data as it is downloaded. The task source for these tasks is the networking task source.

    Otherwise, return the resource or error information to the calling algorithm.

Kann das Benutzerprogramm die tatsächliche Länge der Quelle bestimmen, die für eine Instanz dieses Algorithmus abgerufen, und ist diese Länge begrenzt, dann ist die Länge die Größe der Datei. Ansonsten hat das Subjekt des Algorithmus (das ist die Quelle, die abgerufen wird), keine bekannte Größe. Zum Beispiel könnte der HTTP-Header Content-Length diese Informationen bereitstellen.)

If the user agent can determine the actual length of the resource being fetched for an instance of this algorithm, and if that length is finite, then that length is the file's size. Otherwise, the subject of the algorithm (that is, the resource being fetched) has no known size. (For example, the HTTP Content-Length header might provide this information.)

Das Benutzerprogramm muss auch die Anzahl der heruntergeladenen Bytes für jede Instanz dieses Algorithmus festhalten. Die Anzahl muss jegeliche out-of-band*** Metadaten ausschließen, wie etwa HTTP-Header.

The user agent must also keep track of the number of bytes downloaded for each instance of this algorithm. This number must exclude any out-of-band metadata, such as HTTP headers.

Das Verarbeitungsmodell des Anwendungscaches bringt einige Änderungen zum Netzwerkmodell mit, um die Rückgabe von gecachten Quellen zu verarbeiten.

The application cache processing model introduces some changes to the networking model to handle the returning of cached resources.

Das Verarbeitungsmodell für die Navigation verarbeitet Weiterleitungen selbst, indem die Verarbeitung von Weiterleitungen überschrieben werden, welches beim Abrufen des Algorithmus getätigt würden.***

The navigation processing model handles redirects itself, overriding the redirection handling that would be done by the fetching algorithm.

Ob die Regeln zum Typ-Sniffing für die abgerufene Quelle gelten, hängt vom Algorithmus ab, der die Regeln aufruft - sie sind nicht immer maßgeblich.

Whether the type sniffing rules apply to the fetched resource depends on the algorithm that invokes the rules — they are not always applicable.

Alles in dieser Speizifikation, das sich auf HTTP bezieht, gilt auch für HTTP-over-TLS, das durch URLs repräsentiert wird, die ihrerseits das Schema https repräsentieren. [HTTP]

Anything in this specification that refers to HTTP also applies to HTTP-over-TLS, as represented by URLs representing the https scheme. [HTTP]

Benutzerprogramme sollten dem Benutzer Zertifikatsfehler anzeigen und müssen entweder den Download von Quellen mit fehlerhaften Zertifikaten ablehnen oder müssen sich so verhalten, als würden die Quellen in der Tat ohne Verschlüsselung angeboten.

User agents should report certificate errors to the user and must either refuse to download resources sent with erroneous certificates or must act as if such resources were in fact served with no encryption.

Benutzerprogramme sollten den Benutzer warnen, dass es ein potentielles Problem gibt, wannimmer ein Benutzer eine Seite besucht, die er bereits zuvor besucht hatte und deren Seiten beim zweiten Besuch eine unsicherere Verschlüsslung verwendet als beim letzten Besuch. User agents should warn the user that there is a potential problem whenever the user visits a page that the user has previously visited, if the page uses less secure encryption on the second visit.

User agents should warn the user that there is a potential problem whenever the user visits a page that the user has previously visited, if the page uses less secure encryption on the second visit.

Dieses nicht zu tun, könnte dazu führen, dass ein Benutzer Man-In-The-Middle-Attacken nicht wahrnimmt.

Not doing so can result in users not noticing man-in-the-middle attacks.

Stellt ein Benutzer eine Verbindung mit einem Server her, der ein selbst-signiertes Zertifikat verwendet, könnte das Benutzerprogramm die Verbindung gestatten, aber es könnte sich so verhalten, als ob keine Verschlüsselung verhanden wäre. Würde das Benutzerprogramm stattdessen gestatten, dass der Benutzer das Problem überschreiben*** kann und dann die Seite so darstellt, als wäre sie vollkommen und sicher verschlüsselt, dann könnte der Benutzer einfach verleitet werden, Man-In-The-Middle-Verbindungen zu akzeptieren.

Stellt ein Benutzer eine Verbindung mit einem Server mit vollständiger Verschlüsselung her, verweist die Seite aber auf externe Quellen mit abgelaufenem Zertifikat, dann wird das Benutzerprogramm sich so verhalten, als wäre die Quelle nicht verfügbar, möglicherweise mit einer Fehlermeldung an den Benutzer. Würde das Benutzerprogramm stattdessen gestatten, dass die Quelle verwendet wird, dann könnte ein Angreifer nach "sicheren" Seiten suchen, die Quellen von einem anderen Host verwenden und nur Man-In-The-Middle-Angriffe auf jenen Host starten. Zum Beispiel könnte er versuchen, die Skripte der Seite zu übernehmen.

Legt ein Benutzer ein Lesezeichen für eine Seite mit CA-signiertem Zertifikat an und besucht er die Seite später noch einmal auf direktem Weg, aber die Seite benutzt plötzlich ein selbst signiertes Zertifikat, könnte das Benutzerprogramm den Benutzer warnen, dass ein Man-In-The-Middle-Angriff wahrscheinlich ist, anstatt sich einfach so zu verhalten, als sei die Seite nicht verschlüsselt.

If a user connects to a server with a self-signed certificate, the user agent could allow the connection but just act as if there had been no encryption. If the user agent instead allowed the user to override the problem and then displayed the page as if it was fully and safely encrypted, the user could be easily tricked into accepting man-in-the-middle connections.

If a user connects to a server with full encryption, but the page then refers to an external resource that has an expired certificate, then the user agent will act as if the resource was unavailable, possibly also reporting the problem to the user. If the user agent instead allowed the resource to be used, then an attacker could just look for "secure" sites that used resources from a different host and only apply man-in-the-middle attacks to that host, for example taking over scripts in the page.

If a user bookmarks a site that uses a CA-signed certificate, and then later revisits that site directly but the site has started using a self-signed certificate, the user agent could warn the user that a man-in-the-middle attack is likely underway, instead of simply acting as if the page was not encrypted.

2.6.4 Den Typ einer Quelle feststellen

Die Content-Type-Metadaten einer Quelle müssen müssen auf eine Art und Weise gewonnen und interpretiert werden, die mit den Anforderungen in der Spezifikation MIME Sniffing übereinstimmen. [MIMESNIFF]

The Content-Type metadata of a resource must be obtained and interpreted in a manner consistent with the requirements of the MIME Sniffing specification. [MIMESNIFF]

Der herausgefundene Typ einer Quelle muss auf eine Art und Weise herausgefunden werden, die mit den Anforderungen für das Finden eines herausgefundenen Medientypen (sniffed media type) der relevanten Sequenz von Oktetten in der Spezifikation MIME Sniffing angegeben ist. [MIMESNIFF]

The sniffed type of a resource must be found in a manner consistent with the requirements given in the MIME Sniffing specification for finding the sniffed media type of the relevant sequence of octets. [MIMESNIFF]

Die Regeln zum Herausfinden von Bildern besonders und die Regeln zur Unterscheidung von Text und Binärdaten sind ebenfalls in der Spezifikation MIME Sniffing definiert. Beide Regeln geben als Ergebnis einen MIME type zurück. [MIMESNIFF]

The rules for sniffing images specifically and the rules for distinguishing if a resource is text or binary are also defined in the MIME Sniffing specification. Both sets of rules return a MIME type as their result. [MIMESNIFF]

Es ist unabdingbar, dass die Regeln in der Spezifikation MIME Sniffing genau befolgt werden. Verwendet ein Benutzerprogramm andere Heuristika für die Erkennung des Inhaltstypen als der Server erwartet, können Sicherheitsprobleme auftauchen. Weitere Details erfahren Sie in der Spezifikation MIME Sniffing. [MIMESNIFF]

It is imperative that the rules in the MIME Sniffing specification be followed exactly. When a user agent uses different heuristics for content type detection than the server expects, security problems can occur. For more details, see the MIME Sniffing specification. [MIMESNIFF]

2.6.5 Zeichenverschlüsselungen aus meta-Elementen extrahieren

Der Algorithmus zur Extraktion einer Zeichenkodierung aus einem meta-Element, bei gegebener Zeichenkette s, ist wie folgt. Er gibt entweder eine Zeichenkodierung zurück oder nichts.

The algorithm for extracting a character encoding from a meta element, given a string s, is as follows. It either returns a character encoding or nothing.

  1. Lass position einen Zeiger in s sein, anfangs auf den Beginn der Zeichenkette zeigend.

  2. Schleife: Finde die ersten sieben Zeichen in s nach der Position position, die ein ASCII-Treffer, unabhängig von der Groß- und Kleinschreibung, für das Wort "charset" sind. Wird kein Treffer erziehlt, gib nichts zurück und breche diese Schritte ab.

  3. Übergehe jegliche Leerzeichen, die dem Wort "charset" direkt folgen (es kann sein, dass es keine gibt).

  4. Ist das nächste Zeichen kein Gleichzeichen "=" (U+003D), dann bewege position an die Stelle, die genau vor das nächste Zeichen zeigt und springe zurück zu dem Schritt Schleife.

  5. Übergehe jegliche Leerzeichen, die direkt hinter dem Gleichzeichen stehen (es kann sein, dass es keine gibt).

  6. Verarbeite das nächste Zeichen wie folgt:

    Ist es ein Anführungszeichen """ (U+0022) und gibt es ein weiteres Anführungsezeichen """ (U+0022) in s
    Ist es ein Apostrophzeichen "'" (U+0027) und gibt es ein weiteres Apostrophzeichen "'" (U+0027) in s
    Bestimme die Verschlüsselung durch die Unterzeichenkette, die zwischen diesem Zeichen und dem allernächsten Vorkommen dieses Zeichens steht, und gib das Ergebnis zurück.
    Ist es ein alleinstehendes Anführungszeichen """ (U+0022)
    Ist es ein alleinstehendes Apostroph "'" (U+0027)
    Gibt es kein weiteres Zeichen
    Gib nichts zurück.
    Ansonsten
    Bestimme die Verschlüsselung von der Unterzeichenkette, die aus diesem Zeichen bis zu, aber nicht einschließlich des ersten Leerzeichens oder Semikolons ";" (U+003B) oder dem Ende von s besteht, welches auch immer zuerst kommt.
  1. Let position be a pointer into s, initially pointing at the start of the string.

  2. Loop: Find the first seven characters in s after position that are an ASCII case-insensitive match for the word "charset". If no such match is found, return nothing and abort these steps.

  3. Skip any Leerzeichen that immediately follow the word "charset" (there might not be any).

  4. If the next character is not a "=" (U+003D), then move position to point just before that next character, and jump back to the step labeled loop.

  5. Skip any Leerzeichen that immediately follow the equals sign (there might not be any).

  6. Process the next character as follows:

    If it is a """ (U+0022) character and there is a later """ (U+0022) character in s
    If it is a "'" (U+0027) character and there is a later "'" (U+0027) character in s
    Return the result of getting an encoding from the substring that is between this character and the next earliest occurrence of this character.
    If it is an unmatched """ (U+0022) character
    If it is an unmatched "'" (U+0027) character
    If there is no next character
    Return nothing.
    Otherwise
    Return the result of getting an encoding from the substring that consists of this character up to but not including the first space character or ";" (U+003B) character, or the end of s, whichever comes first.

Dieser Algorithmus unterscheidet sich von jenen in der HTTP-Spezifikation (zum Bespiel gestattet HTTP die Verwendung von Apostrophen nicht und erfordert den Ersatzmechanismus mit Backslash "\", der in diesem Algorithmus nicht unterstützt wird). Obwohl dieser Algorithmus in Kontexten verwendet wird, die, historisch gesehen, in Verbindung mit HTTP stehen, wich die Syntax, die von Implementierungen seinerzeit unterstützt wurde, ab. [HTTP]

This algorithm is distinct from those in the HTTP specification (for example, HTTP doesn't allow the use of single quotes and requires supporting a backslash-escape mechanism that is not supported by this algorithm). While the algorithm is used in contexts that, historically, were related to HTTP, the syntax as supported by implementations diverged some time ago. [HTTP]

2.6.6 CORS-Einstellungsattribute

Ein CORS-Einstellungsattribut ist ein aufgezähltes Attribut. Die folgende Tabelle listet die Schlüsselworte und Statusse für dieses Attribut auf — die Schlüsselworte in der linken Spalte beziehen sich auf die Statusse in der Zelle in der zweiten Spalte in der gleichen Zeile wie das Schlüsselwort.

A CORS settings attribute is an enumerated attribute. The following table lists the keywords and states for the attribute — the keywords in the left column map to the states in the cell in the second column on the same row as the keyword.

Keyword State Brief description
anonymous Anonymous CORS-Anfragen aus anderer Quelle für das Element werden den Schalter "omit credentials" gesetzt haben.
use-credentials Use Credentials CORS-Anfragen aus anderer Quelle für das Element werden den Schalter "omit credentials" nicht gesetzt haben.
Keyword State Brief description
anonymous Anonymous Cross-origin CORS requests for the element will have the omit credentials flag set.
use-credentials Use Credentials Cross-origin CORS requests for the element will not have the omit credentials flag set.

Die leere Zeichenkette ist auch ein gültiges Schlüsselwort und bezieht sich auf den Status Anonymous. Die ungültige Wertvoreinstellung des Attributs ist der Status Anonymous. Für den Zweck der reflection***, ist der kanonische Fall für den Status Anonymous das Schlüsselwort anonymous. Die fehlende Wertvoreinstellung, die verwendet wird, wenn das Attribut ausgelassen wird, ist der Status No CORS.

The empty string is also a valid keyword, and maps to the Anonymous state. The attribute's invalid value default is the Anonymous state. For the purposes of reflection, the canonical case for the Anonymous state is the anonymous keyword. The missing value default, used when the attribute is omitted, is the No CORS state.

2.6.7 Abruf mit eingeschaltetem CORS

Wird vom Benutzerprogramm gefordert, einen Abruf mit möglichem eingeschalteten CORS eines absoluten URL URL mit einem Modus mode zu vollziehen, der entweder "No CORS", "Anonymous" oder "Use Credentials" ist, unter optionaler Verwendung einer Referrer-Quelle referrer source, mit einem Ursprung origin und mit einem voreingestelltem Ursprungsverhalten*** default, das entweder "taint" oder "fail" ist, dann muss es die erste angemessene Schrittfolge der folgenden Liste verarbeiten. Das voreingestellte Ursprungsverhalten wurd nur verwendet, wenn mode "No CORS" ist. Dieser Algorithmus umschließt den Abruf-Algorithmus oben und bezeichnet die erhaltene Quelle entweder als CORS-same-origin oder CORS-cross-origin oder blockiert die Quelle vollständig.

When the user agent is required to perform a potentially CORS-enabled fetch of an absolute URL URL with a mode mode that is either "No CORS", "Anonymous", or "Use Credentials", optionally using a referrer source referrer source, with an origin origin, and with a default origin behaviour default which is either "taint" or "fail", it must run the first applicable set of steps from the following list. The default origin behaviour is only used if mode is "No CORS". This algorithm wraps the fetch algorithm above, and labels the obtained resource as either CORS-same-origin or CORS-cross-origin, or blocks the resource entirely.

Hat der URL den gleichen Ursprung wie origin
Ist der URL ein data:-URL
Ist der URL about:blank

Verarbeite diese Unterschritt:

  1. Rufe URL ab, verwende referrer source, sofern angegeben, mit dem gesetzten Schalter "manual redirect".

  2. Schleife: Warte darauf, dass der Abruf-Algorithmus weiß, ob das Ergebnis eine Weiterleitung ist oder nicht.

  3. Folge den ersten angemessenen Schritten der folgenden Liste:

    Ist das Ergebnis des Abrufs eine Weiterleitung und ist der Ursprung des Ziel-URL der Weiterleitung nicht der gleiche Ursprung wie origin

    Setze URL auf den Ziel-URL der Weiterleitung und gehe zurück zum Beginn des Algorithmus Abruf mit möglichem aktivierten CORS (dieses Mal könnte ein anderer der Zweige unten verwendet werden, abhängig vom Wert für mode).

    Ist das Ergebnis des Abrufs eine Weiterleitung

    Der Ursprung des Ziel-URL der Weiterleitung ist der gleiche Ursprung wie origin.

    Folge der Weiterleitung transparent und springe zu dem Schleife benannten Schritt oben.

    Ansonsten

    Die Quelle ist verfügbar, es ist keine Weiterleitung und ihr Ursprung ist der gleiche Ursprung wie origin.

    Die Aufgaben des Abruf-Algorithmus werden normal in eine Warteschleife gesetzt und zum Zweck des Aufruf-Algorithmus ist die erhaltene Quelle CORS-same-origin.

Ist mode "No CORS" und ist default gleich taint

Der URL hat nicht den gleichen Ursprung wie origin.

Rufe URL ab, verwende referrer source als wäre eine angegeben.

Die Aufgaben vom Abruf-Algorithmus werden normal in eine Warteschleife gestellt, aber für den Zweck des abrufenden Algorithmus, ist die erhaltene Quelle CORS-cross-origin. Das Benutzerprogramm kann dem Benutzer einen Zuggangsfehler wegen anderer Quelle melden (zum Beispiel in einer Debugging Console).

Ist mode "No CORS"

Der URL hat nicht den gleichen Ursprung wie origin und default ist fail.

Verwerfe alle Daten, die als Teil dieses Algorithmus abgerufen wurden und verhindere, dass irgendeine Aufgabe des Abruf-Algorithmus in eine Warteschlange eingereiht wird. Für den Zweck des aufrufenden Algorithmus muss sich das Benutzerprogramm so verhalten, als hätte es einen fatalen Netzwerkfehler gegeben und als sei keine Quelle erhalten worden. Das Benutzerprogramm kann dem Benutzer einen Zuggangsfehler wegen anderer Quelle melden (zum Beispiel in einer Debugging Console).

Ist mode "Anonymous" oder "Use Credentials"

Der URL hat nicht den gleichen Ursprung wie origin.

Verarbeite diese Schritte:

  1. Vollziehe eine cross-origin-Anfrage mit dem Anfrage-URL auf URL gesetzt, mit der CORS Referrer-Quelle auf referrer source gesetzt, sofern eine angegeben war, den Quellen-Ursprung auf origin gesetzt und mit dem Schalter "omit credentials" aktiv gesetzt, sofern mode "Anonymous" ist und nicht anders gesetzt ist. [CORS]

  2. Warte, bis der CORS cross-origin-Anfragestatus einen Wert hat.

  3. Springe zum angemessenen Schritt in der folgenden Liste:

    Ist der CORS cross-origin-Anfragestatus nicht success

    Verwerfe allle abgerufenen Daten und verhindere, dass irgendwelche Aufgaben des Abruf-Algorithmus in die Warteschlange gesetzt werden. Zum Zweck des aufrufenden Algorithmus, muss das Benutzerprogramm sich so verhalten, als ob es einen fatalen Netzwerkfehler gab und die Quelle nicht erhalten wurde. Ist eine CORS Prüfung auf geteilte Quellen fehlgeschlagen, kann das Benutzerprogramm dem Benutzer einen cross-origin Quellenzugangsfehler melden (zum Beispiel in der Debugging Console).

    Ist der CORS cross-origin-Anfragestatus success

    Die Aufgaben vom Abruf-Algorithmus werden normal in eine Warteschlange eingereiht und zum Zweck des aufrufenden Algorithmus ist die erhaltene Quelle CORS-same-origin.

If the URL has the same origin as origin
If the URL is a data: URL
If the URL is about:blank

Run these substeps:

  1. Fetch URL, using referrer source if one was specified, with the manual redirect flag set.

  2. Loop: Wait for the fetch algorithm to know if the result is a redirect or not.

  3. Follow the first appropriate steps from the following list:

    If the result of the fetch is a redirect, and the origin of the target URL of the redirect is not the same origin as origin

    Set URL to the target URL of the redirect and return to the top of the potentially CORS-enabled fetch algorithm (this time, one of the other branches below might be taken, based on the value of mode).

    If the result of the fetch is a redirect

    The origin of the target URL of the redirect is the same origin as origin.

    Transparently follow the redirect and jump to the step labeled loop above.

    Otherwise

    The resource is available, it is not a redirect, and its origin is the same origin as origin.

    The tasks from the fetch algorithm are queued normally, and for the purposes of the calling algorithm, the obtained resource is CORS-same-origin.

If mode is "No CORS" and default is taint

The URL does not have the same origin as origin.

Fetch URL, using referrer source if one was specified.

The tasks from the fetch algorithm are queued normally, but for the purposes of the calling algorithm, the obtained resource is CORS-cross-origin. The user agent may report a cross-origin resource access failure to the user (e.g. in a debugging console).

If mode is "No CORS"

The URL does not have the same origin as origin, and default is fail.

Discard any data fetched as part of this algorithm, and prevent any tasks from such invocations of the fetch algorithm from being queued. For the purposes of the calling algorithm, the user agent must act as if there was a fatal network error and no resource was obtained. The user agent may report a cross-origin resource access failure to the user (e.g. in a debugging console).

If mode is "Anonymous" or "Use Credentials"

The URL does not have the same origin as origin.

Run these steps:

  1. Perform a cross-origin request with the request URL set to URL, with the CORS referrer source set to referrer source if one was specified, the source origin set to origin, and with the omit credentials flag set if mode is "Anonymous" and not set otherwise. [CORS]

  2. Wait for the CORS cross-origin request status to have a value.

  3. Jump to the appropriate step from the following list:

    If the CORS cross-origin request status is not success

    Discard all fetched data and prevent any tasks from the fetch algorithm from being queued. For the purposes of the calling algorithm, the user agent must act as if there was a fatal network error and no resource was obtained. If a CORS resource sharing check failed, the user agent may report a cross-origin resource access failure to the user (e.g. in a debugging console).

    If the CORS cross-origin request status is success

    The tasks from the fetch algorithm are queued normally, and for the purposes of the calling algorithm, the obtained resource is CORS-same-origin.

2.7 Gemeinsame DOM-Schnittstellen

2.7.1 Inhaltsattribute in IDL-Attributen widerspiegeln

Einige IDL-Attribute sind definiert, um ein bestimmtes Inhaltsattribut widerzuspiegeln. Das bedeutet, dass das IDL-Attribut beim Vorgang des Beziehens den aktuellen Wert des Inhaltsattributs zurückgibt und beim Vorgang des Setzens, das IDL-Attribut den Wert des Inhaltsattributs auf den gegebenen Wert ändert.

Some IDL attributes are defined to reflect a particular content attribute. This means that on getting, the IDL attribute returns the current value of the content attribute, and on setting, the IDL attribute changes the value of the content attribute to the given value.

Im Allgemeinen muss sich das IDL-Attribut beim Beziehen, sofern das Inhaltsattribut nicht vorhanden ist, so verhalten, als ob der Wert des Inhaltsattributs die leere Zeichenkette ist; und beim Setzen, sofern das Inhaltsattribut nicht vorhanden ist, muss es zuerst hinzugefügt werden.

In general, on getting, if the content attribute is not present, the IDL attribute must act as if the content attribute's value is the empty string; and on setting, if the content attribute is not present, it must first be added.

Ist ein widerspiegelndes IDL-Attribut ein DOMString-Attribut, dessen Inhaltsattribut definiert ist, einen URL zu enthalten, dann muss das IDL-Attribut beim Beziehen den Wert des Inhaltsattributs relativ zum Element auflösen und den erhaltenen absoluten URL zurückgeben, sofern das erfolgreich war oder ansonsten die leere Zeichenkette; und beim Setzen muss es das Inhaltsattribut auf den angegebenen literalen Wert setzen. Ist das Inhaltsattribut nicht vorhanden, muss das IDL-Attribut den voreingestellten Wert zurückgeben, sofern das Inhaltsattribut einen (voreingestellten Wert) hat oder ansonsten die leere Zeichenkette.

If a reflecting IDL attribute is a DOMString attribute whose content attribute is defined to contain a URL, then on getting, the IDL attribute must resolve the value of the content attribute relative to the element and return the resulting absolute URL if that was successful, or the empty string otherwise; and on setting, must set the content attribute to the specified literal value. If the content attribute is absent, the IDL attribute must return the default value, if the content attribute has one, or else the empty string.

Ist ein widerspiegelndes IDL-Attribut ein DOMString-Attribute, dessen Inhaltsattribut definiert ist, einen oder mehrere URLs zu enthalten, dann muss das IDL-Attribut beim Beziehen die Inhaltsattribute an Leerzeichen aufteilen und die Aneinanderreihung zurückgeben, die durch die Auflösung eines jeden Einzel-URL zu einem absoluten URL relativ zum Element erhalten wird, mit einem einzelnen Leerzeichen U+0020 SPACE zwischen jedem URL, unter Nichtbeachtung jeglicher Token, die nicht erfolgreich aufgelöst wurden. Ist das Inhaltsattribut nicht vorhanden, muss das IDL-Attribut den voreingestellten Wert zurückgeben, sofern das Inhaltsattribut einen hat, oder ansonsten die leere Zeichenkette. Beim Setzen muss das IDL-Attribut das Inhaltsattribut auf den angegebenen literalen Wert setzen.

If a reflecting IDL attribute is a DOMString attribute whose content attribute is defined to contain one or more URLs, then on getting, the IDL attribute must split the content attribute on spaces and return the concatenation of resolving each token URL to an absolute URL relative to the element, with a single U+0020 SPACE character between each URL, ignoring any tokens that did not resolve successfully. If the content attribute is absent, the IDL attribute must return the default value, if the content attribute has one, or else the empty string. On setting, the IDL attribute must set the content attribute to the specified literal value.

Ist ein widerspiegelndes IDL-Attribut ein DOMString-Attribut, dessen Inhaltsattribut ein aufzählendes Attribut ist und ist das IDL-Attribut nur auf bekannte Werte begrenzt, dann muss das IDL-Attribut beim Beziehen den konformen Wert des Statusses zurückgeben, in dem das Attribut ist (in seinem kanonischen Fall), sofern es einen Status besitzt. Oder die leere Zeichenkette, wenn das Attribut in einem Status ist, der kein bezügliches Schlüsselwort hat oder wenn das Attribut nicht in einem definierten Status ist (zum Beispiel wenn das Attribut nicht vorhanden ist und es keine Voreinstellung für einen fehlenden Wert gibt); und beim Setzen muss das Inhaltsattribut auf den angegebenen neuen Wert gesetzt werden.

If a reflecting IDL attribute is a DOMString attribute whose content attribute is an enumerated attribute, and the IDL attribute is limited to only known values, then, on getting, the IDL attribute must return the conforming value associated with the state the attribute is in (in its canonical case), if any, or the empty string if the attribute is in a state that has no associated keyword value or if the attribute is not in a defined state (e.g. the attribute is missing and there is no missing value default); and on setting, the content attribute must be set to the specified new value.

Ist ein widerspiegelndes IDL-Attribut ein DOMString-Attribut, fällt aber nicht in eine der oben genannten Kategorien, dann muss das Beziehen und Setzen auf eine transparente Art und Weise geschehen bei der die Groß- und Kleinschreibung beibehalten wird.

If a reflecting IDL attribute is a DOMString attribute but doesn't fall into any of the above categories, then the getting and setting must be done in a transparent, case-preserving manner.

Ist ein widerspiegelndes IDL-Attribut ein Boole'sches Attribut, dann muss das IDL-Attribut beim Beziehen wahr zurückgeben, sofern das Inhaltsattribut gesetzt ist, und falsch, wenn es nicht vorhanden ist. Beim Setzen muss das Inhaltsattribut entfernt werden, sofern das IDL-Attribut auf falsch gesetzt ist und muss auf die leere Zeichenkette gesetzt werden, sofern das IDL-Attribut auf wahr gesetzt ist. (Dies entspricht den Regeln für Boole'sche Inhaltsattribute.)

If a reflecting IDL attribute is a boolean attribute, then on getting the IDL attribute must return true if the content attribute is set, and false if it is absent. On setting, the content attribute must be removed if the IDL attribute is set to false, and must be set to the empty string if the IDL attribute is set to true. (This corresponds to the rules for boolean content attributes.)

Hat ein widerspiegelndes IDL-Attribut einen mit Vorzeichen versehenen Integer-Typ (long), dann muss das Inhaltsattribut beim Beziehen entsprechend der Regeln zur Verarbeitung von Ganzzahlen mit Vorzeichen verarbeitet werden und ist dieses erfolgreich, und ist der Wert im Bereich des Typs des IDL-Attributs, dann muss der erhaltene Wert zurückgegeben werden. Scheitert dieses jedoch oder wird ein Wert außerhalb des Bereichs erhalten, oder ist das Attribut nicht anwesend, dann muss stattdessen der voreingestellte Wert zurückgegeben werden oder 0, wenn kein voreingestellter Wert vorhanden ist. Beim Setzen muss der gegebene Wert in die kürzest mögliche Zeichenkette konvertiert werden, die die Zahl als eine gültige Ganzzahl (Integer) repräsentiert; und dann muss jene Zeichenkette als neuer Inhaltsattributswert verwendet werden.

If a reflecting IDL attribute has a signed integer type (long) then, on getting, the content attribute must be parsed according to the rules for parsing signed integers, and if that is successful, and the value is in the range of the IDL attribute's type, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, then the default value must be returned instead, or 0 if there is no default value. On setting, the given value must be converted to the shortest possible string representing the number as a valid integer and then that string must be used as the new content attribute value.

Hat ein widerspiegelndes IDL-Attribut einen mit Vorzeichen versehenen Integer-Typ (long), der auf nicht negative Zahlen begrenzt ist, dann muss das Inhaltsattribut beim Beziehen entsprechend der Regeln zur Verarbeitung von nicht negativen Ganzzahlen (Integer) verarbeitet werden. Ist dieses erfolgreich und ist der Wert im Bereich des Typs des IDL-Attributs, dann muss der erhaltene Wert zurückgegeben werden. Scheitert dies jedoch oder wird ein Wert außerhalb des Bereichs zurückgegeben oder ist das Attribut nicht vorhanden, dann muss stattdessen der voreingestellte Wert zurückgegeben werden, oder -1, wenn es keinen voreingestellten Wert gibt. Ist der Wert negativ, muss das Benutzerprogramm beim Setzen den Ausnahmefehler IndexSizeError ausgeben. Ansonsten muss der gegebene Wert in die kürzest mögliche Zeichenkette konvertiert werden, die die Zahl als eine gültige nicht negative Ganzzahl (Integer) repräsentiert; und dann muss diese Zeichenkette als neuer Inhaltsattributwert verwendet werden.

If a reflecting IDL attribute has a signed integer type (long) that is limited to only non-negative numbers then, on getting, the content attribute must be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range of the IDL attribute's type, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or −1 if there is no default value. On setting, if the value is negative, the user agent must throw an IndexSizeError exception. Otherwise, the given value must be converted to the shortest possible string representing the number as a valid non-negative integer and then that string must be used as the new content attribute value.

Hat ein widerspiegelndes IDL-Attribut einen Integer-Typ (unsigned long) ohne Vorzeichen, dann muss das Inhaltsattribut beim Beziehen entsprechend der Regeln zur Verarbeitung von nicht negativen Ganzzahlen (Integer) verarbeitet werden. Ist das erfolgreich und ist der Wert im Bereich von 0 bis einschließlich 2147483647, muss der erhaltene Wert zurückgegeben werden. Scheitert dieses jedoch oder gibt einen Wert außerhalb des Wertebereichs zurück oder ist das Attribut nicht vorhanden, muss der voreingestellte Wert stattdessen zurückgeben werden oder 0, wenn es keinen voreingestellten Wert gibt. Bei Setzen, lass zuerst, sofern der neue Wert im Bereich von 0 bis 2147483647 ist, n den neue Wert, ansonsten lass n den voreingestellte Wert sein oder 0, wenn es keinen voreingestellten Wert gibt; dann muss n zur kürzest möglichen Zeichenkette konvertiert werden, die diese Zahl als ein gültige nicht negative Ganzzahl (Integer) repräsentiert und diese neue Zeichenkette muss als der neue Inhaltsattributwert verwendet werden.

If a reflecting IDL attribute has an unsigned integer type (unsigned long) then, on getting, the content attribute must be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range 0 to 2147483647 inclusive, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or 0 if there is no default value. On setting, first, if the new value is in the range 0 to 2147483647, then let n be the new value, otherwise let n be the default value, or 0 if there is no default value; then, n must be converted to the shortest possible string representing the number as a valid non-negative integer and that string must be used as the new content attribute value.

Hat ein widerspiegelndes IDL-Attribut einen Integer-Typ (unsigned long), der nur auf nicht negative Zahlen größer Null beschränkt ist, dann ist das Verhalten ähnlich dem vorausgegangenem Fall, jedoch ist Null nicht gestattet. Das Inhaltsattribut muss beim Beziehen zuerst nach den Regeln zur Verarbeitung von nicht negativen Ganzzahlen (Integer) verarbeitet werden und ist das erfolgreich und ist der Wert im Bereich von 1 bis einschließlich 2147483647, dann muss der erhaltene Wert zurückgegeben werden. Scheitert dieses jedoch oder wid ein Wert außerhalb des Wertebereichs zurückgegeben oder ist das Attribut nicht vorhanden, muss stattdessen der voreingestellte Wert zurückgegeben werden oder 1, wenn es keinen voreingestellten Wert gibt. Beim Setzen muss das Benutzerprogramm, sofern der Wert Null ist, einen Ausnahmenfehler IndexSizeError ausgeben. Ansonsten lass zuerst, wenn der neue Wert im Bereich von 1 bis 2147483647 ist, n den neuen Wert sein, ansonsten lass n den voreingestellten Wert sein oder 1, wenn es keinen voreingestellten Wert gibt; dann muss n in die kleinst mögliche Zeichenkette konvertiert werden, die diese Zahl als eine gültige nicht negative Ganzzahl (Integer) repräsentiert und diese Zeichenkette muss als neuer Inhaltsattributwert verwendet werden.

If a reflecting IDL attribute has an unsigned integer type (unsigned long) that is limited to only non-negative numbers greater than zero, then the behavior is similar to the previous case, but zero is not allowed. On getting, the content attribute must first be parsed according to the rules for parsing non-negative integers, and if that is successful, and the value is in the range 1 to 2147483647 inclusive, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or 1 if there is no default value. On setting, if the value is zero, the user agent must throw an IndexSizeError exception. Otherwise, first, if the new value is in the range 1 to 2147483647, then let n be the new value, otherwise let n be the default value, or 1 if there is no default value; then, n must be converted to the shortest possible string representing the number as a valid non-negative integer and that string must be used as the new content attribute value.

Hat ein widerspiegelndes IDL-Attribut einen Fließkomma-Typ (double oder unrestricted double), dann muss das Inhaltsattribut beim Beziehen entsprechend der Regeln zur Verarbeitung von Fließkommazahlwerten verarbeitet werden und ist das erfolgreich, muss das Ergebnis zurückgegeben werden. Scheitert dieses jedoch oder ist das Attribut nicht vorhanden, muss stattdessen der voreingestellte Wert zurückgegeben werden oder 0,0, wenn kein voreingestellter Wert vorhanden ist. Beim Setzen muss der voreingestellte Wert in die beste Repräsentation der Zahl als eine Fließkommazahl konvertiert werden und dann muss jene Zeichenkette als neuer Inhaltsattributwert verwendet werden.

If a reflecting IDL attribute has a floating-point number type (double or unrestricted double), then, on getting, the content attribute must be parsed according to the rules for parsing floating-point number values, and if that is successful, the resulting value must be returned. If, on the other hand, it fails, or if the attribute is absent, the default value must be returned instead, or 0.0 if there is no default value. On setting, the given value must be converted to the best representation of the number as a floating-point number and then that string must be used as the new content attribute value.

Hat ein widerspiegelndes IDL-Attribut einen Fließkomma-Typ (double oder unrestricted double), der auf Zahlen größer als Null begrenzt ist, dann ist das Verhalten ähnlich zum vorherigen Fall, jedoch sind Null und negative Zahlen nicht gestattet. Beim Beziehen muss das Inhaltsattribut entsprechend den Regeln zur Verarbeitung von Fließkommazahlwerten verarbeitet werden und ist das erfolgreich und ist der Wert größer als 0,0, muss der erhaltene Wert zurückgegeben werden. Scheitert dieses jedoch oder wird ein Wert zurückgegeben, der außerhalb des Wertebereichs liegt oder ist das Attribut nicht vorhanden, muss stattdessen der voreingestellte Wert zurückgegeben werden oder 0,0, wenn es keinen voreingestellten Wert gibt. Beim Setzen muss der Wert, sofern er kleiner oder gleich Null ist, ignoriert werden. Ansonsten muss der gegebene Wert in die beste Repräsentation der Zahl als eine Fließkommazahl konvertiert werden und dann muss jene Zeichenkette als neuer Inhaltsattributwert verwendet werden.

If a reflecting IDL attribute has a floating-point number type (double or unrestricted double) that is limited to numbers greater than zero, then the behavior is similar to the previous case, but zero and negative values are not allowed. On getting, the content attribute must be parsed according to the rules for parsing floating-point number values, and if that is successful and the value is greater than 0.0, the resulting value must be returned. If, on the other hand, it fails or returns an out of range value, or if the attribute is absent, the default value must be returned instead, or 0.0 if there is no default value. On setting, if the value is less than or equal to zero, then the value must be ignored. Otherwise, the given value must be converted to the best representation of the number as a floating-point number and then that string must be used as the new content attribute value.

Die Werte unendlich und Not-a-Number (NaN) erzeugen beim Setzen einen Ausnahmefehler wie in der IDL-Spezifikation definiert. [WEBIDL]

The values Infinity and Not-a-Number (NaN) values throw an exception on setting, as defined in the Web IDL specification. [WEBIDL]

Hat ein widerspiegelndes IDL-Attribut den Typ DOMTokenList oder DOMSettableTokenList, dann muss es beim Beziehen ein (dementsprechendes) DOMTokenList- oder DOMSettableTokenList-Objekt zurückgeben, dessen verknüpftes Element das besagte Element ist und dessen verknüpfter lokaler Name des Attributs der Name des besagten Attributs ist. Das gleiche DOMTokenList- oder DOMSettableTokenList-Objekt muss jedesmal für jedes Attribut zurückgegeben werden.

If a reflecting IDL attribute has the type DOMTokenList or DOMSettableTokenList, then on getting it must return a DOMTokenList or DOMSettableTokenList object (as appropriate) whose associated element is the element in question and whose associated attribute's local name is the name of the attribute in question. The same DOMTokenList or DOMSettableTokenList object must be returned every time for each attribute.

Hat ein widerspiegelndes IDL-Attribut den Typ HTMLElement, oder eine Schnittstelle, die von HTMLElement abstammt, dann muss es beim Beziehen den folgenden Algorithmus verarbeiten (und am ersten Punkt anhalten, an dem ein Wert zurückgegeben wird):

If a reflecting IDL attribute has the type HTMLElement, or an interface that descends from HTMLElement, then, on getting, it must run the following algorithm (stopping at the first point where a value is returned):

  1. Ist das entsprechende Inhaltsattribut nicht vorhanden, dann muss das IDL-Attribut Null zurückgeben.
  2. Lass candidate das Element sein, das die Methode document.getElementById() finden würde, wenn sie auf das Dokument des Inhaltsattributs angewendet würde, wenn der aktuelle Wert des korrespondierenden Inhaltsattributs als ihr Argument weitergegeben würde.***
  3. Ist candidate Null oder ist es nicht typenkompatibel mit dem IDL-Attribut, dann muss das IDL-Attribut Null zurück geben.
  4. Ansonsten muss es candidate zurückgeben.
  1. If the corresponding content attribute is absent, then the IDL attribute must return null.
  2. Let candidate be the element that the document.getElementById() method would find when called on the content attribute's document if it were passed as its argument the current value of the corresponding content attribute.
  3. If candidate is null, or if it is not type-compatible with the IDL attribute, then the IDL attribute must return null.
  4. Otherwise, it must return candidate.

Beim Setzen, hat das gegebene Element ein id-Attribut und den gleichen home subtree wie das Element des Attributs, das gesetzt wird und ist das gegebene Element das erste Element in jenem home subtree, dessen ID der Wert jenen id-Attributs ist, dann muss das Inhaltsattribut auf den Wert jenes id-Attributs gesetzt werden. Ansonsten muss das Inhaltsattribut auf die leere Zeichenkette gesetzt werden.

On setting, if the given element has an id attribute, and has the same home subtree as the element of the attribute being set, and the given element is the first element in that home subtree whose ID is the value of that id attribute, then the content attribute must be set to the value of that id attribute. Otherwise, the content attribute must be set to the empty string.

2.7.2 Kollektionen

Die Schnittstellen HTMLAllCollection, HTMLFormControlsCollection, HTMLOptionsCollection, sind Kollektionen, die von der Schnittstelle HTMLCollection abgeleitet sind.

The HTMLAllCollection, HTMLFormControlsCollection, HTMLOptionsCollection, interfaces are collections derived from the HTMLCollection interface.

2.7.2.1 HTMLAllCollection

Die Schnittstelle HTMLAllCollection wird für die allgemeine Kollektion von Elementen verwendet, genau wie HTMLCollection, jedoch mit der Ausnahme, dass ihre Methode namedItem() ein HTMLCollection-Objekt zurückgibt, wenn es mehrere übereinstimmende Elemente gibt und dass ihre item()-Methode als Synonym für ihre namedItem()-Methode verwendet werden kann. Sie ist nur für das veraltete document.all-Attribut gedacht.

The HTMLAllCollection interface is used for generic collections of elements just like HTMLCollection, with the exception that its namedItem() method returns an HTMLCollection object when there are multiple matching elements, and that its item() method can be used as a synonym for its namedItem() method. It is intended only for the legacy document.all attribute.

interface HTMLAllCollection : HTMLCollection {
	// inherits length and item(unsigned long index)
	(HTMLCollection or Element)? item(DOMString name);
	legacycaller getter (HTMLCollection or Element)? namedItem(DOMString name); // shadows inherited namedItem()
	HTMLAllCollection tags(DOMString tagName);
};
interface HTMLAllCollection : HTMLCollection {
	// inherits length and item(unsigned long index)
	(HTMLCollection or Element)? item(DOMString name);
	legacycaller getter (HTMLCollection or Element)? namedItem(DOMString name); // shadows inherited namedItem()
	HTMLAllCollection tags(DOMString tagName);
};
collection . length

Gibt die Anzahl der Elemente in der Kollektion zurück.

element = collection . item(index)
collection[index]

Gibt das Objekt mit dem Index index von der Kollektion zurück. Die Objekte sind in Baumreihenfolge angeordnet.

element = collection . item(name)
collection = collection . item(name)
element = collection . namedItem(name)
collection = collection . namedItem(name)
collection[name]
collection(name)

Gibt das Objekt mit ID oder Namen name von der Kollektion zurück.

Gibt es mehrere zutreffende Objekte, dann wird ein HTMLCollection-Objekt mit all diesen Elementen zurückgegeben.

Nur die Elemente a, applet, area, embed, form, frame, frameset, iframe, img und object können einen Namen haben, der für diese Methode verwendet wird; ihr Name wird durch den Wert ihres nameAttributs gegeben attribute.

collection = collection . tags(tagName)

Gibt eine Kollektion zurück, die eine gefilterte Ansicht der aktuellen Kollektion ist, die nur Elemente mit dem gegebenen Tag-Namen enthält.

collection . length

Returns the number of elements in the collection.

element = collection . item(index)
collection[index]

Returns the item with index index from the collection. The items are sorted in tree order.

element = collection . item(name)
collection = collection . item(name)
element = collection . namedItem(name)
collection = collection . namedItem(name)
collection[name]
collection(name)

Returns the item with ID or name name from the collection.

If there are multiple matching items, then an HTMLCollection object containing all those elements is returned.

Only a, applet, area, embed, form, frame, frameset, iframe, img, and object elements can have a name for the purpose of this method; their name is given by the value of their name attribute.

collection = collection . tags(tagName)

Returns a collection that is a filtered view of the current collection, containing only elements with the given tag name.

Die unterstützten Eingenschaftsindizes des Objekts sind wie die für HTMLCollection-Objekte definierten.

The object's supported property indices are as defined for HTMLCollection objects.

Die unterstützten Eigenschaftsnamen bestehen aus den nicht leeren Werten aller id-Attribute aller Elemente, die durch die Kollektion repräsentiert werden und die nicht leeren Werte aller name-Attribute aller Elemente a, applet, area, embed, form, frame, frameset, iframe, img und object, die durch die Kollektion repräsentiert werden, in Baumreihenfolge, spätere Duplikate ignorierend, wenn, mit der id eines Elemente, das den Namen name vorsteht, wenn es beide bereitstellt, sie voneinander abweichen und keines ein Duplikat eines früheren Eintrags ist. ***geradeaus übersetzt, mal vernünftig schreiben***

The supported property names consist of the non-empty values of all the id attributes of all the elements represented by the collection, and the non-empty values of all the name attributes of all the a, applet, area, embed, form, frame, frameset, iframe, img, and object elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

Die Methoden item(name) und namedItem(name) müssen entsprechend des folgenden Algorithmus verhalten:

The item(name) and namedItem(name) methods must act according to the following algorithm:

  1. Ist name die leere Zeichenkette, gib Null zurück und beende den Algorithmus.
  2. Lass collection ein HTMLCollection-Objekt sein, das mit dem gleichen Knoten verwurzelt ist wie das HTMLAllCollection-Objekt, bei welchem die Methode aufgerufen wurde und dessen Filter nur Elemente herausfiltert, die schon dem Filter des HTMLAllCollection-Objekts entspricht, bei welchem die Methode aufgerufen wurde und die entweder die Elemente:

  3. Gibt es zum Zeitpunkt, zu der die Methode aufgerufen wird, genau einen Knoten in collection, dann gib diesen Knoten zurück und beende den Algorithmus.
  4. Ansonsten, ist collection zum Zeitpunkt, zu dem die Methode aufgerufen wird, leer, gib Null zurück und beende den Algorithmus.
  5. Ansonsten gib collection zurück.
  1. If name is the empty string, return null and stop the algorithm.
  2. Let collection be an HTMLCollection object rooted at the same node as the HTMLAllCollection object on which the method was invoked, whose filter matches only elements that already match the filter of the HTMLAllCollection object on which the method was invoked and that are either:

  3. If, at the time the method is called, there is exactly one node in collection, then return that node and stop the algorithm.
  4. Otherwise, if, at the time the method is called, collection is empty, return null and stop the algorithm.
  5. Otherwise, return collection.

Die Methode tags(tagName) muss eine HTMLAllCollection, verwurzelt am gleichen Knoten wie das HTMLAllCollection-Objekt zurückgeben object on which the method was invoked, whose filter matches only HTML elements whose local name is the tagName argument and that already match the filter of the HTMLAllCollection object on which the method was invoked. In HTML documents, the argument must first be converted to ASCII lowercase.

The tags(tagName) method must return an HTMLAllCollection rooted at the same node as the HTMLAllCollection object on which the method was invoked, whose filter matches only HTML elements whose local name is the tagName argument and that already match the filter of the HTMLAllCollection object on which the method was invoked. In HTML documents, the argument must first be converted to ASCII lowercase.

2.7.2.2 HTMLFormControlsCollection

The HTMLFormControlsCollection interface is used for collections of listed elements in form and fieldset elements.

The HTMLFormControlsCollection interface is used for collections of listed elements in form and fieldset elements.

interface HTMLFormControlsCollection : HTMLCollection {
	// inherits length and item()
	legacycaller getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
};

interface RadioNodeList : NodeList {
					attribute DOMString value;
};
interface HTMLFormControlsCollection : HTMLCollection {
	// inherits length and item()
	legacycaller getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
};

interface RadioNodeList : NodeList {
					attribute DOMString value;
};
collection . length

Returns the number of elements in the collection.

element = collection . item(index)
collection[index]

Returns the item with index index from the collection. The items are sorted in tree order.

element = collection . namedItem(name)
radioNodeList = collection . namedItem(name)
collection[name]
collection(name)

Returns the item with ID or name name from the collection.

If there are multiple matching items, then a RadioNodeList object containing all those elements is returned.

radioNodeList . value [ = value ]

Returns the value of the first checked radio button represented by the object.

Can be set, to check the first radio button with the given value represented by the object.

collection . length

Returns the number of elements in the collection.

element = collection . item(index)
collection[index]

Returns the item with index index from the collection. The items are sorted in tree order.

element = collection . namedItem(name)
radioNodeList = collection . namedItem(name)
collection[name]
collection(name)

Returns the item with ID or name name from the collection.

If there are multiple matching items, then a RadioNodeList object containing all those elements is returned.

radioNodeList . value [ = value ]

Returns the value of the first checked radio button represented by the object.

Can be set, to check the first radio button with the given value represented by the object.

The object's supported property indices are as defined for HTMLCollection objects.

The object's supported property indices are as defined for HTMLCollection objects.

The supported property names consist of the non-empty values of all the id and name attributes of all the elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

The supported property names consist of the non-empty values of all the id and name attributes of all the elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

The namedItem(name) method must act according to the following algorithm:

The namedItem(name) method must act according to the following algorithm:

  1. If name is the empty string, return null and stop the algorithm.
  2. If, at the time the method is called, there is exactly one node in the collection that has either an id attribute or a name attribute equal to name, then return that node and stop the algorithm.
  3. Otherwise, if there are no nodes in the collection that have either an id attribute or a name attribute equal to name, then return null and stop the algorithm.
  4. Otherwise, create a new RadioNodeList object representing a live view of the HTMLFormControlsCollection object, further filtered so that the only nodes in the RadioNodeList object are those that have either an id attribute or a name attribute equal to name. The nodes in the RadioNodeList object must be sorted in tree order.
  5. Return that RadioNodeList object.
  1. If name is the empty string, return null and stop the algorithm.
  2. If, at the time the method is called, there is exactly one node in the collection that has either an id attribute or a name attribute equal to name, then return that node and stop the algorithm.
  3. Otherwise, if there are no nodes in the collection that have either an id attribute or a name attribute equal to name, then return null and stop the algorithm.
  4. Otherwise, create a new RadioNodeList object representing a live view of the HTMLFormControlsCollection object, further filtered so that the only nodes in the RadioNodeList object are those that have either an id attribute or a name attribute equal to name. The nodes in the RadioNodeList object must be sorted in tree order.
  5. Return that RadioNodeList object.

Members of the RadioNodeList interface inherited from the NodeList interface must behave as they would on a NodeList object.

Members of the RadioNodeList interface inherited from the NodeList interface must behave as they would on a NodeList object.

The value IDL attribute on the RadioNodeList object, on getting, must return the value returned by running the following steps:

The value IDL attribute on the RadioNodeList object, on getting, must return the value returned by running the following steps:

  1. Let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose checkedness is true. Otherwise, let it be null.

  2. If element is null, or if it is an element with no value attribute, return the empty string.

  3. Otherwise, return the value of element's value attribute.

  1. Let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose checkedness is true. Otherwise, let it be null.

  2. If element is null, or if it is an element with no value attribute, return the empty string.

  3. Otherwise, return the value of element's value attribute.

On setting, the value IDL attribute must run the following steps:

On setting, the value IDL attribute must run the following steps:

  1. Let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose value content attribute is present and equal to the new value, if any. Otherwise, let it be null.

  2. If element is not null, then set its checkedness to true.

  1. Let element be the first element in tree order represented by the RadioNodeList object that is an input element whose type attribute is in the Radio Button state and whose value content attribute is present and equal to the new value, if any. Otherwise, let it be null.

  2. If element is not null, then set its checkedness to true.

2.7.2.3 HTMLOptionsCollection

The HTMLOptionsCollection interface is used for collections of option elements. It is always rooted on a select element and has attributes and methods that manipulate that element's descendants.

The HTMLOptionsCollection interface is used for collections of option elements. It is always rooted on a select element and has attributes and methods that manipulate that element's descendants.

interface HTMLOptionsCollection : HTMLCollection {
	// inherits item()
					 attribute unsigned long length; // shadows inherited length
	legacycaller HTMLOptionElement? (DOMString name);
	setter creator void (unsigned long index, HTMLOptionElement? option);
	void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
	void remove(long index);
					 attribute long selectedIndex;
};
interface HTMLOptionsCollection : HTMLCollection {
	// inherits item()
					 attribute unsigned long length; // shadows inherited length
	legacycaller HTMLOptionElement? (DOMString name);
	setter creator void (unsigned long index, HTMLOptionElement? option);
	void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
	void remove(long index);
					 attribute long selectedIndex;
};
collection . length [ = value ]

Returns the number of elements in the collection.

When set to a smaller number, truncates the number of option elements in the corresponding container.

When set to a greater number, adds new blank option elements to that container.

element = collection . item(index)
collection[index]

Returns the item with index index from the collection. The items are sorted in tree order.

element = collection . namedItem(name)
nodeList = collection . namedItem(name)
collection[name]
collection(name)

Returns the item with ID or name name from the collection.

If there are multiple matching items, then the first is returned.

collection . add(element [, before ] )

Inserts element before the node given by before.

The before argument can be a number, in which case element is inserted before the item with that number, or an element from the collection, in which case element is inserted before that element.

If before is omitted, null, or a number out of range, then element will be added at the end of the list.

This method will throw a HierarchyRequestError exception if element is an ancestor of the element into which it is to be inserted.

collection . selectedIndex [ = value ]

Returns the index of the first selected item, if any, or −1 if there is no selected item.

Can be set, to change the selection.

collection . length [ = value ]

Returns the number of elements in the collection.

When set to a smaller number, truncates the number of option elements in the corresponding container.

When set to a greater number, adds new blank option elements to that container.

element = collection . item(index)
collection[index]

Returns the item with index index from the collection. The items are sorted in tree order.

element = collection . namedItem(name)
nodeList = collection . namedItem(name)
collection[name]
collection(name)

Returns the item with ID or name name from the collection.

If there are multiple matching items, then the first is returned.

collection . add(element [, before ] )

Inserts element before the node given by before.

The before argument can be a number, in which case element is inserted before the item with that number, or an element from the collection, in which case element is inserted before that element.

If before is omitted, null, or a number out of range, then element will be added at the end of the list.

This method will throw a HierarchyRequestError exception if element is an ancestor of the element into which it is to be inserted.

collection . selectedIndex [ = value ]

Returns the index of the first selected item, if any, or −1 if there is no selected item.

Can be set, to change the selection.

The object's supported property indices are as defined for HTMLCollection objects.

The object's supported property indices are as defined for HTMLCollection objects.

On getting, the length attribute must return the number of nodes represented by the collection.

On getting, the length attribute must return the number of nodes represented by the collection.

On setting, the behavior depends on whether the new value is equal to, greater than, or less than the number of nodes represented by the collection at that time. If the number is the same, then setting the attribute must do nothing. If the new value is greater, then n new option elements with no attributes and no child nodes must be appended to the select element on which the HTMLOptionsCollection is rooted, where n is the difference between the two numbers (new value minus old value). Mutation events must be fired as if a DocumentFragment containing the new option elements had been inserted. If the new value is lower, then the last n nodes in the collection must be removed from their parent nodes, where n is the difference between the two numbers (old value minus new value).

On setting, the behavior depends on whether the new value is equal to, greater than, or less than the number of nodes represented by the collection at that time. If the number is the same, then setting the attribute must do nothing. If the new value is greater, then n new option elements with no attributes and no child nodes must be appended to the select element on which the HTMLOptionsCollection is rooted, where n is the difference between the two numbers (new value minus old value). Mutation events must be fired as if a DocumentFragment containing the new option elements had been inserted. If the new value is lower, then the last n nodes in the collection must be removed from their parent nodes, where n is the difference between the two numbers (old value minus new value).

Setting length never removes or adds any optgroup elements, and never adds new children to existing optgroup elements (though it can remove children from them).

Setting length never removes or adds any optgroup elements, and never adds new children to existing optgroup elements (though it can remove children from them).

The supported property names consist of the non-empty values of all the id and name attributes of all the elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

The supported property names consist of the non-empty values of all the id and name attributes of all the elements represented by the collection, in tree order, ignoring later duplicates, with the id of an element preceding its name if it contributes both, they differ from each other, and neither is the duplicate of an earlier entry.

The legacy caller of the HTMLOptionsCollection interface must act like the namedItem() method on the ancestor HTMLCollection interface.

The legacy caller of the HTMLOptionsCollection interface must act like the namedItem() method on the ancestor HTMLCollection interface.

When the user agent is to set the value of a new indexed property or set the value of an existing indexed property for a given property index index to a new value value, it must run the following algorithm:

When the user agent is to set the value of a new indexed property or set the value of an existing indexed property for a given property index index to a new value value, it must run the following algorithm:

  1. If value is null, invoke the steps for the remove method with index as the argument, and abort these steps.

  2. Let length be the number of nodes represented by the collection.

  3. Let n be index minus length.

  4. If n is greater than zero, then append a DocumentFragment consisting of n-1 new option elements with no attributes and no child nodes to the select element on which the HTMLOptionsCollection is rooted.

  5. If n is greater than or equal to zero, append value to the select element. Otherwise, replace the indexth element in the collection by value.

  1. If value is null, invoke the steps for the remove method with index as the argument, and abort these steps.

  2. Let length be the number of nodes represented by the collection.

  3. Let n be index minus length.

  4. If n is greater than zero, then append a DocumentFragment consisting of n-1 new option elements with no attributes and no child nodes to the select element on which the HTMLOptionsCollection is rooted.

  5. If n is greater than or equal to zero, append value to the select element. Otherwise, replace the indexth element in the collection by value.

The add(element, before) method must act according to the following algorithm:

The add(element, before) method must act according to the following algorithm:

  1. If element is an ancestor of the select element on which the HTMLOptionsCollection is rooted, then throw a HierarchyRequestError exception and abort these steps.

  2. If before is an element, but that element isn't a descendant of the select element on which the HTMLOptionsCollection is rooted, then throw a NotFoundError exception and abort these steps.

  3. If element and before are the same element, then return and abort these steps.

  4. If before is a node, then let reference be that node. Otherwise, if before is an integer, and there is a beforeth node in the collection, let reference be that node. Otherwise, let reference be null.

  5. If reference is not null, let parent be the parent node of reference. Otherwise, let parent be the select element on which the HTMLOptionsCollection is rooted.

  6. Act as if the DOM insertBefore() method was invoked on the parent node, with element as the first argument and reference as the second argument.

  1. If element is an ancestor of the select element on which the HTMLOptionsCollection is rooted, then throw a HierarchyRequestError exception and abort these steps.

  2. If before is an element, but that element isn't a descendant of the select element on which the HTMLOptionsCollection is rooted, then throw a NotFoundError exception and abort these steps.

  3. If element and before are the same element, then return and abort these steps.

  4. If before is a node, then let reference be that node. Otherwise, if before is an integer, and there is a beforeth node in the collection, let reference be that node. Otherwise, let reference be null.

  5. If reference is not null, let parent be the parent node of reference. Otherwise, let parent be the select element on which the HTMLOptionsCollection is rooted.

  6. Act as if the DOM insertBefore() method was invoked on the parent node, with element as the first argument and reference as the second argument.

The remove(index) method must act according to the following algorithm:

The remove(index) method must act according to the following algorithm:

  1. If the number of nodes represented by the collection is zero, abort these steps.

  2. If index is not a number greater than or equal to 0 and less than the number of nodes represented by the collection, abort these steps.

  3. Let element be the indexth element in the collection.

  4. Remove element from its parent node.

  1. If the number of nodes represented by the collection is zero, abort these steps.

  2. If index is not a number greater than or equal to 0 and less than the number of nodes represented by the collection, abort these steps.

  3. Let element be the indexth element in the collection.

  4. Remove element from its parent node.

The selectedIndex IDL attribute must act like the identically named attribute on the select element on which the HTMLOptionsCollection is rooted

The selectedIndex IDL attribute must act like the identically named attribute on the select element on which the HTMLOptionsCollection is rooted

2.7.3 DOMStringMap

The DOMStringMap interface represents a set of name-value pairs. It exposes these using the scripting language's native mechanisms for property access.

The DOMStringMap interface represents a set of name-value pairs. It exposes these using the scripting language's native mechanisms for property access.

When a DOMStringMap object is instantiated, it is associated with three algorithms, one for getting the list of name-value pairs, one for setting names to certain values, and one for deleting names.

When a DOMStringMap object is instantiated, it is associated with three algorithms, one for getting the list of name-value pairs, one for setting names to certain values, and one for deleting names.

[OverrideBuiltins]
interface DOMStringMap {
	getter DOMString (DOMString name);
	setter creator void (DOMString name, DOMString value);
	deleter void (DOMString name);
};
[OverrideBuiltins]
interface DOMStringMap {
	getter DOMString (DOMString name);
	setter creator void (DOMString name, DOMString value);
	deleter void (DOMString name);
};

The supported property names on a DOMStringMap object at any instant are the names of each pair returned from the algorithm for getting the list of name-value pairs at that instant, in the order returned.

The supported property names on a DOMStringMap object at any instant are the names of each pair returned from the algorithm for getting the list of name-value pairs at that instant, in the order returned.

To determine the value of a named property name in a DOMStringMap, the user agent must return the value component of the name-value pair whose name component is name in the list returned by the algorithm for getting the list of name-value pairs.

To determine the value of a named property name in a DOMStringMap, the user agent must return the value component of the name-value pair whose name component is name in the list returned by the algorithm for getting the list of name-value pairs.

To set the value of a new or existing named property name to value value, the algorithm for setting names to certain values must be run, passing name as the name and the result of converting value to a DOMString as the value.

To set the value of a new or existing named property name to value value, the algorithm for setting names to certain values must be run, passing name as the name and the result of converting value to a DOMString as the value.

To delete an existing named property name, the algorithm for deleting names must be run, passing name as the name.

To delete an existing named property name, the algorithm for deleting names must be run, passing name as the name.

The DOMStringMap interface definition here is only intended for JavaScript environments. Other language bindings will need to define how DOMStringMap is to be implemented for those languages.

The DOMStringMap interface definition here is only intended for JavaScript environments. Other language bindings will need to define how DOMStringMap is to be implemented for those languages.

The dataset attribute on elements exposes the data-* attributes on the element.

The dataset attribute on elements exposes the data-* attributes on the element.

Given the following fragment and elements with similar constructions:

Given the following fragment and elements with similar constructions:

<img class="tower" id="tower5" data-x="12" data-y="5"
	 data-ai="robotarget" data-hp="46" data-ability="flames"
	 src="towers/rocket.png alt="Rocket Tower">
<img class="tower" id="tower5" data-x="12" data-y="5"
	 data-ai="robotarget" data-hp="46" data-ability="flames"
	 src="towers/rocket.png alt="Rocket Tower">

...one could imagine a function splashDamage() that takes some arguments, the first of which is the element to process:

...one could imagine a function splashDamage() that takes some arguments, the first of which is the element to process:

function splashDamage(node, x, y, damage) {
	if (node.classList.contains('tower') && // checking the 'class' attribute
			node.dataset.x == x && // reading the 'data-x' attribute
			node.dataset.y == y) { // reading the 'data-y' attribute
		var hp = parseInt(node.dataset.hp); // reading the 'data-hp' attribute
		hp = hp - damage;
		if (hp < 0) {
			hp = 0;
			node.dataset.ai = 'dead'; // setting the 'data-ai' attribute
			delete node.dataset.ability; // removing the 'data-ability' attribute
		}
		node.dataset.hp = hp; // setting the 'data-hp' attribute
	}
}
function splashDamage(node, x, y, damage) {
	if (node.classList.contains('tower') && // checking the 'class' attribute
			node.dataset.x == x && // reading the 'data-x' attribute
			node.dataset.y == y) { // reading the 'data-y' attribute
		var hp = parseInt(node.dataset.hp); // reading the 'data-hp' attribute
		hp = hp - damage;
		if (hp < 0) {
			hp = 0;
			node.dataset.ai = 'dead'; // setting the 'data-ai' attribute
			delete node.dataset.ability; // removing the 'data-ability' attribute
		}
		node.dataset.hp = hp; // setting the 'data-hp' attribute
	}
}

2.7.4 Transferable objects

Some objects support being copied and closed in one operation. This is called transferring the object, and is used in particular to transfer ownership of unsharable or expensive resources across worker boundaries.

Some objects support being copied and closed in one operation. This is called transferring the object, and is used in particular to transfer ownership of unsharable or expensive resources across worker boundaries.

The following Transferable types exist:

The following Transferable types exist:

The following IDL block formalizes this:

The following IDL block formalizes this:

[NoInterfaceObject]
interface Transferable { };
ArrayBuffer implements Transferable;
MessagePort implements Transferable;
[NoInterfaceObject]
interface Transferable { };
ArrayBuffer implements Transferable;
MessagePort implements Transferable;

To transfer a Transferable object to a new owner, the user agent must run the steps defined for the type of object in question. The steps will return a new object of the same type, and will permanently neuter the original object. (This is an irreversible and non-idempotent operation; once an object has been transferred, it cannot be transferred, or indeed used, again.)

To transfer a Transferable object to a new owner, the user agent must run the steps defined for the type of object in question. The steps will return a new object of the same type, and will permanently neuter the original object. (This is an irreversible and non-idempotent operation; once an object has been transferred, it cannot be transferred, or indeed used, again.)

To transfer an ArrayBuffer object old to a new owner owner, a user agent must create a new ArrayBuffer object pointing at the same underlying data as old, thus obtaining new, must neuter the old object, and must finally return new. [TYPEDARRAY]

To transfer an ArrayBuffer object old to a new owner owner, a user agent must create a new ArrayBuffer object pointing at the same underlying data as old, thus obtaining new, must neuter the old object, and must finally return new. [TYPEDARRAY]

Rules for how to transfer a MessagePort object are given in the relevant sections of this specification.

Rules for how to transfer a MessagePort object are given in the relevant sections of this specification.

2.7.5 Safe passing of structured data

When a user agent is required to obtain a structured clone of a value, optionally with a transfer map, it must run the following algorithm, which either returns a separate value, or throws an exception. If a transfer map is provided, it consists of an association list of Transferable objects to placeholder objects.

When a user agent is required to obtain a structured clone of a value, optionally with a transfer map, it must run the following algorithm, which either returns a separate value, or throws an exception. If a transfer map is provided, it consists of an association list of Transferable objects to placeholder objects.

  1. Let input be the value being cloned.

  2. Let transfer map be the transfer map passed to the algorithm, if any, or the empty list otherwise.

  3. Let memory be an association list of pairs of objects, initially empty. This is used to handle duplicate references. In each pair of objects, one is called the source object and the other the destination object.

  4. For each mapping in transfer map, add a mapping from the Transferable object (the source object) to the placeholder object (the destination object) to memory.

  5. Let output be the value resulting from calling the internal structured cloning algorithm with input as the "input" argument, and memory as the "memory" argument.

  6. Return output.

  1. Let input be the value being cloned.

  2. Let transfer map be the transfer map passed to the algorithm, if any, or the empty list otherwise.

  3. Let memory be an association list of pairs of objects, initially empty. This is used to handle duplicate references. In each pair of objects, one is called the source object and the other the destination object.

  4. For each mapping in transfer map, add a mapping from the Transferable object (the source object) to the placeholder object (the destination object) to memory.

  5. Let output be the value resulting from calling the internal structured cloning algorithm with input as the "input" argument, and memory as the "memory" argument.

  6. Return output.

The internal structured cloning algorithm is always called with two arguments, input and memory, and its behavior is as follows:

The internal structured cloning algorithm is always called with two arguments, input and memory, and its behavior is as follows:

  1. If input is the source object of a pair of objects in memory, then return the destination object in that pair of objects and abort these steps.

  2. If input is a primitive value, then return that value and abort these steps.

  3. Let deep clone be none.

  4. The input value is an object. Jump to the appropriate step below:

    If input is a Boolean object

    Let output be a newly constructed Boolean object with the same value as input.

    If input is a Number object

    Let output be a newly constructed Number object with the same value as input.

    If input is a String object

    Let output be a newly constructed String object with the same value as input.

    If input is a Date object

    Let output be a newly constructed Date object with the same value as input.

    If input is a RegExp object

    Let output be a newly constructed RegExp object with the same pattern and flags as input.

    The value of the lastIndex property is not copied.

    If input is a Blob object

    If input has been disabled through the close() method, throw a DataCloneError exception and abort the overall structured clone algorithm. Otherwise, let output be a newly constructed object of the same class as input, corresponding to the same underlying data.

    If input is a FileList object

    Let output be a newly constructed FileList object containing a list of newly constructed File objects corresponding to the same underlying data as those in input, maintaining their relative order.

    If input is an ImageData object

    Let output be a newly constructed ImageData object whose width, height, and resolution attributes have values equal to the corresponding attributes on input, and whose data attribute has the value obtained from invoking the internal structured cloning algorithm recursively with the value of the data attribute on input as the new "input" argument and memory as the new "memory" argument.

    If input is an ArrayBuffer object

    If input has been neutered, throw a DataCloneError exception and abort the overall structured clone algorithm. Otherwise, let output be a newly constructed ArrayBuffer object whose contents are a copy of input's contents, with the same length.

    If input is an ArrayBufferView object

    Let output be a newly constructed object of the same class as input, with each IDL attribute defined for that class being set to the value obtained from invoking the internal structured cloning algorithm recursively with the value of the attribute on input as the new "input" argument and memory as the new "memory" argument.

    Only IDL attributes defined on the class (including the ArrayBufferView attributes) are cloned. Properties added by a script, for example, are not cloned.

    If input is an Array object

    Let output be a newly constructed empty Array object whose length is equal to the length of input, and set deep clone to own.

    This means that the length of sparse arrays is preserved.

    If input is an Object object

    Let output be a newly constructed empty Object object, and set deep clone to own.

    If input is a Map object

    Let output be a newly constructed empty Map object, and set deep clone to map.

    If input is a Set object

    Let output be a newly constructed empty Set object, and set deep clone to set.

    If input is an object that another specification defines how to clone

    Let output be a clone of the object as defined by the other specification.

    If input is another native object type (e.g. Error, Function)
    If input is a host object (e.g. a DOM node)

    Throw a DataCloneError exception and abort the overall structured clone algorithm.

    For the purposes of the algorithm above, an object is a particular type of object class if its [[Class]] internal property is equal to class.

    For example, "input is an Object object" if input's [[Class]] internal property is equal to the string "Object".

  5. Add a mapping from input (the source object) to output (the destination object) to memory.

  6. If deep clone is set to map, then run these substeps. These substeps use the terminology and typographic conventions used in the JavaScript specification's definition of Maps. [ECMA262]

    1. Let source be the List that is the value of input's [[MapData]] internal slot, if any. If there is no such slot, then instead throw a DataCloneError exception and abort the overall structured clone algorithm. [ECMA262]

    2. Let target be the List that is the value of output's [[MapData]] internal slot.

    3. For each Record {[[key]], [[value]]} entry that is an element of source, run the following substeps:

      1. Let key have the value obtained from invoking the internal structured cloning algorithm recursively with entry.[[key]] as the new "input" argument and memory as the new "memory" argument.

      2. Let value have the value obtained from invoking the internal structured cloning algorithm recursively with entry.[[value]] as the new "input" argument and memory as the new "memory" argument.

      3. Let new entry be the Record {[[key]]: key, [[value]]: value}.

      4. Append new entry as the last element of target.

    4. Set deep clone to own.

  7. If deep clone is set to set, then run these substeps. These substeps use the terminology and typographic conventions used in the JavaScript specification's definition of Sets. [ECMA262]

    1. Let source be the List that is the value of input's [[SetData]] internal slot, if any. If there is no such slot, then instead throw a DataCloneError exception and abort the overall structured clone algorithm. [ECMA262]

    2. Let target be the List that is the value of output's [[SetData]] internal slot.

    3. For each entry that is an element of source that is not empty, run the following substeps:

      1. Let new entry have the value obtained from invoking the internal structured cloning algorithm recursively with entry as the new "input" argument and memory as the new "memory" argument.

      2. Append new entry as the last element of target.

    4. Set deep clone to own.

  8. If deep clone is set to own, then, for each enumerable own property in input, run the following steps:

    1. Let name be the name of the property.

    2. Let source value be the result of calling the [[Get]] internal method of input with the argument name. If the [[Get]] internal method of a property involved executing script, and that script threw an uncaught exception, then abort the overall structured clone algorithm, with that exception being passed through to the caller.

    3. Let cloned value be the result of invoking the internal structured cloning algorithm recursively with source value as the "input" argument and memory as the "memory" argument. If this results in an exception, then abort the overall structured clone algorithm, with that exception being passed through to the caller.

    4. Add a new property to output having the name name, and having the value cloned value.

    The order of the properties in the input and output objects must be the same, and any properties whose [[Get]] internal method involves running script must be processed in that same order.

    This does not walk the prototype chain.

    Property descriptors, setters, getters, and analogous features are not copied in this process. For example, the property in the input could be marked as read-only, but in the output it would just have the default state (typically read-write, though that could depend on the scripting environment).

    Properties of Array objects are not treated any differently than those of other Objects. In particular, this means that non-index properties of arrays are copied as well.

  9. Return output.

  1. If input is the source object of a pair of objects in memory, then return the destination object in that pair of objects and abort these steps.

  2. If input is a primitive value, then return that value and abort these steps.

  3. Let deep clone be none.

  4. The input value is an object. Jump to the appropriate step below:

    If input is a Boolean object

    Let output be a newly constructed Boolean object with the same value as input.

    If input is a Number object

    Let output be a newly constructed Number object with the same value as input.

    If input is a String object

    Let output be a newly constructed String object with the same value as input.

    If input is a Date object

    Let output be a newly constructed Date object with the same value as input.

    If input is a RegExp object

    Let output be a newly constructed RegExp object with the same pattern and flags as input.

    The value of the lastIndex property is not copied.

    If input is a Blob object

    If input has been disabled through the close() method, throw a DataCloneError exception and abort the overall structured clone algorithm. Otherwise, let output be a newly constructed object of the same class as input, corresponding to the same underlying data.

    If input is a FileList object

    Let output be a newly constructed FileList object containing a list of newly constructed File objects corresponding to the same underlying data as those in input, maintaining their relative order.

    If input is an ImageData object

    Let output be a newly constructed ImageData object whose width, height, and resolution attributes have values equal to the corresponding attributes on input, and whose data attribute has the value obtained from invoking the internal structured cloning algorithm recursively with the value of the data attribute on input as the new "input" argument and memory as the new "memory" argument.

    If input is an ArrayBuffer object

    If input has been neutered, throw a DataCloneError exception and abort the overall structured clone algorithm. Otherwise, let output be a newly constructed ArrayBuffer object whose contents are a copy of input's contents, with the same length.

    If input is an ArrayBufferView object

    Let output be a newly constructed object of the same class as input, with each IDL attribute defined for that class being set to the value obtained from invoking the internal structured cloning algorithm recursively with the value of the attribute on input as the new "input" argument and memory as the new "memory" argument.

    Only IDL attributes defined on the class (including the ArrayBufferView attributes) are cloned. Properties added by a script, for example, are not cloned.

    If input is an Array object

    Let output be a newly constructed empty Array object whose length is equal to the length of input, and set deep clone to own.

    This means that the length of sparse arrays is preserved.

    If input is an Object object

    Let output be a newly constructed empty Object object, and set deep clone to own.

    If input is a Map object

    Let output be a newly constructed empty Map object, and set deep clone to map.

    If input is a Set object

    Let output be a newly constructed empty Set object, and set deep clone to set.

    If input is an object that another specification defines how to clone

    Let output be a clone of the object as defined by the other specification.

    If input is another native object type (e.g. Error, Function)
    If input is a host object (e.g. a DOM node)

    Throw a DataCloneError exception and abort the overall structured clone algorithm.

    For the purposes of the algorithm above, an object is a particular type of object class if its [[Class]] internal property is equal to class.

    For example, "input is an Object object" if input's [[Class]] internal property is equal to the string "Object".

  5. Add a mapping from input (the source object) to output (the destination object) to memory.

  6. If deep clone is set to map, then run these substeps. These substeps use the terminology and typographic conventions used in the JavaScript specification's definition of Maps. [ECMA262]

    1. Let source be the List that is the value of input's [[MapData]] internal slot, if any. If there is no such slot, then instead throw a DataCloneError exception and abort the overall structured clone algorithm. [ECMA262]

    2. Let target be the List that is the value of output's [[MapData]] internal slot.

    3. For each Record {[[key]], [[value]]} entry that is an element of source, run the following substeps:

      1. Let key have the value obtained from invoking the internal structured cloning algorithm recursively with entry.[[key]] as the new "input" argument and memory as the new "memory" argument.

      2. Let value have the value obtained from invoking the internal structured cloning algorithm recursively with entry.[[value]] as the new "input" argument and memory as the new "memory" argument.

      3. Let new entry be the Record {[[key]]: key, [[value]]: value}.

      4. Append new entry as the last element of target.

    4. Set deep clone to own.

  7. If deep clone is set to set, then run these substeps. These substeps use the terminology and typographic conventions used in the JavaScript specification's definition of Sets. [ECMA262]

    1. Let source be the List that is the value of input's [[SetData]] internal slot, if any. If there is no such slot, then instead throw a DataCloneError exception and abort the overall structured clone algorithm. [ECMA262]

    2. Let target be the List that is the value of output's [[SetData]] internal slot.

    3. For each entry that is an element of source that is not empty, run the following substeps:

      1. Let new entry have the value obtained from invoking the internal structured cloning algorithm recursively with entry as the new "input" argument and memory as the new "memory" argument.

      2. Append new entry as the last element of target.

    4. Set deep clone to own.

  8. If deep clone is set to own, then, for each enumerable own property in input, run the following steps:

    1. Let name be the name of the property.

    2. Let source value be the result of calling the [[Get]] internal method of input with the argument name. If the [[Get]] internal method of a property involved executing script, and that script threw an uncaught exception, then abort the overall structured clone algorithm, with that exception being passed through to the caller.

    3. Let cloned value be the result of invoking the internal structured cloning algorithm recursively with source value as the "input" argument and memory as the "memory" argument. If this results in an exception, then abort the overall structured clone algorithm, with that exception being passed through to the caller.

    4. Add a new property to output having the name name, and having the value cloned value.

    The order of the properties in the input and output objects must be the same, and any properties whose [[Get]] internal method involves running script must be processed in that same order.

    This does not walk the prototype chain.

    Property descriptors, setters, getters, and analogous features are not copied in this process. For example, the property in the input could be marked as read-only, but in the output it would just have the default state (typically read-write, though that could depend on the scripting environment).

    Properties of Array objects are not treated any differently than those of other Objects. In particular, this means that non-index properties of arrays are copied as well.

  9. Return output.

This algorithm preserves cycles and preserves the identity of duplicate objects in graphs.

This algorithm preserves cycles and preserves the identity of duplicate objects in graphs.

2.7.6 Callbacks

Der folgende Typ einer Callback-Funktion wird in mehreren APIs verwendet, die mit Dateiobjekten interagieren:

The following callback function type is used in various APIs that interact with File objects:

callback FileCallback = void (Datei*** file);
callback FileCallback = void (File file);

2.7.7 Garbage collection

There is an implied strong reference from any IDL attribute that returns a pre-existing object to that object.

There is an implied strong reference from any IDL attribute that returns a pre-existing object to that object.

For example, the document.location attribute means that there is a strong reference from a Document object to its Location object. Similarly, there is always a strong reference from a Document to any descendant nodes, and from any node to its owner Document.

For example, the document.location attribute means that there is a strong reference from a Document object to its Location object. Similarly, there is always a strong reference from a Document to any descendant nodes, and from any node to its owner Document.

2.8 Namensräume

Der HTML-Namensraum ist: http://www.w3.org/1999/xhtml

Der MathML-Namensraum ist: http://www.w3.org/1998/Math/MathML

Der SVG-Namensraum ist: http://www.w3.org/2000/svg

Der XLink-Namensraum ist: http://www.w3.org/1999/xlink

Der XML-Namensraum ist: http://www.w3.org/XML/1998/namespace

Der XMLNS-Namensraum ist: http://www.w3.org/2000/xmlns/


Tools zur Datensammlung und andere Benutzerprogramme, die Operationen an Inhalten vollziehen ohne Skripte zu verwenden, CSS oder XPath-Ausdrücke zu evaluieren oder ansonsten den erhaltenen DOM beliebigen Inhalten aussetzen, könnten "Namensräume unterstützen", allein durch die Annahme, dass ihre DOM-Knotenanalogien in bestimmten Namensräumen sind, ohne wirklich die oben genannte Zeichenkette zu offenbaren.***

Data mining tools and other user agents that perform operations on content without running scripts, evaluating CSS or XPath expressions, or otherwise exposing the resulting DOM to arbitrary content, may "support namespaces" by just asserting that their DOM node analogues are in certain namespaces, without actually exposing the above strings.


In der HTML-Syntax haben Namensraumpräfixe und Namensrausdeklarationen nicht die gleiche Auswirkung wie in XML. Zum Beispiel hat der Doppelpunkt in HTML-Elementen keine besondere Bedeutung.

In the HTML syntax, namespace prefixes and namespace declarations do not have the same effect as in XML. For instance, the colon has no special meaning in HTML element names.