Takayuki Okazaki's Weblog
ブログ: 岡崎 - Okazaki's blog
20060929 2006年 9月 29日 金曜日
XMLスキーマのデザインパターン
English Translation: (Yahoo!) / (Google)

8月ごろの記事ですがSun Developer Network(SDN)Introducing Design Patterns in XML Schemasという記事が公開されています。
この元ネタはJavaOne Sanfrancisco 2006のBOFで「BOF-2224 What You Need to Know About Schema Design Patterns and Java Technology」だと思います。 ちょうどこのBOFを聞いていたので内容としては大体知っていることだったんですが、上記の記事で面白いと感じたのはこのBOFで紹介されていたXMLSchemaのデザインパターンが実はすでにNetBeans + Enterprise Packのツールとして実装されているということでした。

まず簡単に上記の記事で紹介されているXMLSchemaデザインパターンを紹介しておきます。デザイン・パターンには次の4つがあります。 マトリョーシカ(写真はWikipediaより。GNU Free Documentation License

Russian Doll(マトリョーシカ) パターン

入れ子人形で知られるマトリョーシカのように、全てのエレメントと複合型が一つのエレメントの中に入れ子になった形で定義されているようなスキーマです。イメージとしてはこんな感じ。
<xsd:element name="Line">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="PointA">
        <xsd:complexType>
          <xsd:attribute name="x" type="xsd:integer"/>
          <xsd:attribute name="y" type="xsd:integer"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="PointB">
        <xsd:complexType>
          <xsd:attribute name="x" type="xsd:integer"/>
          <xsd:attribute name="y" type="xsd:integer"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
エレメント、複合型がまとめて入れ子に定義されています。ぜんぶ一まとめでわかりやすいのですが、再利用をしようとするときには全て使うか、すべて使わないかのどちらかしか選べません。 サラミスライス(写真はWikipediaより。André Karwath氏によるもの。)

Salami Slice (サラミ・スライス) パターン

すべてのエレメントがグローバルに定義されているようなスキーマです。 イメージとしてはこんな感じ。
<xsd:element name="PointA">
  <xsd:complexType>
    <xsd:attribute name="x" type="xsd:integer"/>
    <xsd:attribute name="y" type="xsd:integer"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="PointB">
  <xsd:complexType>
    <xsd:attribute name="x" type="xsd:integer"/>
    <xsd:attribute name="y" type="xsd:integer"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Line">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="PointA"/>
      <xsd:element ref="PointB"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
すべてのエレメントが再利用しやすい形ですが、どこがルートなのかパッと見ただけでは良くわからないかもしれません。 ベネチア風の日よけ(写真はWikipediaより。Public Domainの写真)

Venetian Blind (ベネチア風の日よけ) パターン

このパターンはマトリョーシカ・パターンの特徴を受け継いでいます。違いは中に含まれているエレメントの型をグローバルに定義しているところです。イメージとしてはこんな感じ。
<xsd:complexType name="PointType">
  <xsd:attribute name="x" type="xsd:integer"/>
  <xsd:attribute name="y" type="xsd:integer"/>
</xsd:complexType>

<xsd:element name="Line">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="PointA" type="PointType"/>
      <xsd:element name="PointB" type="PointType"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
エデンの園(画像はWikipediaより。Public Domainの画像)

Garden of Eden (エデンの園) パターン

ベネチア風の日よけパターンとサラミスライス・パターンを混ぜたような感じのパターンです。すべてのエレメントと型は別々に定義されます。
<xsd:complexType name="PointType">
  <xsd:attribute name="x" type="xsd:integer"/>
  <xsd:attribute name="y" type="xsd:integer"/>
</xsd:complexType>

<xsd:complexType name="LineType">
  <xsd:sequence>
    <xsd:element ref="PointA"/>
    <xsd:element ref="PointB"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:element name="PointA" type="PointType"/>
<xsd:element name="PointB" type="PointType"/>
<xsd:element name="Line" type="LineType"/>
細かく再利用できそうですが、細かすぎてわかりにくいかもしれません。

NetBeans Enterprise PackのXMLSchemaエディタ

NetBeans Enterprise PackにはXMLSchemaエディタが含まれているのですが、上記で紹介したXMLSchemaデザインパターンを適用する、いわばXMLSchema版のリファクタリング機能がついています。
デザインパターンを適用するには、プロジェクトやファイルのウインドウで目的のXMLSchemaファイルを選択して、右クリック・メニューで「Apply Design Pattern ..」という項目を選びます。 すると次のようなダイアログで、どういう風にしたいのかをチェックしてデザインパターンを選びます。
Apply Design Pattern of XMLSchema with NetBeans Enterprise Pack
ここでデザインパターンを適用すれば、その通りにリファクタリングされます。これはマトリョーシカ・パターンを適用した結果をXMLSchemaエディタでグラフィカルに見たところです。
Design Pattern of 'Russian Doll' Applied
次は、エデンの園パターン。
Design Pattern of 'Garden of Eden' Applied

こういった形でスキーマのデザインをいろいろ手軽に試すことができるので、スキーマを設計しているときに、どの形式が使用目的にあっているか、というのを気軽に試すことができるようになります。


無料セミナー: 10月13日(金) SOAの概要からSun Java CAPSの活用まで
English Translation: (Yahoo!) / (Google)
Sun Javaソフトウエア製品紹介
10月13日(金)にサンの用賀本社にて「Sun Java Composite Application Platform Suites活用セミナー」というセミナーを行うそうです。このセミナーは輪島さんによるSOAの概要から順番に紹介されますので、まだSOAについて具体的なイメージがない方でも気軽に参加できると思います。
なおセミナーは無料ですが、事前登録制となっていますのでご興味のある方はお早めに登録されることをお勧めいたします。


過去の記事
« 9月 2006 »
     
1
2
3
4
5
6
9
10
14
16
17
18
20
21
23
24
25
27
28
30
       
今日
Click me to subscribe このブログを購読(RSS)
検索

このブログ著者について
ソフトウエア・インフラストラクチャー・ソリューション本部のソリューション・アーキテクトでした(2008年8月退職)。 本業はSOAソリューションならびにSun Java CAPSによるソリューションのプリセールスをお手伝いするエンジニア、とJavaエバンジェリストグループに参加してセミナーに行ったり、趣味のプログラミング・ネタをこのブログで紹介したりしていました。現在は、ふらふらとwatermint.orgで活動中〜。
リンク
 
SunホットトピックPodcast - SunホットトピックPodcast
 


 

Today's Page Hits: 751