2010年1月12日火曜日

英単語勉強用アプリ作成シリーズ ~ Linq to XSDが動くまで

英単語勉強用に使えるアプリが無いかと探したけれどびびっと来るのがないので自作することにした。行く行くはモバイル用も作って出先でも使えるようにしたいけれど、まずはWindowsアプリでざっくりと仕上げてその簡易版をモバイル用にしようと考えている。

で、元データに使えるものが無いかと探していたら良いソースを見つけたので下記のものを使うことにした。

The EDICT Dictionary File

上記のサイトでは英単語の情報がXML形式で提供されているので、そのxmlファイルをそのままDataSourceとすることにした。もちろんそのときは頭でLinq To Xmlを使(つこ)うちゃる!と息巻いていたのだが、このLinq To Xml、調べれば調べるほどに落胆の色が隠せない。というのも下記のコードを見てもらえば分かるが、Linq To Xmlでは型付けされていない情報を扱うので、何らかの値を取得するためには常にCastが必要となるからだ。

XElement root = XElement.Load("PurchaseOrderInNamespace.xml");
XNamespace aw = "http://www.adventure-works.com";
IEnumerable<xelement> address =
    from el in root.Elements(aw + "Address")
    where (string)el.Attribute(aw + "Type") == "Billing"
    select el;
foreach (XElement el in address)
    Console.WriteLine(el);

これは大変よろしくない。かなりの手間だ。そんなプログラミングは楽しくないのでわざわざ余暇を使ってする意味が無い。それなので色々とGoogle先生にお伺いを立てたらナイスなプロジェクトをCodePlexで発見した。

LINQ to XSD
(このプロジェクトを使用したい場合は17994とかそういう番号になっているLinkからソースコードをダウンロードしよう)

そう、名前からも分かるとおり、このプロジェクトを使えばXSDで強力に型付けされたClassを扱うことができる。上記のコードが下記のような感じになる。

var list_books = from c in xmlFile.Customers
                 order by c.Name
                 select c;

-------------------------
ではこれからその導入方法の説明に入ろう。Code Projectにコードのサンプルがあったので以下に併記しておく。

LINQ to XSD Sample at the Code Project

Linq To XSDを使うためには、はじめに環境変数を追加する必要があるので下記の手順どおりに追加して欲しい。

コンピュータ -> プロパティ -> システムの詳細設定 -> 環境変数 -> システム環境変数の新規ボタン
変数名:LinqToXsdBinDir
変数値:c:\LinqToXSDBin(※このパスはどこでもよい)

環境変数の追加ができたら下記の手順どおりに進めて欲しい。

  1. 前述したCodePlexのLinkからダウンロードした.zipを解凍する
  2. 解凍したフォルダの中にあるXObjects\XObjects.slnを起動しコンパイルする(先ほど設定した環境変数のパスにdllなどが出力されているのを確認すること)
  3. Linq To XSDを使用したいプロジェクトファイル(yourproject.csprojなど)をnotepadなどで開き下記の内容をコピペする。
    ※注意:必ず他のImport要素たちの後ろに追加すること(<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />など)

    <PropertyGroup>
    <LinqToXsdBinDir Condition="'$(LinqToXsdBinDir)' == ''">$(SolutionDir)</LinqToXsdBinDir>
    </PropertyGroup>
    <Import Project="$(LinqToXsdBinDir)\LinqToXsd.targets" />
  4. 上記のプロジェクトファイルをVisual Studioで起動しXSDファイルを追加する
  5. 追加したXSDファイルのビルドアクションをLinqToXSDSchemaとする
  6. プロジェクトをコンパイルするとインテリセンスが使用できるようになっていることを確認すること

これでLinq To XSDを使う準備が整った。次回以降、開発中に気付いたことなどがあれば紹介する予定だ。

0 件のコメント:

コメントを投稿