OpenLaszloはXML形式のデータを取り扱うことができます。データはプログラムソースの中に埋め込んでも良いし、
プログラム中に書く場合は固定的なデータを格納しておく用途、
<dataset>、XPath、レプリケーション
OpenLaszloでXMLデータを扱うためにまず習得する必要があるのは<dataset>、
リスト1のXMLデータをOpenLaszloで取扱ってみましょう。LZX自体もXML形式なのでややこしいですが、
<daimyou address="清須">
<sei>織田</sei>
<mei>信長</mei>
</daimyou>
リスト1のXMLデータをOpenLaszloで表示するにはリスト2のように書きます。
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds">
<daimyou address="清須"><!--(1)-->
<sei>織田</sei>
<mei>信長</mei>
</daimyou>
</dataset>
<text datapath="ds:/daimyou/sei/text()"/><!--(2)-->
<text datapath="ds:/daimyou/mei/text()"/>
<text datapath="ds:/daimyou/@address"/><!--(3)-->
<simplelayout axis="x"/>
</canvas>
リスト2 サンプル
リスト2の(1)について、
リスト2の(2)について、
リスト2の(3)について、
次にレプリケーションについて。リスト3とそのサンプルデモを見比べてください。
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds">
<person>
<daimyou name="織田信長" />
<daimyou name="豊臣秀吉" />
<daimyou name="徳川家康" />
<daimyou name="武田信玄" />
<daimyou name="上杉謙信" />
</person>
</dataset>
<text datapath="ds:/person/daimyou/@name"/>
<simplelayout/>
</canvas>
リスト3 サンプル
リスト3のXMLデータは5人分あるのに、
<canvas proxied="false" bgcolor="0xffffcc">
<text>織田信長</text>
<text>豊臣秀吉</text>
<text>徳川家康</text>
<text>武田信玄</text>
<text>上杉謙信</text>
<simplelayout/>
</canvas>
リスト4 サンプル
リスト5では1人分のデータを横並びにして、
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds">
<person>
<daimyou address="清須">
<sei>織田</sei>
<mei>信長</mei>
</daimyou>
<daimyou address="大阪">
<sei>豊臣</sei>
<mei>秀吉</mei>
</daimyou>
<daimyou address="岡崎">
<sei>徳川</sei>
<mei>家康</mei>
</daimyou>
</person>
</dataset>
<hbox datapath="ds:/person/daimyou"><!--(1)-->
<text datapath="sei/text()"/><!--(2)-->
<text datapath="mei/text()"/>
<text datapath="@address"/>
</hbox>
<simplelayout/>
</canvas>
リスト5 サンプル
リスト5の(1)で、
リスト5の(2)は、
外部XMLファイル、リモートXMLデータの取得
XMLデータを外部ファイルにすることができます。リスト6のように<dataset>のsrc属性でファイル名を指定します。
<dataset name="ds" src="mydata.xml"/>
バックエンドのプログラムからXMLデータを取得する場合は、
<dataset name="ds" src="getdata.php" request="true" type="http" />
または
<dataset name="ds" src="http://xxx.xxxx.xxx/getdata.php" request="true" type="http" />
XMLデータの構造が同じなら、
データコンポーネント
<dataset>を使ったデータアクセスが前提のコンポーネントを紹介します。HTMLでいうと<table>で表現される表のコンポーネントです。
<grid>
XMLデータを表形式で表示するコンポーネントです。<grid>は入れ物のタグで、
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds" >
<root>
<data data1="CCC" data2="888" data3="たちつてと"/>
<data data1="FFF" data2="555" data3="まみむめも"/>
<data data1="AAA" data2="333" data3="さしすせそ"/>
<data data1="DDD" data2="444" data3="あいうえお"/>
<data data1="EEE" data2="222" data3="なにぬねの"/>
<data data1="BBB" data2="666" data3="はひふへほ"/>
<data data1="III" data2="777" data3="かきくけこ"/>
<data data1="HHH" data2="111" data3="やゆよ"/>
<data data1="GGG" data2="999" data3="らりるれろ"/>
<data data1="JJJ" data2="000" data3="わをん"/>
</root>
</dataset>
<grid datapath="ds:/root" >
<gridtext datapath="@data1">英字</gridtext>
<gridtext datapath="@data2">数字</gridtext>
<gridtext datapath="@data3">ひらがな</gridtext>
</grid>
</canvas>
リスト8 サンプル
リスト8の<grid>はデフォルト状態ですが、
<grid>の見た目や動作を変える細かい設定はリファレンスを参照してください。何が指定できるかをざっと紹介すると、
XPathについて
XMLデータにアクセスする構文XPathはW3Cの標準ですが、
<canvas proxied="false" bgcolor="0xffffcc">
<dataset name="ds" >
<world>
<country area="ヨーロッパ">
<name>イタリア</name>
</country>
<country area="ヨーロッパ">
<name>ギリシャ</name>
</country>
<country area="アフリカ">
<name>ケニア</name>
</country>
<country>
<name>日本</name>
</country>
<space>
<name>月</name>
</space>
</world>
</dataset>
<simplelayout/>
<text datapath="★" />
</canvas>
設定 | 意味 | 表示 |
---|---|---|
ds:/world/ | すべてのcountry | イタリア,ギリシャ,ケニア,日本 |
ds:/world/ | 2番目のcountry | ギリシャ |
ds:/world/ | 2~3番目のcountry | ギリシャ,ケニア |
ds:/world/ | 最初~3番目のcountry | イタリア,ギリシャ,ケニア |
ds:/world/ | 2番目~最後のcountry | ギリシャ,ケニア,日本 |
ds:/world/ | area属性が存在するcountry | イタリア,ギリシャ,ケニア |
ds:/world/ | areaがヨーロッパのcountry | イタリア,ギリシャ |
ds:/world/*/name/ | world直下のすべて | イタリア,ギリシャ,ケニア,日本,月 |
ds:/world/ | すべてのcountryのarea属性の値 | ヨーロッパ,ヨーロパ,アフリカ |
ds:/world/ | 3番目のcountryのarea属性の値 | アフリカ |
ds:/world/ | 2~3番目のcountryのarea属性の値 | ヨーロッパ,アフリカ |
ds:/world/ | 1番目のcountryのタグの名前 | country |
ds:/world/ | counrtyの数 | 4,4,4,4 |
ds:/world/*/last() | world直下のすべてのデータの数 | 5,5,5,5,5 |
ds:/world/ | countryの連番 | 1,2,3,4 |
ds:/world/*/position() | world直下のすべてのデータの連番 | 1,2,3,4,5 |