とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) -

Visual Basic 2008では言語レベルで XML のサポートをしてくれるそうです。

MSDN : XML (Visual Basic)

まずは、XML の作成方法をば♪

MSDN : Visual Basic での XML の作成

ここには・・・

Visual Basic では、XML リテラルをコード内で直接使用できます。XML リテラルの構文は LINQ to XML オブジェクトを表し、XML 1.0 の構文に似ています。記述するコードは最終的な XML と同じ構造になるので、XML 要素、XML ドキュメント、および XML フラグメントをプログラムによって簡単に作成できます。

と書かれていますね、Orcas Beta のころに一度書きましたよね。XML リテラルって言うんですね♪

betaのころに書いたやつをそのまんま書いてみました。

Option Strict On
Option Infer On
Public Class Program
    Public Shared Sub Main()
        Dim torikobito As XElement = _
                                    <WankumaMember>                                         <ID>76</ID>                                         <Name>とりこびと</Name>                                     </WankumaMember>
        Console.WriteLine(torikobito)
    End Sub
End Class

これはXML 要素リテラルというものらしいです。変数 torikobito の型はSystem.Xml.Linq.XElement型になっていますね。どうやらXML 要素リテラルは XElement クラスのインスタンスを返す模様・・・。


んでもって次は、XML ドキュメント リテラル。<?xml version="1.0"?>で始まるXML リテラルは XML ドキュメントとして作成できると。ほほぅ。

Option Strict On
Option Infer On

Public
 Class Program
    Public Shared Sub Main()
        Dim torikobito As XDocument = _                                     <?xml version="1.0"?>                                     <WankumaMember>                                         <ID>76</ID>                                         <Name>とりこびと</Name>                                     </WankumaMember>
        Console.WriteLine(torikobito)
    End Sub
End Class

変数 torikobito の型はSystem.Xml.Linq.XDocument型になっていますね。このXML ドキュメント リテラルは XDocument クラスのインスタンスを返すと。


ちなみに、XMLの構文とはいえ、Visual Basic のXML リテラルはXML 1.0 仕様のすべてをサポートするわけではないようですね。


文字数とか。


XML リテラルと XML 1.0 仕様によると

  • XML リテラルの中にドキュメント型定義 (DTD: Document Type Definition) は指定できません。
  • XML ドキュメント リテラルは、XML ドキュメント宣言から始める必要があります。
  • XML リテラルでは、1 行に 65,535 を越える文字は使用できません。
  • XML 名前空間プレフィックス、要素名、および属性名では、1,024 文字を越える文字は使用できません。


XML のサポートは、まだまだいろんな機能があるようです。んがっ!時間が足りない。orz




次回は埋め込み式あたりを。

投稿日時 : 2008年2月12日 13:37

Feedback

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/12 14:33 IIJIMAS

とりこびと大先生!
VB2008新機能ーXML リテラルってどのような場面で役に立つ(使うとよい)のでしょうか?
正直、「何がおいしいの?」と言う印象なのもので…
この機能は今のところ、うらやましくありません。。。

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/12 15:05 とりこびと

IIJIMAS さん、コメントありがとうございます。

>とりこびと大先生!

やめてくださいっ!!
それほど大きくもないし、先生でもないです(ぉ
IIJIMAS 大先生(MS MVP様)にお伝えできることなんて何一つ無いです(自虐プレイ中。

>どのような場面で役に立つ(使うとよい)のでしょうか?

Linq to XML・・・あ、いや、XML ファイルを作成するときです(ぉ

>正直、「何がおいしいの?」と言う印象なのもので…

わたしもおいしさを語るにはまだちょっとお勉強不足です。
なので今日から・・・

おいしさを見つける旅に出ます!!

# たとえば「文字列としてXML書く?」、「インテリセンスに手伝ってもらって書く?」、どっちがステキとか。(IDEがらみだ、これ。orz)

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/12 15:17 επιστημη

せんせぇしつもん。

たらたらーっと並んだ<XML要素>の末尾それぞれに _ が
ついてなくてもいいのはナゼなんですか?

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/12 15:35 IIJIMAS

せんせぇ余計なこと言ってごめんなさいですそしてご返答ありがとうございます。

># たとえば「文字列としてXML書く?」、「インテリセンスに手伝ってもらって書く?」、どっちがステキとか。(IDEがらみだ、これ。orz)

わかりますが、もともとプログラムコードの中に「文字列としてXML書く」状況自体がほとんど(全く?)ありませんでした。
どういう場合に必要になるのでしょうか?

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/12 18:44 とりこびと

コメントありがとうございます。

>>επιστημηさん

>たらたらーっと並んだ<XML要素>の末尾それぞれに _ が
>ついてなくてもいいのはナゼなんですか?

・・・仕様ですとしか。orz
どうやらVisual Basic コンパイラさんは行継続文字(空白 + _)をXML リテラルの一部として解釈するようですね。


>>IIJIMASさん

>わかりますが、もともとプログラムコードの中に「文字列としてXML書く」状況自体がほとんど(全く?)ありませんでした。

なるほど・・・。困りましたw

では仮に、仮にですが。

XMLを作成する場合、XElementを直接記述して属性とかを連ねていくのと、XML リテラルで記述されているもの、どちらが直感的で見やすいでしょうか?

・・・概ね主観的ですが。orz

これからすこし機能を勉強していってその内容をエントリとしてあげるつもりですが、
IIJIMASさんがおいしそうと感じないのならそれはやはりIIJIMASさんにとってはおいしくないものなのかもしれません。それはそれでいいのだと思います。
逆になにかちょっとした旨みを感じていただければとも思いますです。

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 0:42 Streetw☆

私もやっとXMLしてみました。
>XML リテラルの一部として解釈するようですね
そうみたいですよ>あのとき理解できてなかったリンク先の通り*さん
#それと、違和感を感じるには違和感を(ry

<?xml version="1.0"?>
の後ろに _ を書くとエラーになるところとかは、XMLリテラルの中はほとんどXMLの仕様みたいですね。
パーサーとしては、ルート要素(というか閉じタグ)でXMLリテラルの終わりもわかりますし。

XMLリテラルが書けるのはわかりやすさにつながると思いますが、それより
torikobito...<ID>
などで簡単に参照できる点は使えそうに思いました。

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 13:42 よねけん

>たらたらーっと並んだ<XML要素>の末尾それぞれに _ が
ついてなくてもいいのはナゼなんですか?

Visual Basic 9.0 Lanuage Specification.docの11.23.1 Lexical rules によると「XMLリテラルはVBの語彙規則じゃなくて、XMLの語彙規則で解釈されるんだぜぇべいべぇ!!」と書いてありますんで、XMLリテラル以外ではVBの世界、XMLリテラルの中ではXMLの世界、として処理されるためということですね。

ちなみにこの件に関する嘆きとも言える部分は、2. Lexical Grammar の Noteに記述があり、「VBはもはや純粋な字句解析ができねぇぜ、てやんでばろめぇー」と書いてあるような気がします。

#「気がします」と書いたのは・・・
#「2. Lexical Grammar」を和訳していてどうにも違和感があって、
#自分の予想では上記のようなことを言わんとしているのでは?と思うのですが、
#英文を読む限りでは予想とは逆のことが書いてあるような気がして、
#自分の英語力の問題なのか、仕様書の誤記なのかわからんです。


# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 14:17 とりこびと

コメントありがとうございます。

>>Streetw☆さん

>私もやっとXMLしてみました。

例によってもう私より先にすすんでるんですよね。レポートお願いします。

>torikobito...<ID>
>などで簡単に参照できる点は使えそうに思いました。

このあたりがうまみのひとつなのかなぁと。
って本文のどこにも出てきていない件。


>>よねけんさん

>、「VBはもはや純粋な字句解析ができねぇぜ、てやんでばろめぇー」と書いてあるような気がします。

私が読むと

「9.0になってからXMLサポートしちゃったよね。でも、この章はいわゆる'Visual Basic'のコードについての内容しか書いてないんだ。XMLリテラルの部分についてはXMLの規則があるからね。いずれちゃんとまとめるつもりだけど。」

・・・きっと違う。

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 14:55 Streetw☆

私も考えてみたけど、嘆きじゃないような気がしました。
#「てやんでばろめぇー」を検索してみたけどなかったし。

例えば
Dim xml = _
<test>
If True Then End
</test>
のとき、"If" を見ただけで If ステートメントと解釈することはできなくなったということじゃないでしょうか。
嘆きというよりは、「難しいことしてるんだよ。えっへん♪」じゃないかな。
#「えっへん♪」で検索してもないから違うかも。

C# も LINQ がらみの話で、識別子についてそんな話があったように思います。
文脈の判断で単なる変数になったりクエリ式の一部になったりと。
関係ないかな。。

var from = "test";
var q = from c in @from.ToCharArray() select c;

あ、Visual Basicでもできますね。しかも[]いらない。
Dim from As String = "test"
Dim q = From c In from.ToCharArray() Select c



>例によってもう私より先にすすんでるんですよね

「torikobito.」って書いたら、"..<>" とか面白そうなのがあるんだものw
もちろん、今後のエントリでの詳説に期待してます!

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 16:13 とりこびと

Streetw☆さん、コメントありがとうございます。

>嘆きというよりは、「難しいことしてるんだよ。えっへん♪」じゃないかな。

なんとなくそんな気がしているのですが、私は英語力を持ち合わせていないのでいつまでたっても不安です。orz

>「torikobito.」って書いたら、"..<>" とか面白そうなのがあるんだものw

がんばって書いていきます~!

# Visual Basic 2008 の新機能 - XML その2(XML での埋め込み式。) - 2008/02/13 17:12 とりこらぼ。

Visual Basic 2008 の新機能 - XML その2(XML での埋め込み式。) -

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 17:21 よねけん

とりこびとさん、Streetw☆さんコメントありがとうございます。
お二人の意見を参考に英文とにらめっこして氷解したような気がします。

> 例えば
> Dim xml = _
> <test>
> If True Then End
> </test>
> のとき、"If" を見ただけで If ステートメントと解釈することはできなくなったということじゃないでしょうか。

私もそう思います。
意味をよく理解できなかった部分は以下の文章なんですが、お二人とのやりとりで結論が出せたように思います。

自分の訳出した直訳的日本語が非常に紛らわしかったのが原因で、出来上がった日本語の文章を読んで、英文本来の意味とはまったく逆の意味に捉えていました。
--
<2. Lexical Grammar の Noteの1文目に対する私の解釈>
メモ Visual Basic言語のバージョン9.0のXMLリテラル表現の導入で、Visual Basicコードを構文上の文脈を考慮せずにトークンに分割できるという意味での厳密な語彙文法をもはや持ちません。

(要点)つまり、構文を意識しないと語彙に分割できない
--
この和文うち、「Visual Basicコードを構文上の文脈を考慮せずにトークンに分割できる」という修飾句の部分が長すぎて、分割できるの?できないの?ということが理解できていませんでした。

人様のブログで長いコメント失礼しました(^^;

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 17:39 とりこびと

よねけんさん、コメントありがとうございます。

Streetw☆さんのがあたりっぽいですね。(私のは無茶しすぎたということですね。orz)
# わたしも訳が分からないときはStreetw☆さんの目に付くところに・・・w

>メモ Visual Basic言語のバージョン9.0のXMLリテラル表現の導入で、Visual Basicコードを構文上の文脈を考慮せずにトークンに分割できるという意味での厳密な語彙文法をもはや持ちません。

すごく分かりやすいです♪
和訳、公開できるといいですね~。
とってもたのしみにしてます♪

# re: Visual Basic 2008 の新機能 - XML その1(簡単なXML リテラルの作成。) - 2008/02/13 20:33 よねけん

>>とりこびとさん
>Streetw☆さんのがあたりっぽいですね。(私のは無茶しすぎたということですね。orz)

いえいえ、大筋でまとめるなら、私もそんな感じの理解です。
ただ、和訳すると言った手前、あんまり適当な訳にするわけにもいかないので、重箱の隅をつつきながら作業してます。

>すごく分かりやすいです♪

ありがとうございます♪そういってもらえるとうれしいです。

和訳は前文と1~3、4のごく一部、6、7の前半まで訳し終えました。
まだ16%くらいの進捗率です(^^;

タイトル
名前
Url
コメント