サンプル試験問題

XMLマスター:プロフェッショナル(データベース) 試験

 
セクション1: XMLデータのDB化に関する概要
問題1.

XQuery 1.0に適合するXQueryプロセッサとして、すべてのプロセッサに必ず要求されている機能を以下の選択肢から2つ選択してください。

A. DTDに対して妥当で、さらに「Namespaces in XML」または「Namespaces in XML 1.1」仕様に適合しているXMLデータを処理する
B. XML Schema定義を読み込み、定義内の要素宣言と属性宣言から要素と属性の型情報を得る
C. 「XQuery 1.0 and XPath 2.0 Functions and Operators」仕様で定義されているすべての関数(function)をサポートする
D. クエリー結果をシリアライズする(一列のオクテットデータとして直列化する)

サンプル試験問題Indexへ戻る

 
セクション2: XQuery、XPath式
問題2.

次の[example.xml]に対してXQueryによる問い合わせを実行して以下の[出力結果]を得たい。 [出力結果]を得ることのできる正しいXQueryをひとつ選択してください。 ただし[example.xml]のlog要素のcode属性値は、list要素のcode属性の値と一致するものとなっています。

[example.xml]
<logList>
  <list code="w001" message="警告1"/>
  <list code="w002" message="警告2"/>
  <list code="e001" message="エラー1"/>
  <list code="e002" message="エラー2"/>
  <day date="2007-12-01">
    <log time="10:00:00" code="w001"/>
    <log time="14:00:00" code="e001"/>
  </day>
  <day date="2007-12-02">
    <log time="13:00:00" code="e002"/>
    <log time="15:00:00" code="e001"/>
</day>
</logList>

[出力結果]
<result>
  <log date="2007-12-01" time="10:00:00" message="警告1"/>
  <log date="2007-12-01" time="14:00:00" message="エラー1"/>
  <log date="2007-12-02" time="13:00:00" message="エラー2"/>
  <log date="2007-12-02" time="15:00:00" message="エラー1"/>
</result>

A.
<result>{
  let $doc := fn:doc("example.xml")
  for $log in $doc//log
  return
    <log>{
      $log/../@date,
      $log/@time,
      $doc//list[@code eq $log/@code]/@message
    }</log>
}</result>

B.
<result>{
  let $doc := fn:doc("example.xml")
  for $log in $doc//log
  return
    <log>{
      ../@date,
      @time,
      ../../list[@code = $log/@code]/@message
    }</log>
}</result>

C.
<result>{
  let $doc := fn:doc("example.xml")
  for $day in $doc//day
  return
    <log>{
      $day/@date,
      $day/log/@time,
      $doc//list[@code eq $day/log/@code]/@message
    }</log>
}</result>

D.
<result>{
  let $doc := fn:doc("example.xml")
  for $day in $doc//day
  return
    <log>{
    @date,
      log/@time,
      ../list[@code = $day/log/@code]/@message
    }</log>
}</result>

サンプル試験問題Indexへ戻る

 
セクション3: XMLDBの操作
問題3.

あるXMLDBは、XML文書をXML Information Set(Infoset)に基づいたモデルで保存し、保存したXMLデータをXQueryで取り出すことができるものとする。次の[example.xml]をXMLDBに格納し、その後XMLDBからXMLデータを取り出す手順を説明する次の文章のうち、誤っているものを2つ選択してください。この設問ではXML文書の改行やインデントによる無意味な空白を考慮します。

[example.xml]
<content lang="English"
     category="literature
        classic">silence<space> </space>...
silence</content>

A. XQueryでcontent要素を取得した場合、content要素のlang属性とcategory属性の順序は、必ずcategory属性の方が先である
B. XQueryでcontent要素を取得した場合、category属性値内の改行文字は、半角スペースに置き換えられている
C. XQuery「fn:string(fn:doc("example.xml")/content)」の実行結果は次のものである(XMLDB内のXMLデータを「fn:doc("example.xml")」で参照できるものとする)
silence ...
silence
D. XQuery「fn:doc("example.xml")/content//text()」の実行結果は次のものである(XMLDB内のXMLデータを「fn:doc("example.xml")」で参照できるものとする)
silence ...silence

サンプル試験問題Indexへ戻る

 
セクション4: XMLデータ構造の設計
問題4.

ある会社では社員の氏名情報をXMLデータで管理しているものとする(設問のためにデータ等を単純化している)。社員の氏名情報に関する現在の運用方法は以下の通りである。

▽▽「現在」の運用方法▽▽
XMLデータは以下のものである。
(name要素のid属性値はXML文書内で一意である)

[example.xml]
<data>
    <name id="1">山田太郎</name>
    <name id="2">鈴木一郎</name>
</data>

XMLデータから氏名情報を取得する際には次の[XQuery]を実行している。
(変数$idに、いずれかのname要素のid属性値をセットしたうえでクエリーを実行している)

[XQuery]
declare variable $id := "1";
fn:string(fn:doc("example.xml")//name[@id eq $id])

ここで氏名情報を姓と名に分けて管理することとなったため、XMLデータの構造を変更することにした。今後の運用方法は以下の通りである。

▽▽「今後」の運用方法▽▽
既存の[example.xml]を、次に示すDTDに従ったXMLデータに修正する。つまり既存のname要素の内容文字列を2つ(いずれも空文字列ではない)に分け、それぞれをLastNameとFirstName要素の内容文字列とする。(たとえば氏名情報が「山田太郎」の場合、「山田」がLastName要素の内容文字列となり、「太郎」がFirstName要素の内容文字列となる)ただし新しいXMLデータに文書型宣言はない。

[新しい構造を定義するDTD](ルート要素(文書要素)はdata要素である)
<!ELEMENT data (name)*>
<!ELEMENT name (LastName, FirstName)>
<!ATTLIST name id NMTOKEN #REQUIRED>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT FirstName (#PCDATA)>

このとき「現在」の[XQuery]を修正しないとした場合に、以下の選択肢のうち適切なものをひとつ選択してください。

A. 同じname要素(たとえばid属性値が"1")に対する[XQuery]の実行結果は、「現在」と比較して、「今後」も必ず同じである
B. 同じname要素(たとえばid属性値が"1")に対する[XQuery]の実行結果は、「現在」と比較して、「今後」は必ず異なる
C. 同じname要素(たとえばid属性値が"1")に対する[XQuery]の実行結果は、「現在」と比較して、「今後」は異なる場合が考えられる

サンプル試験問題Indexへ戻る

ページトップへ▲

HOMEへ戻る