Linq to XSDを楽しむ

TwitterでufcppさんにLinq to XSDの存在を思い出させていただいたので、現状どんなんだか触ってみた。前に触ったときにはかなりぁゃしぃ感じだった記憶があるのですが、何か今はちゃんとしてます。

まず、ダウンロード。

ダウンロードのページからバイナリをダウンロードします。私はVisual Studio 2010で確認したかったので2.0.0をダウンロード。

http://linqtoxsd.codeplex.com/releases/view/41260

ただし、このバイナリだけダウンロードしてもよっぽど何かできる人じゃないと何をしていいかもわからないので、ソースファイルも落とします。

http://linqtoxsd.codeplex.com/SourceControl/list/changesets

私はとりあえず最新のBuild 49966を落としました。普通はバイナリーのバージョンと同じソースを落とした方がいいとは思いますが・・・

展開

落としてきたバイナリのZIPとソースZIPそれぞれを回答して保存します。特にバイナリは後で環境変数にそのパスを登録する必要があるので、それを意識して回答、保存してください。私は「C:\bin\LinqToXsd2」と言うフォルダに保存しました。

設定

まず回答したソースのtrunkフォルダにあるReadme.TXTを開きます。この中の「Visual Studio integration」の内容を確認します。ちなみにReadme.txtはUTF-8エンコーディングです。

Set up the environment variable LinqToXsdBinDir (e.g. c:\LinqToXSDBin) before opening any Visual Studio instance.
Import LinqToXsd.targets template into your C# project by adding following lines into your project file (i.e. yourproject.csproj)
        <PropertyGroup>
        <LinqToXsdBinDir Condition="’$(LinqToXsdBinDir)’ == ”">$(SolutionDir)</LinqToXsdBinDir>
    </PropertyGroup>
    <Import Project="$(LinqToXsdBinDir)\LinqToXsd.targets" />

    o You can use your favorite XML editor (e.g. notepad) to edit .csproj files,
    o Make sure that your <Import Project="$(LinqToXsdBinDir)\LinqToXsd.targets" /> line is
           after any other Imports (e.g.   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />)
    o You can take a look at samples to see how it is done.

Open your project in Visual Studio
Add your XSD schemas to the project (i.e. right click on project->Add->Existing Item)
Change "Build Action" to LinqToXSDSchema on your XSD schemas
Build your project, after your first build XSD namespaces and types will be available in intellisense.
To see how you can integrate LINQ to XSD in your VB project please see LinqToXsdVB sample.

まずは、環境変数LinqToXsdBinDirに先ほどバイナリを解答したフォルダを設定します。

次に、まだVisual Studioへこれを組み込みインストーラー等が用意されていないので、.csprojファイルを直接編集して、プロジェクトに関連づける必要があります。変更内容は上の記述やReadMe.TXTの内容を確認してください。

一応これで、該当プロジェクトでLinq to XSDが使える様になりました。

使い方

.\trunk\docs\alpha.0.2にあるLinqToXsdOverview.docをご覧になって、中のチュートリアル通りに実行してみるのがいいでしょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using www.example.com.Orders;

namespace LinqToXsdSample
{
    class Program
    {
        static double CalculateTotal(Batch batch) {
            return (from puchaseOrder in batch.PurchaseOrder
                    from item in puchaseOrder.Item
                    select item.Price * item.Quantity).Sum();
        }
        
        static void Main(string[] args) {
            var batch = Batch.Load("../../XMLFile1.xml");
            var total = CalculateTotal(batch);
            Console.WriteLine(total);
            Console.Read();
        }
    }
}

完成形はこのようなコードになります。

image

肝はここで、プロジェクトに対象となるXMLのW3Cスキーマ(XSD)を追加し、そのプロパティのビルドアクションプロパティでこのように設定することで、ビルド時にXSDにあわせたクラスをジェネレートします。また、それらのクラスのネームスペースはXSDのネームスペースを引き継ぎます。(上のコードでのwww.example.com.Ordersが相当。)

また、LinqToXsdOverview.docの注意点ですが、当然のことながら新規プロジェクトの一覧には14ページにある様なLinq to XSDのセクションやそれ用のプロジェクトテンプレートなんてありませんから、中のチュートリアルを実行するためには、コンソールアプリケーションのプロジェクトを一度作って、先ほど書いた要領でそのプロジェクトファイルを修正した後でチュートリアルの内容を進めてください。

結論

素人にはお勧めしない。

がんばって製品化しようとしているところは見受けられますが、まだインストーラーすらないので一般プロジェクトに使うのには無理があります。ただコードとしての完成度はそれなりだと思いますので自分で.csprojファイルの書き換えが苦にならない人はツール作成等から使い始めてみるのがよいのではないでしょうか。

結構良いので、VS2010 SP1あたりには製品にれてくれるとうれしいかなと。

後、関係ないですが、今更VS10でXSDのエディタがVS2008での放置プレイから少しまともになったかなと言う気がします。とか言いながら自分はGUIツールあまり使わないんですけどね。

参照

<

p>LINQ to XSD – CodeProject

コメントを残す