JavaScript高級プログラム設計のDOM 2とDOM 3のDOM変化のXML名前空間に対する変化第12.1.1話


DOM 1レベルは主にHTMLとXMLドキュメントの下部構造を定義しています.DOM 2とDOM 3はこの構造です.
より多くの相互作用能力を導入し,より高度なXML特性もサポートした.このため、DOM 2とDOM 3
ステージは、多くのモジュール(モジュール間のある関連性)に分けられ、それぞれDOMのある非常に具体的なサブセットを記述している.これらのモジュール
次のとおりです
DOM2級コア(DOM Level 2 Core):1級コアに基づいて構築され、ノードにより多くの方法と属性を追加した.
DOM 2レベルビュー(DOM Level 2 View):ドキュメントのためのスタイル情報に基づく異なるビューを定義します.
DOM 2レベルイベント(DOM Level 2 Events):イベントとDOMドキュメントの相互作用の使い方を説明しました.
DOM2級様式(DOM Level 2 Style):プログラミング方式でCSSスタイル情報にアクセスし、変更する方法を定義しました.
DOM2レベル巡回と範囲(DOM Level 2 Traversal and Range):DOMドキュメントを巡回して、その特定のファイルを選択して紹介しました.
部分の新しいインターフェースです.
DOM 2級HTML(DOM Level 2 HTML):1級HTMLをベースに構築し、さらに多くの属性、方法、および
新しいインターフェースです
この章では、「DOM 2級事件」以外のすべてのモジュールを検討し、「DOM 2級事件」モジュールは第13章で全面的に説明します.
DOM 3レベルはまた、「XXPS」モジュールと「ロードと保存」モジュールを追加しました.これらのモジュールは第18章で検討します.      
12.1 DOMの変化DOM M 2級と3級の目的は、操作XMLのすべての需要を満たすためにDOM APIを拡張することにあり、より良いエラー処理と特性検出能力を提供する.ある意味では、この目的を実現することは、名前空間に対する支持を大きく意味する.「DOM 2レベルコア」は新しいタイプを導入しておらず、DOM 1レベルに加えて新しい方法と新しい属性を追加することによって既存のタイプを強化している.「DOM 3級コア」も同様に、既存のタイプを強化したが、いくつかの新しいタイプを導入した.同様に、「DOM 2レベルビュー」と「DOM 2レベルHTML」モジュールもDOMインターフェースを強化し、新しい属性と方法を提供しています.この二つのモジュールは小さいので、基本的なJavaScriptオブジェクトの変化を「DOM 2級コア」と一緒に議論します.ブラウザがこれらのDOMモジュールをサポートしているかどうかは、以下のコードによって判定できます.
var supportsDOM2Core = document.implementation.hasFeature("Core", "2.0");
var supportsDOM3Core = document.implementation.hasFeature("Core", "3.0");
var supportsDOM2HTML = document.implementation.hasFeature("HTML", "2.0");
var supportsDOM2Views = document.implementation.hasFeature("Views", "2.0");
var supportsDOM2XML = document.implementation.hasFeature("XML", "2.0");
この章では、ブラウザで既に実現されている部分だけを討論します.どのブラウザも実現されていない部分は討論しません.
12.1.1
ターゲット
XML名前空間の変化
XMLの名前空間があれば、異なるXMLドキュメントの要素が混ざり合い、良い形式の文書を共同で構成することができます.名前の衝突を心配する必要はありません.技術的には、HTMLはXML名前空間をサポートしていませんが、XHTMLはXML名前空間をサポートしています.したがって、本節ではXHTMLの例を示している.名前空間はxmlns特性を使用して指定します.XHTMLの名前空間はhttp://www.w3.org/1999/xhtml任意のフォーマットが良いXHTMLページでは、以下の例に示すように、これらを<html要素に含めるべきです.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example XHTML page</title>
</head>
<body>
Hello world!
</body>
</html>
は、この例では、すべての要素がデフォルトでXHTML名前空間の要素として扱われる.XMLを明確にしたいなら
名前空間はプレフィックスを作成します.xmlnsの後にコロンを使用して、後にプレフィックスを付けます.
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xhtml:head>
<xhtml:title>Example XHTML page</xhtml:title>
</xhtml:head>
<xhtml:body>
Hello world!
</xhtml:body>
</xhtml:html>
ここではXHTMLの名前空間のためにxというプレフィックスを定義し、すべてのXHTML要素がプレフィックスであることを要求する.
始め・初め異なる言語間の衝突を避けるためには、以下の例のように、名前空間を使って特性を定義する必要があります.
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xhtml:head>
<xhtml:title>Example XHTML page</xhtml:title>
</xhtml:head>
<xhtml:body xhtml:class="home">
Hello world!
</xhtml:body>
</xhtml:html>
この例の特性クラスには、1つのxhtmlプレフィックスが含まれている.一つの言語だけに基づいてXMLドキュメントを作成する場合、コマンド
名空間は実際には何の役にも立たない.しかし、二つの言語を混合して使う場合、名前空間の役割は非常に大きいです.見に来ます
このXHTMLとSVG言語を混ぜた文書を見てください.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example XHTML page</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
viewBox="0 0 100 100" style="width:100%; height:100%">
<rect x="0" y="0" width="100" height="100" style="fill:red"/>
</svg>
</body>
</html>
は、この例では、名前空間を設定することにより、文書を含むものとは関係ない要素としてを識別する.このとき、元素の
すべてのサブ要素、およびこれらの要素のすべての特性は、すべて属すると考えられています.http://www.w3.org/2000/svg 名前空間すなわち
この文書を技術的にはXHTMLドキュメントと言いますが、名前空間があるので、SVGコードも有効です.
このような文書にとって最も興味深いことは、呼び出し方法で文書ノードを操作する場合に発生する.例えば、作成中に
この元素はどの名前空間に属しますか?特殊なラベル名を検索するときは、結果をどの名前空間に含めるべきですか?
当たりますか?「DOM 2級コア」は大多数のDOM 1レベルの方法のために名前空間に特定されたバージョンを提供することによってこの問題を解決した.
1.Nodeタイプの変化
DOM 2レベルにおいて、Nodeタイプは以下の名前空間に特定される属性を含む.
名前空間プレフィックスを持たないノード名.
namespaceURI:名前空間URIまたは(指定されていない場合は)nullです.
prefix:名前空間プレフィックスまたは(指定されていない場合は)null.
ノードが名前空間プレフィックスを使用すると、そのnodeNameはprefix+「:」+local Nameに等しい.次の文書を例に挙げます.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Example XHTML page</title>
</head>
<body>
<s:svg xmlns:s="http://www.w3.org/2000/svg" version="1.1"
viewBox="0 0 100 100" style="width:100%; height:100%">
<s:rect x="0" y="0" width="100" height="100" style="fill:red"/>
</s:svg>
</body>
</html>
は<>元素にとって、そのlocal NameとtagNameは“html”で、namespaceURIは“”です.http://www.
w 3.org/1999/xhtml「prefixはnullです.<s:svg>要素にとって、そのlocalNameは“svg”であり、
tagNameは「s:svg」で、namespaceURIは「http://www.w3.org/2000/svg「prefix」は「s」です.
DOM 3レベルはこの基礎の上でさらに進み、以下の名前空間に関する方法が紹介されました.
isDefault NamespaceURI:指定されたnamespaceURIは現在のノードのデフォルトの名前が空です.
間の場合はtrueに戻ります.
lookup NamespaceURI(prefix):与えられたprefixの名前空間を返します.
lookuplefix:与えられたnamespaceURIのプレフィックスを返します.
前の例に対して、下記のコードが実行されます.
alert(document.body.isDefaultNamespace("http://www.w3.org/1999/xhtml"); //true
//  svg      <s:svg>   
alert(svg.lookupPrefix("http://www.w3.org/2000/svg")); //"s"
alert(svg.lookupNamespaceURI("s")); //"http://www.w3.org/2000/svg"
は、ノードを取得したが、ノードとドキュメントの他の要素との関係が分からない場合には、これらの方法が有用である.
2.Dcumentタイプの変化
DOM 2級のDcumentタイプも変わりました.下記の名前空間に関する方法が含まれています.
createElementsNS(namespaceURI、tagName):与えられたtagNameを使って命名空を作成します.
間namespaceURIの新しい元素.
createAttributeNS(namespaceURI、atributeName):与えられたatributeNameを使って作ります.
名前空間namespaceURIに属する新しい特性を構築します.
getElements ByTagNameNS(namespaceURI、tagName):名前空間namespaceURIに属します.
のtagName元素のNodeListです.
これらの方法を使用する場合は、以下の例に示すように、名前空間プレフィックスではなく名前空間を表すURIに入る必要がある.
//      SVG   
var svg = document.createElementNS("http://www.w3.org/2000/svg","svg");
//                
var att = document.createAttributeNS("http://www.somewhere.com", "random");
//    XHTML   
var elems = document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "*");
は、2つ以上の名前空間がドキュメントに存在する場合にのみ、これらの名前空間に関する方法が必要である.
3.Elementタイプの変化
「DOM 2級コア」におけるElementの変化は、主に操作特性に関するものです.追加の方法は以下の通りです.
get AttributeNS(namespaceURI、local Name):名前空間に属するnamespaceURIを取得し、名前は
local Nameの特性.
get AttributeNodeNS(namespaceURI、local Name):名前空間namespaceURIに属しています.
local Nameという特性ノードです.
getElements ByTagNameNS(namespaceURI、tagName):名前空間namespaceURIに属します.
のtagName元素のNodeListです.
has AttributeNS:現在の元素にlocal Nameという名前があるかどうかを確認します.
この特性の名前空間はnamespaceURIである.注意してください.「DOM 2級コア」も一つ追加されました.
has Attribute()メソッドは、名前空間を考慮しない場合に使用します.
removeAttribteNS(namespaceURI、local Name):名前空間namespaceURIに属する名前を削除します.
local Nameの特性です.
set AttributeNS(namespaceURI、qualifedName、value):名前空間namespace-に属する設定
URIであり、かつ、qualifedNameという特性の値はvalueである.
名前空間namespaceURIに属する特性ノードを設定します.
これらの方法は、最初のパラメータに加えて、DOM 1レベルの相関方法と同じ作用を有する.最初のパラメータは常に一つの命です.
名空間URI
4.NamedNodeMapタイプの変化
NamedNodeMapタイプも下記の名前空間に関する方法を追加しました.特性はNamedNodeMapで表しています.
したがって,これらの方法は特性に対してのみ使用されることが多い.
get NamedItemNS(namespaceURI、local Name):名前空間に属するnamespaceURIを取得し、名前は
local Nameのエントリです
removeNamedItemNS(namespaceURI、local Name):名前空間namespaceURIに属しています.名前空間を削除します.
local Nameのエントリのために.
set NamedItemNS(node):nodeを追加して、このノードはすでに名前空間情報を指定しています.
要素を通して特性にアクセスするのが一般的なので、これらの方法はあまり使われません.