XMLマスター

XMLマスター(Pro V1)受験時にまとめたノウハウ集。

XSLT


トップレベル要素
xsl:import  ※トップレベル要素の中でも最初に書く
xsl:include
xsl:strip-space
xsl:preserve-space
xsl:output
xsl:key
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl:template
※ xsl:copy、element(他諸々)はトップレベル要素ではないので注意

<xsl:value-of>
以下のような場合、最初のテキストノードが1つだけ選択される。
  <xsl:template match="/">
    <xsl:value-of select="root/text()" />
  </xsl:template>

全てを選択したい場合は、以下のように記述する。(属性は対象外)
  方法1:
    <xsl:template match="/">
      <xsl:value-of select="root" />
    </xsl:template>
  方法2:
    <xsl:template match="/">
      <xsl:apply-templates select="root/text()" />
    </xsl:template>
    <xsl:template match="text()">
      <xsl:value-of select="." />
    </xsl:template>

以下のように記述すると、指定した要素に繋がっているノードが全て選択される(属性などは対象外)。
   XML文書
     <root>
       AAA
       <sub key="BBB">CCC</sub>
       <sub>DDD</sub>
       EEE
     </root>
   XSLTスタイルシート
     <xsl:template match="/">
       <xsl:value-of select="root"/>
     </xsl:template>
   出力結果
     AAA CCC DDD EEE 

デフォルトの名前空間は、ノードテストの式に影響しない。
例)
    誤: <xsl:value-of select="root/sub" xmlns="http://sample/" />
    正: <xsl:value-of select="a:root/a:sub" xmlns:a="http://sample/" />

<xsl:copy>
コピーされるのはカレントノードのみ。
名前空間ノードもコピーされるが、属性ノードはコピーされないので注意。
名前空間ノードは上位の要素ノードで宣言された全てを継承する。

<xsl:copy-of>
下位構造を含めた部分ツリーをまとめてコピーする。

他文書の読み込み
他XML文書の読み込みは、document関数(XSLT追加関数)を使用する。
他XSLTスタイルシートの読み込みは、<xsl:include>や<xsl:inport>を使用。

<xsl:include>
読み込まれた時点でテンプレート追加される。
複数インクルードした場合は、後にインクルードされたものが優先。
トップレベル要素であれば、どこに記述されてもよい。

<xsl:import>
読み込んだテンプレートよりも元のテンプレートが優先される。
但し、<xsl:apply-imports />で優先順位を変更できる。
複数インポートした場合は、後にインポートされたものが優先。
トップレベル要素、且つ先頭に記述されなければならない。

<xsl:apply-imports />
<xsl:template>要素内かつ<xsl:for-each>要素外で使用する。

<xsl:template>のmatch属性の制限
child軸、attribute軸、「/」、「//」は使用できるが、
「.」や「..」、desendant-or-self軸、変数参照($変数名)は使用できない。
主な表記方法は以下のとおり。
    text()  全てのテキストノード
    node()  全てのノード
    /       ルートノード
    *       全ての要素ノード
    @*      全ての属性ノード
    A       要素名がAという全ての要素ノード
    A | B   要素名がAまたはBという全ての要素ノード
    A / B   A要素配下のBという名の子要素ノード全て
    A // B  A要素配下のBという子孫ノード全て
    @C      Cという属性ノード全て

カレントノードの推移
カレントノードが推移する(select属性の値)
    <xsl:apply-templates>
    <xsl:for-each>
カレントノードは推移しない
    <xsl:call-template>

<xsl:call-template>
<xsl:call-template>要素内には<xsl:with-param>以外の要素を含むことができない。

変数
<xsl:variable>
    一度設定した値を変更できない
<xsl:param>
    <xsl:with-param>を使用して値を何度でも変更できる
共通(variable、param)
・変数値は、select属性または子要素として指定するが、同時に指定するとエラーとなる。
 逆に両方指定されていない場合はNullとなる。
・select属性には式を指定する。式は文字列、数値、ブール値、ノードの集合のいずれでも構わない。
・select属性値に文字列を指定する場合には注意が必要(引用符の中に引用符を使用する)。
  <xsl:variable name="x" select="'text'" />

述部へ変数を使用する場合の注意
以下の場合、予想に反して「ABC」が出力される。
    XML文書
      <root>
        <sub>A</sub>
        <sub>B</sub>
        <sub>C</sub>
      </root>
    XSLTスタイルシート
      <xsl:variable name="x">3</xsl:variable>
      <xsl:value-of select="root/sub[$x]" />

  述語で[$x]を指定すると、数値の3にはならず、真(true)となってしまう。
  ([$x]→['3']→[boolean('3')]→[true]と解釈される)

  3番目の「C」だけを出力したい場合、以下のような方法で出力する。
    方法1)
        <xsl:variable name="x" select="3" />
        <xsl:value-of select="root/sub[$x]" />
      変数値をテキストノードから属性値に切り替える。(属性値は数値型として扱われる)
    方法2)
        <xsl:variable name="x">3</xsl:variable>
        <xsl:value-of select="root/sub[position()=$x]" />
      position()関数が数値を返すので$xも数値扱いとなる
    方法3)
        <xsl:variable name="x">3</xsl:variable>
        <xsl:value-of select="root/sub[number($x)]" />

出力されるXML文書から名前空間を削除するには、xsl:stylesheet要素か、出力されるXML文書の
最上位要素に、 xsl:exclude-result-prefixes属性を追加し、属性値に削除したい名前空間の
接頭辞を指定する。

xsl:apply-templates要素のselect属性を省略した場合、select="node()"と解釈される。

XSLTスタイルシート内の要素と要素の間に含まれる空白のみのテキストノードは削除される。
    例1)<xsl:value-of select="xxx" />   <xsl:value-of select="yyy" />
                                      ↑ここの空白は削除される。
    例2)<xsl:value-of select="xxx" /> = <xsl:value-of select="yyy" />
                                      ↑ここは空白以外の文字も混在しているので削除されない。
  ※変換後ツリーに空白記号を保持したい場合は、空白保持したい要素にxml:space="preserve"属性
    を使用するか、<xsl:text>要素を指定する。

XML文書の空白のみテキストノードの扱い
  - デフォルトでは出力される。
  - XML文書内で、xml:space="preserve"属性を指定した要素(内部も含む)は空白出力される。
  - XSLTのpreserv-space要素に記述された要素名にマッチすれば空白出力される。
  - XSLTのstrip-space要素に記述された要素名にマッチすれば空白出力されない。

リテラル結果要素で構成されるスタイルシート
  スタイルシートのルート要素には、<xsl:stylesheet>、<xsl:transform>以外に、リテラル結果要素も
  使用することができる。
    書式)  <文書要素名 xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
              (テンプレート)
            </文書要素名>
    例)    <html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
               <body>
                 <xsl:value-of select="root/sub" />
               </body>                   ↑絶対パスで指定する必要があるが、ルートの"/"は
             </html>                       有っても無くても構わない。
                                           <xsl:template match="/">は使用できない。

リテラル結果要素への属性記述
  {}を使用して属性値を指定する。
    例)  <sample att="{root/sub}">

<xsl:attribute-set>
  属性セットをテンプレート外で指定し、流用することができる。
  例)  <xsl:attribute-set name="sampleSet">
          <xsl:attribute name="att1"><xsl:value-of select="/root/sub" /></xsl:attribute>
          <xsl:attribute name="att2">sample</xsl:attribute>
        </xsl:attribute-set>
        <xsl:template match="/">
          <xsl:element name="test" use-attribute-sets="sampleSet" />
        </xsl:template>

XPath

  • XPathでは、CDATAや実体参照は展開され、テキストノードの一部となる。
    よって、XPathを使用しているXSLTは、一度読み込んだXMLデータを元の形式に再現することが出来ない。

  • カレントノード
    目的のノードを指定し始める「出発地点」となるノードを指す。

  • コンテキストノード
    カレントノードから目的ノードまで経由する中で、現在処理を行っているノードを指す。

  • 主な軸の種類
        child               コンテキストノードの全ての子を選択する
        descendant                       〃           子孫  〃
        parent                           〃           親    〃
        ancestor                         〃           祖先  〃
        attribute                        〃           属性  〃
        namespace                        〃           名前空間  〃
        following-sibling   コンテキストノードから文書順で後に続く兄弟ノードを全て選択する
        preceding-sibling                〃               前             〃
        self                コンテキストノード自身を指す
  • ロケーションステップの構成

        preceding-sibling::element[position()=2]/child::element
        └───┬───┘└─┬┘└───┬─┘│            │
        │      軸         ノードテスト  述部 ││            │
        └────────┬─────────┘└──┬───┘
        │      ロケーションステップ      ロケーションステップ│
        └────────────┬─────────────┘
                            ロケーションパス
        軸           … コンテキストノードからみて、選択するノードを含む範囲を指定する
        ノードテスト … 選択するノードのノード型や名前を指定する
        述部         … 選択するノードの集合を、式を使用してさらに細かく選別する
  • 述部について

    順番を指定する場合、XPathは1から始まる(DOMは0から始まるので混乱しないように)。
        例:/child::A/child::B[2]
            A要素配下の2つ目のB要素を選択している。
    軸の方向
        ancestor軸、ancestor-or-self軸、preceding軸、preceding-sibling軸は逆順になるので注意。
        例)
          XML文書
            <root>
              <sub>A</sub>
              <sub>B</sub>
              <sub>C</sub>←─┐
            </root>           │
          コンテキストノードが3番目の<sub>要素を指している時、
          preceding::sub[1] では、 B を指す。
          (preceding::sub)[1]では、A を指す。
    
    文字列による絞り込み
        [要素="値"]  例えば、<child>XSLT</child> という子要素を持つparentを選択する
                     ロケーションステップは、 parent[child="XSLT"] となる。

    省略記法

    正式な記法省略記法
    child::
    attribute::
    /descendant-or-self::node()/
    self::node()
    parent::node()
    (何も書かない)
    @
    //
    .
    ..
    例)
    attribute::type  → type属性
    child::para      → 子となるpara要素
    child::*         → 子となるすべての要素ノード(テキスト、処理命令、コメントは含まない)
    child::node()    → 子となるすべてのノード(child::* との違いに注意)
  • XPathのルートノード
    XPathのデータモデルで最上位にくるものはルートノード。
    ルートノードはducument element(文書要素)のノードの親ノードとなる。

  • 主なXPath関数

      - ノードセット関数(ノード集合関数)
        position()                     ノードの位置を表す数値を返す
        last()                         ノードの総数を表す数値を返す
        local-name(node-set)           ノードセット内の最初のノードのローカル名を返す
        namespace-uri(node-set)        ノードの名前空間URIを返す
        name(node-set)                 ノードセット内の最初のノードの名前を返す
      - 文字列関数
        normalize-space(string1)       文字列の空白を正規化(例:『  a   b c   』⇒『a b c』)
                                       ※normalize()はDOMの関数なので注意。
        concat(string1,string2,...)    連結した文字列を返す
        contains(string1,string2)      string1にstring2が含まれているか判断
      - 論理値関数(ブール関数)
      - 数値関数

DOM

  • DOMのエディションはDOMのバージョンと同じ意味。
    ※DOMレベルとは別物なので注意。

  • DOMレベル1とDOMレベル2の主な違いは、「機能のモジュール化」、「名前空間のサポート」、
    「Documentオブジェクトの新規作成」、「ノードのインポート」など。
    Levelごとのモジュール

    DOM Level1Core、HTML
    DOM Level2Views、Style、Traversal-Range、Events
  • DOM Level 2では、12個の基本インターフェース、6個の拡張インターフェースが定義されている。

  • DOMでは、読み取れるDTDの情報は以下の項目だけ。
    直接「要素型宣言」を取得したり、新規作成することはできない。

    • DTDの名前
    • 記法宣言(notation)、実体宣言(entity)
    • 内部サブセットの内容(テキスト)
    • 外部サブセットの公開識別子およびシステム識別子
  • DOM Level 2では妥当性検証を扱っていない。
    (独自で実装しているXMLパーサもあるが、正式にはDOM Level3でサポート予定)

  • DOMはXML文書の処理過程で正規化などを行うため、DOMツリーが元のXML文書と物理的に全く
    同じとは限らない。

  • DOMでは実体参照と文字参照は展開してDOMツリーに読み込まれる。
    例)「<」は「<&」に展開される。

  • CDATAセクションは文字データとして扱われ、前後の文字を連結して出力される。

  • DOMでは空白(改行コード、タブ、スペースなど)についての扱いを明確に定義していない。
    Textオブジェクトとして認識されたり、無視されたりと、XMLパーサによって扱いが異なる。

  • DOM APIは全てインターフェースであり、クラスの実装に関しては扱っていない。

  • appendChild、insertBefore、replaceChildはノードを移動するためのメソッド。
    参照元のノードが削除されるので注意。通常は、createElementなどで要素を作成し、その要素に対して
    処理を行うが、既存の要素を参照元として使用する場合、その参照元ノードは移動されてしまう。
    移動でなく、コピーしたい場合は、cloneNode、importNodeなどを使用する。

  • DOMのデータ型
    以下の2種類のデータ型が存在する

    • DOMString … DOMで使用する文字列
    • DOMTimeStamp … ミリ秒数で表された時刻
  • ノードの操作

    replaceChild置き換え
    insertBefore前に挿入
    removeChild削除
    appendChild最後に追加
    cloneNode(※)同一のDOMツリー内からコピー
    importNode(※)別XML文書からコピー

    ※第2引数にfalseを指定した場合、子孫ノードはコピーされないが、名前空間、属性はコピーされる。

  • NamedNodeMap型を返すアトリビュートは、attributes、entities、notationの3つ。

  • getElementsByTagNameメソッドの検索範囲

    対象がDocumentノードの場合文書全体。
    対象がElementノードの場合子孫要素(カレントノードは含まない)。
  • 要素内の文字列はElementノードのnodeValueで取得するのではなく、TextノードのnodeValueで取得。
    ※以下のような似た名前にも注意。
    「value」は、DOMのAttrオブジェクトで使用するプロパティ名。
    「getValue」は、SAXのAttributeオブジェクトで使用するメソッド名。

  • 属性ノード(Attrオブジェクト)の取得方法

    • 方法1(属性リストから取得)
      Elementオブジェクトのattributes属性(Nodeから継承)でNamedNodeMapを取得し、そこからitemや、
      getNamedItemメソッドを使用し、Attrオブジェクトを取得。
    • 方法2(属性名から取得)
      ElementオブジェクトのgetAttributeNodeメソッドを使用してAttrオブジェクトを取得。
      ※直接、属性値(テキスト)を取得する方法として、ElementオブジェクトのgetAttributeを
      使用することもできる。
  • DOMの属性ノードは子ノードとしてテキストノードを持つが、XPath(XSLT)のアトリビュートは
    子ノードを持たない。

SAX

  • SAX2で新しく追加された機能
    ・名前空間のサポート
    ・string-interning(文字列プーリング:効率良く文字列参照)
  • charctersイベント
    SAXで、『 a<b>c 』を読み込んだ場合、charctersイベントは3回通知される可能性がある
    (XMLパーサの実装に依存する)。
    また、実体参照は変換されるので『 ac 』と出力される。
  • SAXでは改行、空白、インデントは「空白文字」として扱われ、これら空白文字はcharactersイベントとして発生する。
    「改行、インデント」と続いているような場合、複数回イベントが発生する。
    また、妥当性検証によって、これら意味の無いcharactersイベントを抑えることも可能。
    これら無視できる空白文字は、妥当性検証を有効(※)にすることにより、ignorableWhitespaceイベント
    として通知することもできる。
    ※妥当性検証を行わないSAXパーサで解析した場合、ignorableWhitespaceは通知されない。
    ※妥当性検証が有効でもDTD宣言に「root(sub|#PCDATA)*」のように、テキストを有効としている場合はignorableWhitespaceは呼ばれない。
  • 妥当性検証、名前空間の使用
    SAXで妥当性検証を行いたい場合、フィーチャー(Feature)を以下のように設定する。
    XMLReaderインターフェイスのsetFeatureメソッドを使用し、URIとtrueを指定する。
    setFeature("http://xml.org/sax/features/varidation",true)
    名前空間の機能を使用する場合も同様(URIが異なるのみ)。
    setFeature("http://xml.org/sax/features/namespaces",true)
    名前空間接頭辞付きの機能を使用する場合も同様(URIが異なるのみ)。
    setFeature("http://xml.org/sax/features/namespaces-orefixes",true)
  • startElementメソッドでは、名前空間URI、ローカル名、修飾名、属性リストを取得できる。
  • SAXのパッケージ

    [パッケージ]
    org.xml.sax
        [インターフェイス]
        Attributes
        ContentHandler
        DTDHandler
        ErrorHandler
        EntityResolver
        Locator
        XMLFilter
        XMLReader
    org.xml.sax.helpers
        [クラス]
        Attributeslmpl
        DefaultHandler
        Locatorlmpl
        NamespaceSupport
        ParserAdapter
        XMLFilterlmpl
        XMLReaderAdapter
        XMLReaderFactory
    org.xml.sax.ext (SAX2 Extensionsを含んでいる)
        [インターフェイス]
        DeclHandler
        Lexicalandler

    ※これら拡張イベントハンドラを使用するためには、インターフェースを実装するだけでなく、XMLReaderのsetPropertyメソッドで設定を行う。

Webサービス

  • 各XML文書のルート要素名について

    ルート要素名
    XML-Signature
    XML Encyption
    WSDL
    UDDI
    SOAP
    Signature
    EncryptedData
    wsdl:difinitions
    businessEntity
    SOAP-ENV:envelope
  • UDDIレジストリのデータ構造

    ┌──────────────┐
    │┌────────────┐│
    ││businessEntity          ││… ビジネス情報
    ││┌──────────┐││   企業名、連絡先、ID番号など(White Pageで検索)
    │││businessService     │││… サービス情報
    │││┌────────┐│││   業種、製品/サービス、場所(Yellow Pageで検索)
    ││││bindingTemplate ││││… バインド情報
    ││││            ↑  ││││   技術情報、アクセスポイント(URL)、tModelへの参照
    │││└──────┼─┘│││                             (Green Pageで検索)
    ││└───────┼──┘││
    │└────────┼───┘│
    │        ┌────┼──┐  │
    │        │tModel  ↓    │  │… サービス記述
    │        └───────┘  │   具体的な仕様の記述など
    └──────────────┘
  • WSDLの構造

    <definitions>
        名前空間を定義
        <types>データ型を定義</types>
        <message>データの集合を定義</message>
        <portType>
            <operation>message要素の種類を指定</operation>
        </portType>
        <binding>フォーマットを定義</binding>
        <service>
            <port>URI</port>
        </service>
    </definitions>
  • セキュリティ

    • Canonical XML
      文書全体を正規化
    • Exclusive XML Canonicalization
      部分的な正規化
    • XML Signature
      電子署名
    • XML Encryption
      暗号化(XML全体/一部どちらでも可)
  • XMLのセキュリティの手順

    1. 正規化
    2. 電子署名の追加
    3. 暗号化
  • XML Signatureによる電子署名の手順

    1. ダイジェスト値の算出
    2. ダイジェスト値を秘密鍵で暗号化
    3. 署名としてXML文書に添付
  • 正規化のルール

    • 文字のエンコーディング方式をUTF-8に統一
    • 改行文字は#A
    • 属性の表記順は辞書順
    • 文字参照やパース可能なEntity参照を展開
    • CDATAセクションを内容に置き換える
    • XML宣言、DTD宣言は出力しない
    • 空要素は、開始タグと終了タグを続ける
  • SOAPについて

    • SOAPはW3Cの勧告ではなく、W3Cの技術ノートとして公開されている。
    • SOAPをHTTPを使用しリクエストする場合、SOAPActionというHTTPヘッダを付ける。
    • SOAPエンコーディングは大きく分けて、単純型、複合型の二種類がある。
      複合型は更に、構造型、配列の二種類に分けられる。
  • SOAPメッセージの形式

    <SOPA-ENV:Envelope 
     xmlns:SOPA-ENV="http://schemas.xmlsoap.org/soap/envelope/"
     soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >
        Envelope要素で名前空間の指定やエンコーディングの指定を行う。
        名前空間の宣言は必ずこのルート要素で行う。
        <SOAP-ENV:Header>
            Header要素はオプション。指定する内容は自由。
            <s:sample xmlns:s="http://sample" 
             SOAP-ENV:mustUnderstand="1" SOAP-ENV:actor="http://sample/actor"> 
                処理を強制させたい要素がある場合は、その要素にactor、mustUnderstand属性を指定する。
                ・mustUnderstand属性:"0"か"1"を指定。"1"を指定した場合、この要素の処理を強制する。
                                      もし処理できなかった場合、エラーとして返しそれ以上先に進めない。
                ・actor属性:処理して欲しい中継サーバのURIを指定。
            </s:sample>
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>
            Body要素は必須。指定する内容は自由。エラーが発生した場合、Fault要素を使用する。
            <SOAP-ENV:Fault>
                Fault要素にはエラー情報を格納する。Fault要素内では名前空間を指定しない。
                <faultcode>
                    必須:エラーは以下の4種類。
                    SOAP-ENV:VersionMismatch,SOAP-ENV:MustUnderstand,SOAP-ENV:Client,SOAP-ENV:Server
                </faultcode>
                <faultactor>必須:エラー発生元URI。</faultactor>
                <faultstring>エラーの概要。</faultstring>
                <detail>エラー詳細内容。任意の子要素も追加できる。</detail>
            </SOAP-ENV:Fault>
        </SOAP-ENV:Body>
    </SOPA-ENV:Envelope>

模擬問題

以下の模擬問題は、実際に出題された問題を思い出して作成したものです。
細かいところまで憶えていないので悪しからず。


【例題1】
DOMでa.xmlの「ns:testA」属性を、inportNodeでb.xmlの「ns:root2」要素の属性としてコピーした場合、
b.xmlは、どのような結果になるか。

a.xml
  <ns:root1 xmlns:ns="http://sampleA" /><sub ns:testA="TEST1" /></ns:root1>
b.xml
  <ns:root2 xmlns:ns="http://sampleB" ns:testB="TEST2" />

A. <ns:root2 xmlns:ns="http://sampleB" ns:testB="TEST2" ns:testA="TEST1" />
B. <ns:root2 xmlns:ns="http://sampleA" ns:testB="TEST2" ns:testA="TEST1" />
C. <ns:root2 xmlns:ns="http://sampleB" ns:testA="TEST2"
    xmlns:ns="http://sampleA" ns:testA="TEST1" />
D. <ns:root2 xmlns:ns="http://sampleB" ns:testB="TEST2"
    ns2:testA="TEST1" xmlns:ns2="http://sampleA" />

予想される正解:D
  I.E.で動作確認するとDが近い。
  接頭辞は、"ns2"ではなく"dlpl"と出力されたが、これはXMLパーサの実装に依存する?

【例題2】
XML-Signatureで電子署名を追加するときに必要な作業として、間違えているものを1つ選べ。

A. Canonical Form
B. 暗号キーの作成
C. ダイジェストの計算
D. 名前空間の削除

予想される正解:D
  Canonical Formは、正規化を意味しているようです。
  また、XML-Signatureは、名前空間も含む事ができます。多分。

【例題3】
test.xmlを読み込み、test.xslを実行し「B」を出力したい。【1】 に入れる正しい述部を全て選べ。

test.xml
  <?xml version="1.0" ?>
  <root>
    <sub x="1" y="2">A</sub>
    <sub x="3" y="4">B</sub>
  </root>

test.xsl
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:template match="/">
    <xsl:value-of select="root/sub 【1】 " />
  </xsl:template>
  </xsl:stylesheet>

A. [@x="3"][@y="4"]
B. [@x='3'][@y='4']
C. [@x='3' | @y='4']
D. [@x=3] || [@y=4]
E. [@x='3'][//sub/text()='B']

正解:B、E
  Aは、ダブルクォーテーションの中にダブルクォーテーションを指定しているのでエラーです。
  ちなみに、シングルクォートを外してもI.E.で動作します([x=3][y=4])。
  これも対策本では出てこない問題なので注意が必要です。

断片的ですが、その他に以下のような問題がありました。


  • XMLパーサにはDOMが必ず必要か? →NO
  • XMLパーサにはSAXが必ず必要か? →NO
  • WebサービスでWSDLを省略した場合、SOAPのエンコーディングしか使用できない? →NO?
  • SOAPにDTDを追加して妥当性検証することができるか? →NO?
  • SOAPのエンコーディングはXML Schemaでしか出来ない? →NO
  • SAXで、要素が見つからなかった場合、どのインターフェースで処理が行われるか? →?
  • SOAPのBody要素は2つ書ける? →NO?
  • DOMで、prefix(接頭辞)は書き換え可能か(子孫ノードの接頭辞の影響範囲も要確認)? →YES
  • DOMで、element(要素名)は書き換え可能か? →NO

おまけ

  • 問題文は結構抽象的な言葉が多いです。例えば以下のような問題が出題されました。

    例題)
        XSLTで他の文書を読み込みたいときに使用するものはどれか。
    
        A. xsl:import
        B. xsl:include
        C. document()
        D. 他の文書を読み込む手段はない。
    
    この例題で指している「文書」とは「XSLTシート」ではなく「XML文書」を指しているので答えは多分
    Cのdocument()関数になると思います。
  • 3階層アプリケーションでXMLが使用できる層を選ぶ問題は、対策本によって答えが異なりました。
    実際の試験問題を見た感じですと、「プレゼンテーション層」「ロジック層」「データ層」全てでXMLが使用可能というのが答えのようです。多分。

  • はっきり言って対策本無しでは合格は困難です。
    しかも最低2冊以上読まないと合格は難しいです。(⇒@IT記事)
    私のお勧めの対策本は以下です。

        [1]@ITハイブックス 徹底攻略XMLマスター教科書 
        [2]翔泳社 XMLマスター教科書 
        [3]技術評論社 標準XML完全解説(下) 
        [4]iStudy
        [5]W3Cの仕様書(日本語訳は⇒http://www.doraneko.org/xml/ )

    XMLマスターV2・プロフェッショナル向け対策本

    [1]@ITハイブックス
    徹底攻略XMLマスター教科書
    [2]翔泳社
    XMLマスター教科書
    [3]技術評論社
    標準XML完全解説(下)
    [4]XMLマスター教科書+iStudy プロフェッショナルV2
    XMLマスター教科書 プロフェッショナル V2徹底攻略 XMLマスター教科書 プロフェッショナル編標準XML完全解説〈下〉XMLマスター教科書+iStudy プロフェッショナルV2

    お勧めする学習順序は、XMLマスター教科書 プロフェッショナル V2を勉強し、少し難しい徹底攻略 XMLマスター教科書 プロフェッショナル編にステップアップし、解らない部分をその都度標準XML完全解説〈下〉で徹底的に調べる。
    といった感じだと思います。

    ちなみに、XMLマスター・ベーシックは以下の対策本がお勧めです。


    徹底攻略XMLマスター ベーシック問題集 V2試験対応

    XMLマスター教科書 ベーシックV2

    標準XML完全解説〈上〉

    by AffiliSearch