XMLマスター

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 Level1 Core、HTML
    DOM Level2 Views、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ツリーに読み込まれる。
    例)「&lt;&#26;」は「<&」に展開される。
  • 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&lt;b&gt;c 』を読み込んだ場合、charctersイベントは3回通知される可能性がある
    (XMLパーサの実装に依存する)。
    また、実体参照は変換されるので『 a<b>c 』と出力される。
  • 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