【この訳に特有な表記規約】
◎表記記号加えて,この訳では:
- 原文にて(すでに退役した) `HTML5$r による定義を参照している用語は、 便宜のため,現行の `HTML$r ( WHATWG )(の和訳)を参照している。
- 同様に,原文による各種~nsの定義は、 WHATWG Infra への参照に代えている( `~XMLNS~ns$など)。
- この仕様が課す要件の対象は,常に~UAなので、 “~UA” は省略する。
- 原文の~IDL属性を通して述べられている箇所の多くは、 当の~IDL属性が表現する下層~modelの用語で述べる (例:要素の `namespaceURI$m → 要素の`~ns$eL)。
勧告候補からの昇格基準
【この節の内容の和訳は省略する。】 ◎ This specification will not advance to Proposed Recommendation before the spec's test suite is completed and two or more independent implementations pass each test, although no single implementation must pass each test. We expect to meet this criteria no sooner than 24 October 2014. The group will also create an Implementation Report.
1. 序論
文書~obj~model(~DOM)は、 それぞれが~treeに接続されている各種~型の`~node$たちが成す,~memory内~表現である。 ~DOMとその`~node$のより深い詳細は `HTML5$r / `DOM4$r 仕様に述べられる。 ◎ A document object model (DOM) is an in-memory representation of various types of Nodes where each Node is connected in a tree. The [HTML5] and [DOM4] specifications describe DOM and its Nodes is greater detail.
用語[ `構文解析@ は, ~DOMの文字列~表現を実際の~DOMへ変換するとき/ `直列化-@ は,~DOMを文字列へ変形して戻すとき ]に利用される用語である。 この仕様~自身は、 ~DOMを[ 構文解析する/直列化する ]ための各種~APIを定義することを扱う。 ◎ Parsing is the term used for converting a string representation of a DOM into an actual DOM, and Serializing is the term used to transform a DOM back into a string. This specification concerns itself with defining various APIs for both parsing and serializing a DOM.
例えば `innerHTML$m ~APIは、[ ~DOMを直列化する/~DOMに構文解析する ]共通的な仕方を与える (それは、この両方とも行える)。 特定0の`~node$の~memory内~DOMが次であったとする: ◎ For example: the innerHTML API is a common way to both parse and serialize a DOM (it does both). If a particular Node, has the following in-memory DOM:
- `HTMLDivElement^I ( `nodeName^m ~EQ `div^l )
- `HTMLSpanElement^I ( `nodeName^m ~EQ `span^l)
- `Text^I ( `data^m ~EQ `ある^l )
- `HTMLElement^I ( `nodeName^m ~EQ `em^l )
- `Text^I ( `data^m ~EQ `文章。^l )
- `HTMLSpanElement^I ( `nodeName^m ~EQ `span^l)
HTMLDivElement (nodeName: `div^l)
┃
┣━ HTMLSpanElement (nodeName: `span^l)
┃ ┃
┃ ┗━ Text (data: `some ^l)
┃
┗━ HTMLElement (nodeName: `em^l)
┃
┗━ Text (data: `text!^l)
`HTMLDivElement^I ~nodeの子たちを直列化するためには、 単純に`要素$の `innerHTML$m ~propを取得する(読取る) (これは、直列化を誘発する): ◎ And the HTMLDivElement node is stored in a variable myDiv, then to serialize myDiv's children simply get (read) the Element's innerHTML property (this triggers the serialization):
var %myDiv = /* `HTMLDivElement^I ~node */ var %serializedChildren = %myDiv.innerHTML; /* 結果は `<span>ある</span><em>文章。</em>^l になる。 ◎ serializedChildren has the value: "<span>some </span><em>text!</em>"
文字列から %myDiv 用の(その既存の子たちを置換して)新たな子を構文解析するためには、 単純に `innerHTML$m ~propを設定する (これは、 アテガわれた文字列の構文解析を誘発する): ◎ To parse new children for myDiv from a string (replacing its existing children), simply set the innerHTML property (this triggers parsing of the assigned string):
%myDiv.innerHTML = `<span>new</span><em>children!</em>^l;
[ ~HTML / ~XML( ~XHTMLは~XMLの一種である) ]における[ `構文解析$, `直列化-$ ]は、 各自の~markup言語の規則に従う。 上の例は,~HTMLの[ 構文解析/直列化 ]を示しているが、 それらに特有な~algoは `HTML5$r 仕様に定義される。 この仕様は、 ~XMLを直列化するための~algoを与える。 ~XMLを構文解析するための文法は、 `XML10$r 仕様に述べられる。 ◎ This specification describes two flavors of parsing and serializing: HTML and XML (with XHTML being a type of XML). Each follows the rules of its respective markup language. The above example shows HTML parsing and serialization. The specific algorithms for HTML parsing and serializing are defined in the [HTML5] specification. This specification contains the algorithm for XML serializing. The grammar for XML parsing is described in the [XML10] specification.
`往復-@ するとは、 ~DOMを直列化した結果の文字列を,即~構文解析して~DOMに戻す 【または、そうしたときに元と同じに保たれる】 ことを意味する。 理想的には、 この処理-による結果の~DOM内のどの`~node$においても,その属性の~dataは失われることなく同一性が保たれるべきである。 が,~XMLにおいて`往復-$することは、 直列化しても`~node$の~nsの同一性が保全されるよう配慮しなければナラナイ点で, とりわけ込み入っている (他方、 ~HTMLにおいては,~nsは無視される)。 ◎ Round-tripping a DOM means to serialize and then immediately parse the serialized string back into a DOM. Ideally, this process does not result in any data loss with respect to the identity and attributes of the Node in the DOM. Round-tripping is especially tricky for an XML serialization, which must be concerned with preserving the Node's namespace identity in the serialization (wereas namespaces are ignored in HTML).
次の~memory内~DOMに対する~XML直列化を考える: ◎ Consider the XML serialization of the following in-memory DOM:
- `Element^I ( `nodeName^m ~EQ `root^l )
- `HTMLScriptElement^I ( `nodeName^m ~EQ `script^l)
- `Text^I ( `data^m ~EQ `alert('hello world') ^l )
- `HTMLScriptElement^I ( `nodeName^m ~EQ `script^l)
Element (nodeName: "root")
┃
┗━ HTMLScriptElement (nodeName: "script")
┃
┗━ Text (data: "alert('hello world')")
`script^e 要素の同一性を保全するため、 ~XML直列化は, `HTMLScriptElement^I `~node$の `文脈~ns$V を含むこと,および 直列化された文字列は、 ~XML構文解析器を通して`往復-$することを許容しなければナラナイ。 上の `root^l 要素が,次の変数 %root にあてがわれるとするとき: ◎ An XML serialization must include the HTMLScriptElement Node's namespace in order to preserve the identity of the script element, and to allow the serialized string to round-trip through an XML parser. Assuming that root is in a variable named root:
var %root = /* `root^l `Element^I */
var %xmlSerialization = `new XMLSerializer()$m.`serializeToString(root)$m;
その結果は、 次のようになる: `<root><script xmlns="http://www.w3.org/1999/xhtml">alert('hello world')</script></root>^l ◎ /* xmlSerialization has the value: "<root><script xmlns="http://www.w3.org/1999/xhtml">alert('hello world')</script></root>" */
用語 文脈~objは…。 以下に挙げる~nsは…。 【以下、`この節を成す内容の和訳は省略する@#_conventions$。】 ◎ The term context object means the object on which the API being discussed was called. ◎ The following terms are understood to represent their respective namespaces in this specification (and makes it easier to read): ◎ The HTML namespace is http://www.w3.org/1999/xhtml ◎ The XML namespace is http://www.w3.org/XML/1998/namespace ◎ The XMLNS namespace is http://www.w3.org/2000/xmlns/
2. ~DOMを構文解析する/直列化するための~API
2.1. `DOMParser^I ~interface
`DOMParser^I の定義は、 `~HTML標準@~HTMLdynamic#domparser$へ移動された。 ◎ The definition of DOMParser has moved to the HTML Standard.
2.2. `XMLSerializer^I ~interface
[`Exposed$=Window] interface `XMLSerializer@I { `constructor@#dom-xmlserializer-constructor$(); `DOMString$ `serializeToString$m(`Node$I %root); };
- %xmlserializer = `new XMLSerializer()$m
- 新たな `XMLSerializer$I ~objを構築する。 ◎ Constructs a new XMLSerializer object.
- %string = %xmlserializer . `serializeToString(root)$m
- ~XML直列化を利用して, %root を文字列に直列化する。 ◎ Serializes root into a string using an XML serialization.\
- %root は[ `Node$I / `Attr$I ]~objでない場合、 `TypeError$E 例外が投出される。 ◎ Throws a TypeError exception if root is not a Node or an Attr object.
2.3. `InnerHTML^I ~mixin
`InnerHTML^I 【~mixinは除去され,その `innerHTML^m 】の定義は、 `~HTML標準@~HTMLdynamic#the-innerhtml-property$へ移動された。 ◎ The definition of InnerHTML has moved to the HTML Standard.
2.4. `Element^I ~interfaceに対する拡張
`outerHTML^m の定義は、 `~HTML標準@~HTMLdynamic#the-outerhtml-property$へ移動された。 ◎ The definition of outerHTML has moved to the HTML Standard.
`insertAdjacentHTML^m の定義は、 `~HTML標準@~HTMLdynamic#the-insertadjacenthtml()-method$へ移動された。 ◎ The definition of insertAdjacentHTML has moved to the HTML Standard.
2.5. `Range^I ~interfaceに対する拡張
`createContextualFragment^m の定義は、 `~HTML標準@~HTMLdynamic#the-createcontextualfragment()-method$へ移動された。 ◎ The definition of createContextualFragment has moved to the HTML Standard.
3. 素片~用の構文解析-法と直列化-法
3.1. 構文解析-法
素片を構文解析する~algoの定義は、 `~HTML標準@~HTMLdynamic#fragment-parsing-algorithm-steps$へ移動された。 ◎ The definition of fragment parsing algorithm has moved to the HTML Standard.
3.2. 直列化-法
素片に直列化する~algoの定義は、 `~HTML標準@~HTMLdynamic#fragment-serializing-algorithm-steps$へ移動された。 ◎ The definition of fragment serializing algorithm has moved to the HTML Standard.
4. ~XML直列化
【 この節は,原文では § 3.2 の下位節として与えられているが、 この訳では独立な節に分離する。 この節が、 この仕様が定義する~modelの主要な部分を成すので。 】
`~XML直列化$は、 次に挙げる仕方において,~HTML直列化から相違する: ◎ An XML serialization differs from an HTML serialization in the following ways:
- [ `要素$ / `属性~list$ ]を直列化するときは、 その[ `~ns$eL / `~ns$A ]は,常に保全される。 このことは、 一部の事例では,それらの既存の[ ~ns接頭辞 / 接頭辞~宣言を与える属性 / 既定の~ns宣言を与える属性 ]は、[ 落とされたり, 代用されたり, 変更される ]こともあることを意味する。 ~HTML直列化は、 ~nsを保全しようとは試みない。 ◎ Elements and attributes will always be serialized such that their namespaceURI is preserved. In some cases this means that an existing prefix, prefix declaration attribute or default namespace declaration attribute might be dropped, substituted or changed. An HTML serialization does not attempt to preserve the namespaceURI.
- `~HTML~ns$に属さない`要素$のうち,`子$を包含していないものは、 `空~要素~tag$構文を利用して(すなわち,~XML `EmptyElemTag$P 生成規則に則って)直列化される。 ◎ Elements not in the HTML namespace containing no children, are serialized using the empty-element tag syntax (i.e., according to the XML EmptyElemTag production).
他の点では、 `~XML直列化$を生産する~algoは,`~HTML構文解析器$と互換な直列化を生産するよう設計されている。 例えば,`~HTML~ns$に属する要素のうち`子$を包含しないものは、 `空~要素~tag$構文を利用することなく,明示的な[ 開始~tag, 終了~tag ]を伴って直列化される。 ◎ Otherwise, the algorithm for producing an XML serialization is designed to produce a serialization that is compatible with the HTML parser. For example, elements in the HTML namespace that contain no child nodes are serialized with an explicit begin and end tag rather than using the empty-element tag syntax.
注記: `DOM4$r により, `Attr$I ~objは `Node$I を継承しない†ので、 ~nodeを`~XMLに直列化する$ことでは直列化できず, そうしようと試みた場合の結果は空~文字列になる。 【†この記述は,今や~~正しくないが、いずれにせよそうなるであろう。】 ◎ Note Per [DOM4], Attr objects do not inherit from Node, and thus cannot be serialized by the XML serialization algorithm. An attempt to serialize an Attr object will result in an empty string.
`~XML直列化@ を生産する手続きは、 所与の ( 直列化する`~node$ %~node, 真偽値 `整形式が要求されるか@V ) に対し,以下を走らす — この手続きにおいては: ◎ To produce an XML serialization of a Node node given a flag require well-formed, run the following steps:
- `整形式が要求されるか$V ~EQ ~T の下では、 結果が[ 整形式にならない/合法に往復できない ]ときには,例外が投出される。 この~flagは、[ この~algoの文脈~下で呼出される,この節に定義される各種~algo ]すべてから参照され, 変化しない。 ◎ ↓↓
-
この手続きが呼出す[ 各種 `型の~nodeを~XMLに直列化する$ ]手続きには、 現在の既定の~nsを追跡する, `文脈~ns@V が(値~渡しで)渡される。 これは、 初期~時には ~NULL (~nsなしを表す)であり,次が生じたときに変更される: ◎ Let namespace be a context namespace with value null. The context namespace tracks the XML serialization algorithm's current default namespace. The context namespace is changed when either\
- 出くわした`要素$が既定の~ns宣言を有するとき ◎ an Element Node has a default namespace declaration, or\
- ~algoが、 出くわした`要素$の自前の~nsに合致する既定の~ns宣言を生成するとき ◎ the algorithm generates a default namespace declaration for the Element Node to match its own namespace. The algorithm assumes no namespace (null) to start.
- `接頭辞~map$V ~LET 新たな`~ns接頭辞~map$ ◎ Let prefix map be a new namespace prefix map.
- `接頭辞~mapに追加する$( `接頭辞~map$V, `xml^l, `~XML~ns$ ) ◎ Add the XML namespace with prefix value "xml" to prefix map.
-
`接頭辞~index@V ~LET 1 ◎ Let prefix index be a generated namespace prefix index with value 1.\
これは、[ %~node の`~ns$eL(または %~node の属性の`~ns$A )を直列化するときに, 相応しい既存の~ns接頭辞が可用でない ]ときに,新たな, かつ一意な`接頭辞を生成する$ために利用され、 この~algoによる直列化~文脈~全体にわたり共有される。 ◎ The generated namespace prefix index is used to generate a new unique prefix value when no suitable existing namespace prefix is available to serialize a node's namespaceURI (or the namespaceURI of one of node's attributes). See the generate a prefix algorithm.
-
~RET %~node を`~XMLに直列化する$( ~NULL, `接頭辞~map$V )
この段で `TypeError$E でない【!*】 例外が投出されたときは、 ~catchして ⇒ ~THROW `InvalidStateError$E
◎ Return the result of running the XML serialization algorithm on node passing the context namespace namespace, namespace prefix map prefix map, generated namespace prefix index reference to prefix index, and the flag require well-formed. If an exception occurs during the execution of the algorithm, then catch that exception and throw an "InvalidStateError" DOMException.
所与の `型の~nodeを~XMLに直列化する@ ための各種~algoは、 直列化する入力 %~node に加え,次の引数をとるように定義される: ◎ Each of the following algorithms for producing an XML serialization of a DOM node take as input a node to serialize and the following arguments:
- `文脈~ns$V ◎ A context namespace namespace
- `接頭辞~map@V — `~ns接頭辞~map$ ◎ A namespace prefix map prefix map ◎ ↑↑A generated namespace prefix index prefix index ◎ ↑↑The require well-formed flag
%~node を `~XMLに直列化する@ ときは、[ %~node の~interface型に応じて,次に与える ある`型の~nodeを~XMLに直列化する$~algo ]に,受取った引数たちをそのまま渡して走らせた結果を返す: ◎ The XML serialization algorithm produces an XML serialization of an arbitrary DOM node node based on the node's interface type. Each referenced algorithm is to be passed the arguments as they were recieved by the caller and return their result to the caller. Re-throw any exceptions. If node's interface is:
- `Element$I
- `Element^I ~nodeを`~XMLに直列化する@#xml-serializing-an-element-node$ ◎ Run the algorithm for XML serializing an Element node node.
- `Document$I
- `Document^I ~nodeを`~XMLに直列化する@#xml-serializing-a-document-node$ ◎ Run the algorithm for XML serializing a Document node node.
- `Comment$I
- `Comment^I ~nodeを`~XMLに直列化する@#xml-serializing-a-comment-node$ ◎ Run the algorithm for XML serializing a Comment node node.
- `Text$I
- `Text^I ~nodeを`~XMLに直列化する@#xml-serializing-a-text-node$ ◎ Run the algorithm for XML serializing a Text node node.
- `DocumentFragment$I
- `DocumentFragment^I ~nodeを`~XMLに直列化する@#xml-serializing-a-documentfragment-node$ ◎ Run the algorithm for XML serializing a DocumentFragment node node.
- `DocumentType$I
- `DocumentType^I ~nodeを`~XMLに直列化する@#xml-serializing-a-documenttype-node$ ◎ Run the algorithm for XML serializing a DocumentType node node.
- `ProcessingInstruction$I
- `ProcessingInstruction^I ~nodeを`~XMLに直列化する@#xml-serializing-a-processinginstruction-node$ ◎ Run the algorithm for XML serializing a ProcessingInstruction node node.
- `Attr$I ◎ An Attr object
- 次を走らす~algo ⇒ ~RET 空~文字列 ◎ Return an empty string.
- その他 ◎ Anything else
- 次を走らす~algo ⇒ ~THROW `TypeError$E ◎ Throw a TypeError.\
- (この~algoが直列化できるのは `Node$I / `Attr$I ~objに限られる。) ◎ Only Nodes and Attr objects can be serialized by this algorithm.
上で参照された各~algoの詳細は、 以下の各~下位節に与える。 ◎ Each of the above referenced algorithms are detailed in the sections that follow.
4.1. 要素を~XMLに直列化する
`Element$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type Element is as follows:
【 簡潔にするため、 この~algoの一部には(等価なふるまいになるよう)手を加えている。 】
- %要素 ~LET %~node 【この段は、以下を読み易くするための,この訳による追加(単なる名称変更)。】
- ~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %要素 の`局所~名$eLは、[ `003A^U を包含する ]~OR[ ~XML `Name$P 生成規則に合致しない ]] ⇒ ~THROW 例外 — %要素 の直列化は整形式~要素にならない。 ◎ If the require well-formed flag is set (its value is true), and this node's localName attribute contains the character ":" (U+003A COLON) or does not match the XML Name production, then throw an exception; the serialization of this node would not be a well-formed element. ◎ ↓↓Let markup be the string "<" (U+003C LESS-THAN SIGN). ◎ ↓↓Let qualified name be an empty string. ◎ ↓↓Let skip end tag be a boolean flag with value false. ◎ ↓↓Let ignore namespace definition attribute be a boolean flag with value false. 【! dfn-skip-end-tag 】
- %~map ~LET `~ns接頭辞~mapを複製する$( `接頭辞~map$V ) ◎ Given prefix map, copy a namespace prefix map and let map be the result.
-
`局所~接頭辞~map@V ~LET 新たな空`~map$ — この~mapを成す各~entryは:
- ~ns接頭辞を与える文字列を~keyとする。
- ~nsを与える文字列を値とする。 この値においては、 ~NULL ~nsは空~文字列で表現される。
注記: この~mapは、 要素ごとに局所的であり,次のために利用される:
- ~ns接頭辞~定義を与える属性が必要で,そのために新たな`接頭辞を生成する$べきときに、 他の接頭辞と競合しないことを確保する。
- %要素 の`属性たちを~XMLに直列化する$ときに,重複する接頭辞~定義を飛ばせるようにする。
- `~ns接頭辞~map$内の接頭辞のうち[ %要素 に局所的に定義されるもの, そうでないもの ]を,この~algoが判別できるようにする。
-
`局所的な既定の~ns@V ~LET %要素 の`~ns情報を記録する$( %~map, `局所~接頭辞~map$V ) ◎ Let local default namespace be the result of recording the namespace information for node given map and local prefixes map.
注記: この段は %~map も更新することに加え、 %要素 上に見出された~ns接頭辞~定義を, `局所~接頭辞~map$V に追加する。 `局所的な既定の~ns$V は、 %要素 上に既定の~nsを与える属性が[ 在れば それが定義する~ns / 無ければ ε ]になる。 ◎ Note The above step will update map with any found namespace prefix definitions, add the found prefix definitions to the local prefixes map and return a local default namespace value defined by a default namespace attribute if one exists. Otherwise it returns null.
- `~ns定義~属性は無視するか@V ~LET ~F ◎ ↑↑
- %~ns ~LET %要素 の`~ns$eL ◎ Let inherited ns be a copy of namespace. ◎ Let ns be the value of node's namespaceURI attribute.
- %接頭辞 ~LET %要素 の`~ns接頭辞$eL 【~NULL に設定された場合、接頭辞は直列化されない。】 ◎ ↓
- %~ns宣言~markup ~LET 空~文字列 【これは、接頭辞~宣言/既定の~ns宣言が必要になったとき,他の値に設定される。】 ◎ ↓
-
~IF[ %~ns ~EQ `文脈~ns$V ]: ◎ If inherited ns is equal to ns, then:
- ~IF[ `局所的な既定の~ns$V ~NEQ ε ] ⇒ `~ns定義~属性は無視するか$V ~SET ~T ◎ If local default namespace is not null, then set ignore namespace definition attribute to true.
-
%接頭辞 ~SET[[ %~ns ~EQ `~XML~ns$ ]ならば `xml^l / ~ELSE_ ~NULL ] ◎ If ns is the XML namespace, then append to qualified name the concatenation of the string "xml:" and the value of node's localName. ◎ Otherwise, append to qualified name the value of node's localName. The node's prefix if it exists, is dropped.
注記: `~XML~ns$に属さない場合、 %要素 に`~ns接頭辞$eLが存在しても,落とされる。 ◎ Append the value of qualified name to markup.
-
~ELSE: ◎ Otherwise, inherited ns is not equal to ns (the node's own namespace is different from the context namespace of its parent). Run these sub-steps:
- ~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %接頭辞 ~EQ `xmlns^l ] ⇒ ~THROW 例外 — %要素 は合法に往復しない。 ◎ Let prefix be the value of node's prefix attribute.
-
%候補~接頭辞 ~LET [[ %接頭辞 ~NEQ `xmlns^l ]ならば `選好される接頭辞~文字列を検索取得する$( %~map, %~ns, %接頭辞 ) / ~ELSE_ `xmlns^l ]
注記: %~map の~keyたちに %~ns が無い場合、 ~NULL が返される。
◎ Let candidate prefix be the result of retrieving a preferred prefix string prefix from map given namespace ns. ◎ Note The above may return null if no namespace key ns exists in map. ◎ If the value of prefix matches "xmlns", then run the following steps: • If the require well-formed flag is set, then throw an error. An Element with prefix "xmlns" will not legally round-trip in a conforming XML parser. • Let candidate prefix be the value of prefix. -
~IF[ %候補~接頭辞 ~NEQ ~NULL (この接頭辞は %~ns に~mapするよう定義されている) ]: ◎ Found a suitable namespace prefix: if candidate prefix is not null (a namespace prefix is defined which maps to ns), then:
注記: %候補~接頭辞 が直列化されることになる — それは、 %要素 の自前の`~ns接頭辞$eLと異なり得る。 ◎ Note The following may serialize a different prefix than the Element's existing prefix if it already had one. However, the retrieving a preferred prefix string algorithm already tried to match the existing prefix if possible.
-
%接頭辞 ~SET %候補~接頭辞
注記: %要素 または そのいずれかの先祖に、 %要素 の~nsを定義する~ns接頭辞~定義が存在する。
◎ Append to qualified name the concatenation of candidate prefix, ":" (U+003A COLON), and node's localName. There exists on this node or the node's ancestry a namespace prefix definition that defines the node's namespace. -
~IF[ `局所的な既定の~ns$V ~NIN { ε, `~XML~ns$ } ] ⇒ `文脈~ns$V ~SET [ `局所的な既定の~ns$V ~NEQ 空~文字列 ならば `局所的な既定の~ns$V / ~ELSE_ ~NULL ] (`文脈~ns$V は、 %要素 の自前の~nsではなく, 宣言された既定の~nsに変更される。) ◎ If the local default namespace is not null (there exists a locally-defined default namespace declaration attribute) and its value is not the XML namespace, then let inherited ns get the value of local default namespace unless the local default namespace is the empty string in which case let it get null (the context namespace is changed to the declared default, rather than this node's own namespace).
注記: `~XML~ns$を定義するような[ 既定の~ns定義/~ns接頭辞 ]は、 在っても, %要素 の属性たちを直列化するときには省略される。 ◎ Note Any default namespace definitions or namespace prefixes that define the XML namespace are omitted when serializing this node's attributes. ◎ Append the value of qualified name to markup.
-
-
~ELIF[ %接頭辞 ~NEQ ~NULL ]: ◎ Otherwise, if prefix is not null, then:
注記: この時点で、 %要素 にも, そのどの先祖にも[ %接頭辞 を定義する~ns / %接頭辞 を~nsに~mapする宣言 ]はない。 以降の手続きは、 次を確保する:
- %接頭辞 用に新たな~ns接頭辞~宣言を作成する。
- %接頭辞 は[ %要素 の`属性~list$内に既存の~ns接頭辞~宣言 【! *?同じ localName の】 ]とは競合しない。
- ~IF[ `局所~接頭辞~map$V[ %接頭辞 ] ~NEQ ε ] ⇒ %接頭辞 ~SET `接頭辞を生成する$( %~map, %~ns ) ◎ If the local prefixes map contains a key matching prefix, then let prefix be the result of generating a prefix providing as input map, ns, and prefix index.
- `接頭辞~mapに追加する$( %~map, %接頭辞, %~ns ) ◎ Add prefix to map given namespace ns. ◎ Append to qualified name the concatenation of prefix, ":" (U+003A COLON), and node's localName. ◎ Append the value of qualified name to markup.
-
%~ns宣言~markup ~SET 次の連結:
注記: これは、 %接頭辞 に対応する~ns接頭辞~宣言を直列化する。
- ~SPACE
- `xmlns:^l
- %接頭辞
- `003D^U
- `0022^U
- `属性~値を直列化する$( %~ns )
- `0022^U
- ~IF[ `局所的な既定の~ns$V ~NEQ ε 【!* (there exists a locally-defined default namespace declaration attribute)】 ] ⇒ `文脈~ns$V ~SET [ `局所的な既定の~ns$V ~NEQ 空~文字列 ならば `局所的な既定の~ns$V / ~ELSE_ ~NULL ] ◎ If local default namespace is not null (there exists a locally-defined default namespace declaration attribute), then let inherited ns get the value of local default namespace unless the local default namespace is the empty string in which case let it get null.
-
~ELIF[ `局所的な既定の~ns$V ~NEQ %~ns ]: ◎ Otherwise, if local default namespace is null, or local default namespace is not null and its value is not equal to ns, then:
注記: %要素 用の~nsは 依然として直列化される必要があるが、 この時点では %接頭辞 も %候補~接頭辞 も可用でない。 そのため、 この段では,既定の~ns宣言を利用して~nsを定義する — 既存の既定の~ns宣言が在れば,それは置換される。 ◎ Note At this point, the namespace for this node still needs to be serialized, but there's no prefix (or candidate prefix) availble; the following uses the default namespace declaration to define the namespace--optionally replacing an existing default declaration if present.
- `~ns定義~属性は無視するか$V ~SET ~T ◎ Set the ignore namespace definition attribute flag to true. ◎ Append to qualified name the value of node's localName.
-
`文脈~ns$V ~SET %~ns ◎ Let the value of inherited ns be ns.
注記: 新たな既定の~nsは、 直列化において, %要素 の~nsを定義するときに利用され、 その`子$用の `文脈~ns$V として動作することになる。 ◎ Note The new default namespace will be used in the serialization to define this node's namespace and act as the context namespace for its children.
-
%~ns宣言~markup ~SET 次の連結: ◎ Append the value of qualified name to markup. ◎ Append the following to markup, in the order listed:
注記: これは、 新たな(または~~代用の)既定の~ns定義を直列化する。 ◎ Note The following serializes the new (or replacement) default namespace definition.
- ~SPACE
- `xmlns^l
- `003D^U
- `0022^U
- `属性~値を直列化する$( %~ns )
- `0022^U
-
~ELSE( `局所的な既定の~ns$V ~EQ %~ns ~NEQ ε ): ◎ Otherwise, the node has a local default namespace that matches ns. Append to qualified name the value of node's localName,\
- `文脈~ns$V ~SET %~ns ◎ let the value of inherited ns be ns, and append the value of qualified name to markup.
注記: %~ns ~NEQ `文脈~ns$V になるような すべての組合nは,上で取扱われ、 %要素 は,その元の`~ns$eLを保全するように直列化されることになる。 ◎ Note All of the combinations where ns is not equal to inherited ns are handled above such that node will be serialized preserving its original namespaceURI.
- %局所~名 ~LET %要素 の`局所~名$eL
-
`有修飾~名@V ~LET [ %接頭辞 ~EQ ~NULL ならば %局所~名 / ~ELSE_ 次の連結 ]:
- %接頭辞
- `003A^U
- %局所~名
-
%~markup ~LET 次の連結:
- `003C^U
- `有修飾~名$V
- %~ns宣言~markup
- %~markup に次の結果を付加する ⇒ %要素 の`属性たちを~XMLに直列化する$( %~map, `局所~接頭辞~map$V, `~ns定義~属性は無視するか$V ) ◎ Append to markup the result of the XML serialization of node's attributes given map, prefix index, local prefixes map, ignore namespace definition attribute flag, and require well-formed flag.
-
~IF[ %要素 の`子~群$は空である ]~AND[ ~OR↓ ]…
- %~ns ~NEQ `~HTML~ns$
- [ %~ns ~EQ `~HTML~ns$ ]~AND[ %局所~名 ~IN { `area^l , `base^l , `basefont^l , `bgsound^l , `br^l , `col^l , `embed^l , `frame^l , `hr^l , `img^l , `input^l , `keygen^l , `link^l , `menuitem^l , `meta^l , `param^l , `source^l , `track^l , `wbr^l } (これらは`~void要素$の~tag名を与える) ]
…ならば:
- ~IF[ %~ns ~EQ `~HTML~ns$ ] ⇒ %~markup に ~SPACE を付加する
-
%~markup に次の連結を付加する:
- `002F^U
- `003E^U
- ~RET %~markup
- %~markup に `003E^U を付加する ◎ ↑
-
~IF[ %~ns ~EQ `~HTML~ns$ ]~AND[ %局所~名 ~EQ `template^l ] ⇒ %~markup に次の結果を付加する ⇒ %要素 の`~template内容$を`~XMLに直列化する$( `文脈~ns$V, %~map ) ◎ If ns is the HTML namespace, and the node's localName matches the string "template", then this is a template element. Append to markup the result of XML serializing a DocumentFragment node given the template element's template contents (a DocumentFragment), providing inherited ns, map, prefix index, and the require well-formed flag.
注記: %要素 は `template$e 要素であり、 その`~template内容$は `DocumentFragment$I である。 これは、 `~XHTML文書を構文解析-$する規則の下でも,`~template内容$が往復できるようにする。 ◎ Note This allows template content to round-trip , given the rules for parsing XHTML documents.
- ~ELSE ⇒ %要素 の`子~群$を成す ~EACH( %子 ) に対し,`~tree順序$で ⇒ %~markup に次の結果を付加する ⇒ %子 を`~XMLに直列化する$( `文脈~ns$V, %~map ) ◎ Otherwise, append to markup the result of running the XML serialization algorithm on each of node's children, in tree order, providing inherited ns, map, prefix index, and the require well-formed flag.
-
%~markup に次の連結を付加する:
- `003C^U
- `002F^U
- `有修飾~名$V
- `003E^U
- ~RET %~markup ◎ Return the value of markup.
4.1.1. ~nsの記録-法
次の~algoは、 要素に局所的な~ns接頭辞~定義を出して, それらを `局所~接頭辞~map$V (初期~時は空)に追加した上で, それらで`~ns接頭辞~map$も更新する。 加えて、 要素に局所的な既定の~ns宣言が[ 在れば それが与える~ns / 無ければ ε ]を返す。 ◎ This following algorithm will update the namespace prefix map with any found namespace prefix definitions, add the found prefix definitions to the local prefixes map, and return a local default namespace value defined by a default namespace attribute if one exists. Otherwise it returns null.
%要素 の `~ns情報を記録する@ ときは、 所与の (`~ns接頭辞~map$ %~map, `局所~接頭辞~map$V ) に対し,次を走らす: ◎ When recording the namespace information for an Element element, given a namespace prefix map map and a local prefixes map (initially empty), the user agent must run the following steps:
-
%既定の~ns属性~値 ~LET ε ◎ Let default namespace attr value be null.
【 この訳では、 原文の ~NULL に代えて ε を利用する。 “~NULL ~ns” と混同しやすいので (原文のこの~algoが返す ~NULL は、 ~NULL ~nsを表現する値ではない)。 】
-
%要素 の`属性~list$を成す ~EACH( `属性$ %属性 ) に対し: ◎ Main: For each attribute attr in element's attributes, in the order they are specified in the element's attribute list:
注記: この段の手続きは、 `~XMLNS~ns$に属する属性のみを考慮する下で,~ns接頭辞を見出す (例えば,
`setAttribute$m( `xmlns:pretend-prefix^l, `pretend-namespace^l )
などを介して ~ns宣言に見せかけた属性は、 含まれない)。 ◎ Note The following conditional steps find namespace prefixes. Only attributes in the XMLNS namespace are considered (e.g., attributes made to look like namespace declarations via setAttribute("xmlns:pretend-prefix", "pretend-namespace") are not included).- ( %属性~ns, %属性~接頭辞, %属性~値 ) ~LET %属性 の ( `~ns$A, `~ns接頭辞$A, `値$A ) ◎ Let attribute namespace be the value of attr's namespaceURI value. ◎ Let attribute prefix be the value of attr's prefix.
- ~IF[ %属性~ns ~NEQ `~XMLNS~ns$ ] ⇒ ~CONTINUE ◎ If the attribute namespace is the XMLNS namespace, then:
-
~IF[ %属性~接頭辞 ~EQ ~NULL ]:
- ~Assert:%属性 は既定の~ns宣言である。
- %既定の~ns属性~値 ~SET %属性~値
- ~CONTINUE
- ~Assert: %属性 は~ns接頭辞~定義である。 ◎ Otherwise, the attribute prefix is not null and attr is a namespace prefix definition. Run the following steps:
- %接頭辞 ~LET %属性 の`局所~名$A ◎ Let prefix definition be the value of attr's localName.
- %~ns ~LET %属性~値 ◎ Let namespace definition be the value of attr's value.
-
~IF[ %~ns ~EQ `~XML~ns$ ] ⇒ ~CONTINUE ◎ If namespace definition is the XML namespace, then stop running these steps, and return to Main to visit the next attribute.
注記: `~XML~ns$を定義するような接頭辞は、 完全に無視される (接頭辞が競合し得るときの不必要な作業を避けるため)。 `~XML~ns$に属する要素は、 常に[ 要素の局所~名に予約-済み接頭辞 `xml^l を接頭する ]よう,一律に(また、必要yなら上書きするように)取扱われる。 ◎ Note XML namespace definitions in prefixes are completely ignored (in order to avoid unnecessary work when there might be prefix conflicts). XML namespaced elements are always handled uniformly by prefixing (and overriding if necessary) the element's localname with the reserved "xml" prefix.
- ~IF[ %~ns ~EQ 空~文字列(どの~nsにも属さないことの宣言的な形) ] ⇒ %~ns ~SET ~NULL ◎ If namespace definition is the empty string (the declarative form of having no namespace), then let namespace definition be null instead.
-
~IF[ `接頭辞は見出される$( %~map, %接頭辞, %~ns ) ~EQ ~T ] ⇒ ~CONTINUE ◎ If prefix definition is found in map given the namespace namespace definition, then stop running these steps, and return to Main to visit the next attribute.
注記: この段は、 同じ~nsに対応する接頭辞~定義が, %~map 内に重ねて追加されるのを避ける。 これは、 後に,子孫~nodeにおける~ns接頭辞~宣言が重ねて直列化されないようにする。 ◎ Note This step avoids adding duplicate prefix definitions for the same namespace in the map. This has the side-effect of avoiding later serialization of duplicate namespace prefix declarations in any descendant nodes.
- `接頭辞~mapに追加する$( %~map, %接頭辞, %~ns ) ◎ Add the prefix prefix definition to map given namespace namespace definition.
- `局所~接頭辞~map$V[ %接頭辞 ] ~SET [ %~ns ~NEQ ~NULL ならば %~ns / ~ELSE_ 空~文字列 ] ◎ Add the value of prefix definition as a new key to the local prefixes map, with the namespace definition as the key's value replacing the value of null with the empty string if applicable.
-
~RET %既定の~ns属性~値 ◎ Return the value of default namespace attr value.
注記: 空~文字列は ε【!~NULL】 に変換されない — それも、 %既定の~ns属性~値 として~~合法なので。 ◎ Note The empty string is a legitimate return value and is not converted to null.
4.1.2. ~ns接頭辞~map
`~ns接頭辞~map@ は、 `~map$であり,その各~entryは:
- [ ~nsを与える文字列, または ~NULL ]を~keyとする。 この ~NULL は、 どの~nsにも属さないことを表現する。
- `~ns接頭辞~list@ — 一連の~ns接頭辞からなる~list — を値とする。
これらの~entryの~keyたちは、 所与の~nodeとその先祖たちにて,それまでに出くわした~nsで拡充され、 各~keyに対応する値は,それまでに遭遇した[ ~keyを与える~nsを結付けている接頭辞たち ]で拡充されることになる。
◎ A namespace prefix map is a map that associates namespaceURI and namespace prefix lists, where namespaceURI values are the map's unique keys (which can include the null value representing no namespace), and ordered lists of associated prefix values are the map's key values. The namespace prefix map will be populated by previously seen namespaceURIs and all their previously encountered prefix associations for a given node and its ancestors.注記: `~ns接頭辞~list$を成す接頭辞たちの順序は、 出くわした順になる。 この~listは、 対応する~nsが与えられたとき,それに合致し得る接頭辞を見出すときに探索される。 見出されなかった場合、 ~list内の最後の接頭辞が利用される。 追加的な詳細は、[ `~ns接頭辞~mapを複製する$, `選好される接頭辞~文字列を検索取得する$ ]を見よ。 ◎ Note Note: the last seen prefix for a given namespaceURI is at the end of its respective list. The list is searched to find potentially matching prefixes, and if no matches are found for the given namespaceURI, then the last prefix in the list is used. See copy a namespace prefix map and retrieve a preferred prefix string for additional details.
`~ns接頭辞~mapを複製する@ ときは、 所与の`~ns接頭辞~map$を — その各~entryの値を与える`~ns接頭辞~list$も含め — 複製する。 ◎ To copy a namespace prefix map map means to copy the map's keys into a new empty namespace prefix map, and to copy each of the values in the namespace prefix list associated with each keys' value into a new list which should be associated with the respective key in the new map.
`選好される接頭辞~文字列を検索取得する@ ときは、 所与の ( `~ns接頭辞~map$ %~map, %~ns, %選好される接頭辞 ) に対し,次を走らすべきである: ◎ To retrieve a preferred prefix string preferred prefix from the namespace prefix map map given a namespace ns, the user agent should:
【 (この節の他の~algoも含め,)なぜ “べき( should )” ? 】
- %接頭辞~list ~LET %~map[ %~ns ] ◎ Let candidates list be the result of retrieving a list from map where there exists a key in map that matches the value of ns or\
- ~IF[ %接頭辞~list ~EQ ε ] ⇒ ~RET ~NULL ◎ if there is no such key, then stop running these steps, and return the null value.
- ~Assert: %接頭辞~list は空でない。 ◎ ↓
- ~IF[ %選好される接頭辞 ~IN %接頭辞~list ] ⇒ ~RET %選好される接頭辞 ◎ Otherwise, for each prefix value prefix in candidates list, iterating from beginning to end: • Note There will always be at least one prefix value in the list. • If prefix matches preferred prefix, then stop running these steps and return prefix. • If prefix is the last item in the candidates list, then stop running these steps and return prefix.
- ~RET %接頭辞~list 内の最後の~item ◎ ↑
`接頭辞は見出される@ かどうか検査するときは、 所与の ( `~ns接頭辞~map$ %~map, %接頭辞, %~ns ) に対し,次を走らすべきである: ◎ To check if a prefix string prefix is found in a namespace prefix map map given a namespace ns, the user agent should:
- %接頭辞~list ~LET %~map[ %~ns ] ◎ Let candidates list be the result of retrieving a list from map where there exists a key in map that matches the value of ns or\
- ~IF[ %接頭辞~list ~EQ ε ] ⇒ ~RET ~F ◎ if there is no such key, then stop running these steps, and return false.
- ~IF[ %接頭辞 ~IN %接頭辞~list ] ⇒ ~RET ~T ◎ If the value of prefix occurs at least once in candidates list, return true,\
- ~RET ~F ◎ otherwise return false.
`接頭辞~mapに追加する@ ときは、 所与の ( `~ns接頭辞~map$ %~map, %接頭辞, %~ns ) に対し,次を走らすべきである: ◎ To add a prefix string prefix to the namespace prefix map map given a namespace ns, the user agent should:
- ~IF[ %~map[ %~ns ] ~EQ ε ] ⇒ %~map[ %~ns ] ~SET %接頭辞 のみからなる新たな`~ns接頭辞~list$ ◎ Let candidates list be the result of retrieving a list from map where there exists a key in map that matches the value of ns or if there is no such key, then let candidates list be null. ◎ If candidates list is null, then create a new list with prefix as the only item in the list, and associate that list with a new key ns in map.
- ~ELSE ⇒ %~map[ %~ns ] に %接頭辞 を付加する ◎ Otherwise, append prefix to the end of candidates list.
注記: `選好される接頭辞~文字列を検索取得する$手続きは、 `~ns接頭辞~list$を利用して,[ 所与の~nsを結付けている接頭辞のうち,最も近過去に利用されたもの† ]を追跡する — ~list内の最後の接頭辞がそれになる。 この~listは、 より早く出くわした同じ接頭辞を重複して包含し得る(そうなってもかまわない)。 【†原文には MRU ( most recently used )という略称も付記されている)。】 ◎ Note The steps in retrieve a preferred prefix string use the list to track the most recently used (MRU) prefix associated with a given namespace, which will be the prefix at the end of the list. This list may contain duplicates of the same prefix value seen earlier (and that's OK).
4.1.3. 要素の属性たちの直列化-法
`要素$ %要素 の `属性たちを~XMLに直列化する@ ときは、 所与の ( `~ns接頭辞~map$ %~map, `局所~接頭辞~map$V, `~ns定義~属性は無視するか$V ) に対し,次を走らせた結果を返す: ◎ The XML serialization of the attributes of an Element element together with a namespace prefix map map, a generated namespace prefix index prefix index reference, a local prefixes map, a ignore namespace definition attribute flag, and a require well-formed flag, is the result of the following algorithm:
- %結果 ~LET 空~文字列 ◎ Let result be the empty string.
-
%局所~名~集合 ~LET 新たな空~集合 ◎ Let localname set be a new empty namespace localname set.\
この集合は、 %要素 の各 `属性$が処理されるに伴い, `属性$の ( `~ns$A, `局所~名$A ) が成す一意な組たちで拡充されることになる。 ◎ This localname set will contain tuples of unique attribute namespaceURI and localName pairs, and is populated as each attr is processed.\
注記: この集合は、[[ 要素の 2 個の属性が同じ ( `~ns$A, `局所~名$A ) を有する ]ことはないとする整形式~拘束 ]を,任意選択で施行するために利用される。 これが生じ得るのは、 要素が,接頭辞のみ相違するような 2 個の属性を有するときである。 ◎ This set is used to [optionally] enforce the well-formed constraint that an element cannot have two attributes with the same namespaceURI and localName. This can occur when two otherwise identical attributes on the same element differ only by their prefix values.
-
%要素 の`属性~list$を成す ~EACH( `属性$ %属性 ) に対し: ◎ Loop: For each attribute attr in element's attributes, in the order they are specified in the element's attribute list:
- ( %局所~名, %~ns, %値, %接頭辞 ) ~LET %属性 の ( `局所~名$A, `~ns$A, `値$A, `~ns接頭辞$A ) ◎ ↓
- ~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ 組 ( %~ns, %局所~名 ) ~IN %局所~名~集合 ] ⇒ ~THROW 例外 — %属性 を直列化すると要素は整形式にならなくなる。 ◎ If the require well-formed flag is set (its value is true), and the localname set contains a tuple whose values match those of a new tuple consisting of attr's namespaceURI attribute and localName attribute, then throw an exception; the serialization of this attr would fail to produce a well-formed element serialization.
- %局所~名~集合 に 組 ( %~ns, %局所~名 ) を追加する ◎ Create a new tuple consisting of attr's namespaceURI attribute and localName attribute, and add it to the localname set.
- %候補~接頭辞 ~LET ~NULL 【! Check for an unregistered attribute namespace, and if so, serialize a definition for it】 ◎ Let attribute namespace be the value of attr's namespaceURI value. ◎ Let candidate prefix be null.
-
~IF[ %~ns ~NEQ ~NULL ]: ◎ If attribute namespace is not null, then run these sub-steps:
- %候補~接頭辞 ~LET `選好される接頭辞~文字列を検索取得する$( %~map, %~ns, %接頭辞 ) ◎ Let candidate prefix be the result of retrieving a preferred prefix string from map given namespace attribute namespace with preferred prefix being attr's prefix value.
-
~IF[ %~ns ~EQ `~XMLNS~ns$ ]: ◎ If the value of attribute namespace is the XMLNS namespace, then run these steps:
-
~IF[ ~OR↓ ]… ◎ If any of the following are true, then stop running these steps and goto Loop to visit the next attribute:
-
%値 ~EQ `~XML~ns$ ◎ the attr's value is the XML namespace;
注記: `~XML~ns$は、 再~宣言できず,`往復-$時にも生き残る(それが接頭辞 `xml^l を定義していない限り)。 この問題を避けるため,この~algoは、 `~XML~ns$に属する要素には,常に `xml^l を接頭し、 上の条件に見られるとおり,関係する定義は落とす。 ◎ Note The XML namespace cannot be redeclared and survive round-tripping (unless it defines the prefix "xml"). To avoid this problem, this algorithm always prefixes elements in the XML namespace with "xml" and drops any related definitions as seen in the above condition.
- [ %接頭辞 ~EQ ~NULL ]~AND[ `~ns定義~属性は無視するか$V ~EQ ~T ( %要素 の既定の~ns属性は,飛ばされるべきである) ] ◎ the attr's prefix is null and the ignore namespace definition attribute flag is true (the Element's default namespace attribute should be skipped);
-
~AND↓:
- %接頭辞 ~NEQ ~NULL ◎ the attr's prefix is not null and either
- `局所~接頭辞~map$V[ %局所~名 ] ~IN { ε, %値 } ◎ the attr's localName is not a key contained in the local prefixes map, or ◎ the attr's localName is present in the local prefixes map but the value of the key does not match attr's value
- `接頭辞は見出される$( `~ns接頭辞~map$, %局所~名, %値 ) ~EQ ~T ◎ and furthermore that the attr's localName (as the prefix to find) is found in the namespace prefix map given the namespace consisting of the attr's value\
(現在の~ns接頭辞~定義は、 %要素 のある先祖~上で定義されたものである。) ◎ (the current namespace prefix definition was exactly defined previously--on an ancestor element not the current element whose attributes are being processed).
…ならば ⇒ ~CONTINUE ◎ ↑
-
-
~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %値 ~IN { `~XMLNS~ns$†, 空~文字列†† } ] ⇒ ~THROW 例外 ◎ ↓
-
† この属性の直列化は妥当でない~XMLを生産する — `~XMLNS~ns$は予約-済みであり,~XML構文解析を介しては要素の~nsとして適用できないので。 ◎ If the require well-formed flag is set (its value is true), and the value of attr's value attribute matches the XMLNS namespace, then throw an exception; the serialization of this attribute would produce invalid XML because the XMLNS namespace is reserved and cannot be applied as an element's namespace via XML parsing.
注記: ~DOM~APIは、 厳密な~~条件の下で,`~XMLNS~ns$に属する要素の作成を許容する。 ◎ Note DOM APIs do allow creation of elements in the XMLNS namespace but with strict qualifications.
- †† ~ns接頭辞~宣言は,~nsを未宣言にする用途には利用できない(代わりに既定の~ns宣言を利用すること)。 ◎ If the require well-formed flag is set (its value is true), and the value of attr's value attribute is the empty string, then throw an exception; namespace prefix declarations cannot be used to undeclare a namespace (use a default namespace declaration instead).
-
- 【! *原文 if 抜け】 ~IF[ %接頭辞 ~EQ `xmlns^l ] ⇒ %候補~接頭辞 ~LET `xmlns^l ◎ the attr's prefix matches the string "xmlns", then let candidate prefix be the string "xmlns".
-
-
~ELSE( %~ns ~NEQ `~XMLNS~ns$ ): ◎ Otherwise, the attribute namespace in not the XMLNS namespace. Run these steps:
- %候補~接頭辞 ~LET `接頭辞を生成する$( %~map, %~ns ) ◎ Let candidate prefix be the result of generating a prefix providing map, attribute namespace, and prefix index as input.
-
%結果 に次の連結を付加する:
- ~SPACE
- `xmlns:^l
- %候補~接頭辞
- `003D^U
- `0022^U
- `属性~値を直列化する$( %~ns )
- `0022^U
- %結果 に ~SPACE を付加する ◎ Append a " " (U+0020 SPACE) to result.
-
~IF[ %候補~接頭辞 ~NEQ ~NULL ] ⇒ %結果 に次の連結を付加する:
- %候補~接頭辞
- `003A^U
-
~IF[ ~AND↓ ]…
- `整形式が要求されるか$V ~EQ ~T
-
%局所~名 は ~OR↓ を満たす:
- `003A^U を包含する
- ~XML `Name$P 生成規則に合致しない文字列を包含する
- %局所~名 ~EQ `xmlns^l
- %~ns ~EQ ~NULL
…ならば ⇒ ~THROW 例外 — %属性 の直列化は整形式~属性にならない。
◎ If the require well-formed flag is set (its value is true), and this attr's localName attribute contains the character ":" (U+003A COLON) or does not match the XML Name production or equals "xmlns" and attribute namespace is null, then throw an exception; the serialization of this attr would not be a well-formed attribute. -
%結果 に次の連結を付加する:
- %局所~名
- `003D^U
- `0022^U
- `属性~値を直列化する$( %値 )
- `0022^U
- ~RET %結果 ◎ Return the value of result.
`属性~値を直列化する@ ときは、 所与の ( %値 ) に対し,次を走らす: ◎ When serializing an attribute value given an attribute value and require well-formed flag, the user agent must run the following steps:
- ~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %値 内には~XML `Char$P 生成規則に合致しない文字がある ] ⇒ ~THROW 例外 — %値 の直列化は整形式~要素~直列化を生産するのに失敗する。 ◎ If the require well-formed flag is set (its value is true), and attribute value contains characters that are not matched by the XML Char production, then throw an exception; the serialization of this attribute value would fail to produce a well-formed element serialization.
- ~IF[ %値 ~EQ ~NULL ] ⇒ ~RET 空~文字列 ◎ If attribute value is null, then return the empty string.
- %結果 ~LET 空~文字列 ◎ Otherwise, attribute value is a string.\
-
%値 を成す ~EACH( %文字 ) に対し,順に ⇒ %結果 に [ %文字 に応じて,次に与える文字列 ]を付加する ⇒# `0026^U ならば `&^l / `0022^U ならば `"^l / `003C^U ならば `<^l / `003E^U ならば `>^l / ~ELSE_ %文字 ◎ Return the value of attribute value, first replacing any occurrences of the following: ◎ "&" with "&" ◎ """ with """ ◎ "<" with "<" ◎ ">" with ">"
注記: これは、 各種~browserの挙動に合致する。 また, `003E^U も置換することにより、 ~XML仕様の `AttValue$P 生成規則による文法を超える要件を課す。 ◎ Note This matches behavior present in browsers, and goes above and beyond the grammar requirement in the XML specification's AttValue production by also replacing ">" characters.
- ~RET %結果 ◎ ↑
4.1.4. ~ns接頭辞の生成-法
`接頭辞を生成する@ ときは、 所与の ( `~ns接頭辞~map$ %~map, 文字列 %新たな~ns ) に対し,次を走らす: ◎ To generate a prefix given a namespace prefix map map, a string new namespace, and a reference to a generated namespace prefix index prefix index, the user agent must run the following steps:
-
%生成された接頭辞 ~LET 次の連結:
- `ns^l
- `接頭辞~index$V の数値を直列化した結果 【正確にどう直列化するかは述べられていない。】
- `接頭辞~index$V ~INCBY 1 ◎ Let the value of prefix index be incremented by one.
- `接頭辞~mapに追加する$( %~map, %生成された接頭辞, %新たな~ns ) ◎ Add to map the generated prefix given the new namespace namespace.
- ~RET %生成された接頭辞 ◎ Return the value of generated prefix.
4.2. 文書を~XMLに直列化する
`Document$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type Document is as follows:
- ~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %~node の`文書~要素$ ~EQ ~NULL ] ⇒ ~THROW 例外 — %~node の直列化は整形式~文書にならない。 ◎ If the require well-formed flag is set (its value is true), and this node has no documentElement (the documentElement attribute's value is null), then throw an exception; the serialization of this node would not be a well-formed document.
- %直列形の文書 ~LET 空~文字列 ◎ Otherwise, run the following steps: ◎ Let serialized document be an empty string.
-
%~node の`子~群$を成す ~EACH( %子 ) に対し,`~tree順序$で ⇒ %直列形の文書 に次の結果を付加する ⇒ %子 を`~XMLに直列化する$( `文脈~ns$V, `接頭辞~map$V ) ◎ For each child child of node, in tree order, run the XML serialization algorithm on the child passing along the provided arguments, and append the result to serialized document.
注記: これは、 `文書~要素$の前後にある任意個数の[ `ProcessingInstruction$I / `Comment$I ]~node, および 高々 1 個の `DocumentType$I ~nodeも,直列化することになる。 ( `Text$I ~nodeは`文書$の子には許容されない。) ◎ Note This will serialize any number of ProcessingInstruction and Comment nodes both before and after the Document's documentElement node, including at most one DocumentType node. (Text nodes are not allowed as children of the Document.)
- ~RET %直列形の文書 ◎ Return the value of serialized document.
4.3. `Comment^I ~nodeを~XMLに直列化する
`Comment$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type Comment is as follows:
- %~data ~LET %~node の`~data$ ◎ ↓
-
~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %~data は ~OR↓ を満たす ]…
- ~XML `Char$P 生成規則に合致しない文字がある
- 2 個の `002D^U 並びを包含する
- `002D^U で終端している
…ならば ⇒ ~THROW 例外 — %~data の直列化は整形式にならない。
◎ If the require well-formed flag is set (its value is true), and node's data contains characters that are not matched by the XML Char production or contains "--" (two adjacent U+002D HYPHEN-MINUS characters) or that ends with a "-" (U+002D HYPHEN-MINUS) character, then throw an exception; the serialization of this node's data would not be well-formed. -
~RET 次の連結:
- `<!--^l
- %~data
- `-->^l
4.4. `Text^I ~nodeを~XMLに直列化する
`Text$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type Text is as follows:
- %~data ~LET %~node の`~data$
- ~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ %~data 内には~XML `Char$P 生成規則に合致しない文字がある ] ⇒ ~THROW 例外 — %~data の直列化は整形式にならない。 ◎ If the require well-formed flag is set (its value is true), and node's data contains characters that are not matched by the XML Char production, then throw an exception; the serialization of this node's data would not be well-formed.
- %~markup ~LET 空~文字列 ◎ Let markup be the value of node's data.
- %~data を成す ~EACH( %文字 ) に対し,順に ⇒ %~markup に [ %文字 に応じて,次に与える文字列 ]を付加する ⇒# `0026^U ならば `&^l / `003C^U ならば `<^l / `003E^U ならば `>^l / ~ELSE_ %文字 ◎ Replace any occurrences of "&" in markup by "&". ◎ Replace any occurrences of "<" in markup by "<". ◎ Replace any occurrences of ">" in markup by ">".
- ~RET %~markup ◎ Return the value of markup.
4.5. `DocumentFragment^I ~nodeを~XMLに直列化する
`DocumentFragment$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type DocumentFragment is as follows:
- %~markup ~LET 空~文字列 ◎ Let markup the empty string.
- %~node の`子~群$を成す ~EACH( %子 ) に対し,`~tree順序$で ⇒ %~markup に次の結果を付加する ⇒ %子 を`~XMLに直列化する$( `文脈~ns$V, `接頭辞~map$V ) ◎ For each child child of node, in tree order, run the XML serialization algorithm on the child given namespace, prefix map, a reference to prefix index, and flag require well-formed. Concatenate the result to markup.
- ~RET %~markup ◎ Return the value of markup.
4.6. `DocumentType^I ~nodeを~XMLに直列化する
`DocumentType$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type DocumentType is as follows:
- ( %公な~ID, %~system~ID ) ~LET %~node の ( `公な~ID$dT, `~system~ID$dT ) ◎ ↓
-
~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ ~OR↓ ]…
- %公な~ID 内に[ ~XML `PubidChar$P 生成規則に合致しない文字 ]がある
- %~system~ID 内に[ ~XML `Char$P 生成規則に合致しない文字 ]がある
- %~system~ID 内に[ `0022^U, `0027^U ]の両者がある
…ならば ⇒ ~THROW 例外 — %~node の直列化は整形式の文書~型~宣言にならない。
◎ If the require well-formed flag is true and the node's publicId attribute contains characters that are not matched by the XML PubidChar production, then throw an exception; the serialization of this node would not be a well-formed document type declaration. ◎ If the require well-formed flag is true and the node's systemId attribute contains characters that are not matched by the XML Char production or that contains both a """ (U+0022 QUOTATION MARK) and a "'" (U+0027 APOSTROPHE), then throw an exception; the serialization of this node would not be a well-formed document type declaration. -
%~markup ~LET 次の連結:
- `003C^U
- `0021^U
- `DOCTYPE^l
- ~SPACE
- %~node の`名前$dT【! *原文誤 Name】 — %~node が`~HTML文書$に属する場合、 この値は小文字のみからなる
-
~IF[ %公な~ID ~NEQ 空~文字列 ] ⇒ %~markup に次の連結を付加する:
- ~SPACE
- `PUBLIC^l
- ~SPACE
- `0022^U
- %公な~ID
- `0022^U
-
~IF[ %~system~ID ~NEQ 空~文字列 ]~AND[ %公な~ID ~EQ 空~文字列 ] ⇒ %~markup に次の連結を付加する:
- ~SPACE
- `SYSTEM^l
-
~IF[ %~system~ID ~NEQ 空~文字列 ] ⇒ %~markup に次の連結を付加する:
- ~SPACE
- `0022^U
- %~system~ID
- `0022^U
- %~markup に `003E^U を付加する ◎ Append ">" (U+003E GREATER-THAN SIGN) to markup.
- ~RET %~markup ◎ Return the value of markup.
4.7. `ProcessingInstruction^I ~nodeを~XMLに直列化する
`ProcessingInstruction$I `型の~nodeを~XMLに直列化する$ときは、 次に従う: ◎ The algorithm for producing an XML serialization of a DOM node of type ProcessingInstruction is as follows:
- ( %~target, %~data ) ~LET %~node の ( `~target$pI, `~data$ ) ◎ ↓
-
~IF[ `整形式が要求されるか$V ~EQ ~T ]~AND[ ~OR↓ ]…
- %~target 内に `003A^U がある
- %~target は`~ASCII大小無視$で `xml^l に合致する
- %~data 内に~XML `Char$P 生成規則に合致しない文字がある
- %~data 内に `?>^l ( `003F^U `003E^U )がある
…ならば ⇒ ~THROW 例外 — %~target / %~data の直列化は整形式にならない。
◎ If the require well-formed flag is set (its value is true), and node's target contains a ":" (U+003A COLON) character or is an ASCII case-insensitive match for the string "xml", then throw an exception; the serialization of this node's target would not be well-formed. ◎ If the require well-formed flag is set (its value is true), and node's data contains characters that are not matched by the XML Char production or contains the string "?>" (U+003F QUESTION MARK, U+003E GREATER-THAN SIGN), then throw an exception; the serialization of this node's data would not be well-formed. -
~RET 次の連結:
- `003C^U
- `003F^U
- %~target
- ~SPACE
- %~data
- `003F^U
- `003E^U
依存関係
【`この節を成す内容の和訳は省略する@#_conventions$。】
改訂~履歴
この仕様の最後の公表からの変更点(参考)を以下に要約する。 この仕様の編集者草案の完全な改訂~履歴は `W3C Github Repository@https://github.com/w3c/DOM-Parsing/commits/gh-pages$ にて見出せる。 より~~過去の改訂は、 `W3C Mercurial server@https://dvcs.w3.org/hg/innerhtml/summary/$ にある。 ◎ The following is an informative summary of the changes since the last publication of this specification. A complete revision history of the Editor's Drafts of this specification can be found at the W3C Github Repository and older revisions at the W3C Mercurial server.
- 2016 年 6 月の作業草案にて、 文書を編成し直した: 単体的な~XML直列化~algoは、 数節に~~分解した。 依存関係を明確化した。 ~XML直列化~algoは、 相互運用可能な~browserの挙動に近くなるよう更新された。 ◎ 2016-06 WD - Editorial restructuring of the document; monolithic XML serialization algorithm factored into sections. Dependencies clarified. XML Serialization algorithm updated to get closer to interoperable browser behavior.
- `前回の Last Call 文書からの規範的でない変更点@https://dvcs.w3.org/hg/innerhtml/raw-file/tip/LC2_comments.html$ を組入れた。 ◎ Incorporated non-normative changes from previous Last Call document.
謝辞
この仕様が基づいている元の DOM Parsing and Serialization Living Standard を作成して保守された[ Ms2ger 氏と WHATWG の他の方々による元の仕事 ]に感謝する: ◎ We acknowledge with gratitude the original work of Ms2ger and others at the WHATWG, who created and maintained the original DOM Parsing and Serialization Living Standard upon which this specification is based.
Thanks to C. Scott Ananian, Victor Costan, Aryeh Gregor, Anne van Kesteren, Arkadiusz Michalski, Simon Pieters, Henri Sivonen, Josh Soref and Boris Zbarsky, for their useful comments.
`HTML5$r にて `innerHTML$m, `outerHTML$m 属性, `insertAdjacentHTML()$m ~methodを最初に定義され,有用な~commentを書かれた Ian Hickson 氏に特別な謝意を。 ◎ Special thanks to Ian Hickson for first defining the innerHTML and outerHTML attributes, and the insertAdjacentHTML method in [HTML5] and his useful comments.