| 
                         XMLとデータベース 
	ADO、ASPとの連携について 
	                    (株)日本ユニテック 
                          竹内 理 
	
  
	目次<全10ページ>
  
	
	| 
	
	
	
	
	
	 5.STEP3:永続化されたレコードセットの中身を検証する 
	
	
	
	
	
	 
	 |  
	
 
  
STEP3:永続化されたレコードセットの中身を検証する
STEP2ではSTEP1で永続化したレコードセット、つまりADOが生成したXMLファイルを再びレコードセットとして読み込むことができました。ではどんなXMLファイルであってもRecordsetオブジェクトはオープンできるのでしょうか。「いいえ」というのがその答えです。
  
ADOは決まった形式のXMLファイル以外を開くことはできません。では、STEP1で出力されたXMLファイルを詳しく見ることにより、その基本的な形式を理解しましょう。このようなファイルが出力されました。 
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
   xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
   xmlns:rs='urn:schemas-microsoft-com:rowset' 
   xmlns:z='#RowsetSchema'>  
<s:Schema id='RowsetSchema'>  
   <s:ElementType name='row' content='eltOnly' rs:updatable='true'>  
       <s:AttributeType name='Name' rs:number='1' rs:nullable='true' rs:write='true' rs:basetable='person' rs:basecolumn='Name'>  
           <s:datatype dt:type='string' dt:maxLength='50'/>  
       </s:AttributeType>  
       <s:AttributeType name='Age' rs:number='2' rs:nullable='true' rs:write='true' rs:basetable='person' rs:basecolumn='Age'>  
           <s:datatype dt:type='i2' dt:maxLength='2' rs:precision='5' rs:fixedlength='true'/>  
       </s:AttributeType>  
       <s:extends type='rs:rowbase'/>  
   </s:ElementType>  
</s:Schema>  
<rs:data>  
   	<z:row Name='C.Mansfield' Age='22'/>  
   <z:row Name='F.S.Fitzgerald' Age='35'/>  
</rs:data>  
</xml>
 | 
 
 
<リスト3.XMLファイルに永続化されたレコードセット(adors.xml)>
  
では、それぞれの要素について見ていきましょう。
  
<xml>要素:まず、永続化されたレコードセットは<xml>というルート要素をもっています。この要素の中では4つの名前空間を宣言しています。「s」(これらの識別子は任意でつけることができます)はXDR(Xml Data Reduced:XMLスキーマ定義のひとつ)に基づいており、レコードセットのスキーマを定義する要素と属性を含みます。「dt」はデータ型定義指定です。「rs」はレコードセットの要素と属性を定義します。そして最後に「xmlns:z='#RowsetSchema'」が定義されています。これは「z」という識別子を持つ要素(この例でいくと<z:row Name='F.S.Fitzgerald' Age='35'>など)が属性id='RowsetSchema'を持つ要素<s:Schema>で定義されているスキーマを参照することを示すものです。
  
<s:Schema>要素:この要素はこのレコードセットの構造を記述する部分です。いわゆるスキーマと考えてよいでしょう。前述したようにid属性を持ち、キーワード(ここではRowsetSchemaですが、実際には任意で名前をつけられます)を指定します。
  
<s:ElementType>要素:<s:Schema>は<s:ElementType>という子要素をもちます。この例の場合、<s:ElementType>要素は元のデータベースのPersonテーブルの列定義をまとめたものといえます。この要素のname属性は重要です。後に記述するデータ部はこのname属性の値を参照してレコードを<s:ElementType>要素内でなされている列定義と関連付けるからです。また、rs:updatable='true'となっていることに注意してください。属性rs:updatableがtrueであればこのレコードセットの更新を認める、という意味になります。これはSample1.aspでRecordsetオブジェクトのプロパティlockTypeを「更新可」の状態にしているためです。
  
<s:AttributeType>要素:ひとつの列の定義を表します。属性nameは列名です。またrs:write='true'となっていることに注意してください。rs:writeがtrueであれば、この列が書き込み可能であることを示しています。
  
<s:datatype> 要素:<s:datatype>要素にはその列のデータ型を記述します。属性dt:typeに指定できる型の詳細についてはhttp://www.w3.org/TR/1998/NOTE-XML-data-0105/#Datatypesをご覧ください。
  
<rs:data>要素:このレコードセットの実際のデータを記述します。
  
<z:row>要素:1つの<z:row>要素で1行のデータを持ちます。名前空間識別子「z」はこのレコードが<s:Schema>要素内で定義されたスキーマを参照することを表します。またローカルネーム「row」は属性nameが「row」である<s:ElementType>要素内で定義された列の定義を参照することを意味します。また、各属性はs:AttributeTypeで定義された各列に入れる値を設定します。<z:row Name='C.Mansfield' Age='22'/>はName、Ageの各列の値がそれぞれC.mansfiled、22であることをあらわしています。
  
<rs:insert>、<rs:update>、<rs:delete>要素:adors.xmlにはありませんが、ADOは変更を行ったレコードセットを永続化する際に、その変更情報も保存します。例えば、レコードセットにaddnewメソッドを使用してレコードを追加した場合は<rs:data>要素の子要素として<rs:insert>要素が出力されます。 
<rs:insert> 
  <z:row Name='O.Henry' Age='38'/> 
</rs:insert>
 
同じようにupdateの場合、変更情報は次のように出力されます。
<rs:update> 
  <rs:original> 
    <z:row Name='C.Mansfield' Age='22'/> 
  </rs:original> 
  <z:row Name="W.Faulkner" Age="24"/> 
</rs:update>
 
これは、"C.Mansfield"、"22"の行のデータを"W.Faulkner"、"24"に更新したことを示します。
  
またdeleteの場合は、削除された行が通常の行リストから除かれ、変わりに次のような出力がされます。 
<rs:delete> 
  <z:row name="C.Mansfield" Age="22"/> 
</rs:delete>
 
実際に変更がなされたレコードセットを永続化したファイルを以下に示しておきます。 
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
   xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
   xmlns:rs='urn:schemas-microsoft-com:rowset' 
   xmlns:z='#RowsetSchema'>  
<s:Schema id='RowsetSchema'>  
   <s:ElementType name='row' content='eltOnly' rs:updatable='true'>  
       <s:AttributeType name='Name' rs:number='1' rs:nullable='true' rs:write='true' rs:basetable='person' rs:basecolumn='Name'>  
           <s:datatype dt:type='string' dt:maxLength='50'/>  
       </s:AttributeType>  
       <s:AttributeType name='Age' rs:number='2' rs:nullable='true' rs:write='true' rs:basetable='person' rs:basecolumn='Age'>  
           <s:datatype dt:type='i2' dt:maxLength='2' rs:precision='5' rs:fixedlength='true'/>  
       </s:AttributeType>  
       <s:extends type='rs:rowbase'/>  
   </s:ElementType>  
</s:Schema>  
<rs:data>  
   <rs:update>  
       <rs:original>  
           <z:row Name='C.Mansfield' Age='22'/>  
       </rs:original>  
       <z:row Name='W.Faulkner' Age='24'/>  
   </rs:update>  
   <z:row Name='F.S.Fitzgerald' Age='35'/>  
   <rs:insert>  
       <z:row Name='O.Henry' Age='38'/>  
   </rs:insert>  
</rs:data>  
</xml>
 | 
 
 
<リスト4.変更をしたレコードセットの永続化XMLファイル>
上の例はレコードセットにデータの追加と更新の処理を行い、その後永続化した場合のXMLファイルです。<rs:data>の子要素がどのようになっているかに注目してください。 
以上でADOが永続化するレコードセットの内容を見ることができました。このような基本的な形式を知ることにより、永続化されたXMLファイルの利用の幅が広がります。 
  
 
  
  
  
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
    
   
  
  
関連キーワード: ADO
   
    
    
    
   
  
  
  
  
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
    
   
  
  
関連キーワード: ASP
   
    
    
    
   
  
  
  
  
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
  
   
    
   
  
  
関連キーワード: データベース
   
    
    
    
   
  
 
 
 
  
 |