October 21, 2003

XML Schema

XMLの定義言語。W3C参照のこと。このサイト用のCMS(COntents Management System)を自作しようと考えているんだけど、内部的にはすべてXMLでやろうという魂胆なので、現在XMLを勉強しよう!!と決意したところ(3日坊主にならないことを願う~)。
どんなシステムを作ろうかというと、XML定義を読み込ませ、データベーステーブルの自動生成から、ブラウザでのMovableTypeの管理画面のようなインターフェイスの部分まですべて自動生成できるようなものがほしいなぁ。はじめは写真管理システムのようなものを考えています(PhotoLogみたいなのを使ってもいいけど、MovableTypeべったりだから微妙だな…)
で、はなしをXML Schemaに戻すと、ここの勧告ページからリンクされているXML Schemas: Best Practicesの文章が結構おもしろそうなので、適当に邦訳(完全な邦訳ではない)をちょくちょましてみることにしました。内容は追記参照のこと。この文章はXML Schemaを書くにあたってのチュートリアルになっているみたい。

コンテンツ一覧

*BestなPracticeを書くにあたった動機と紹介(省略)

*おまかせコース-コースの紹介
(ここにリストを書く)

1.ネームスペースの使い方
ネームスペースがないXML Schemaを除いて、通常、XML Schemaには2つのネームスペースが存在する。targetNamespaceとXMLSchema Namespace(←多くの場合、http://www.w3c.org/2001/XMLSchema)の2つだ。
で、このネームスペースを使ったスキーマ定義の仕方は以下のように3通りの方法がある。
(1)XMLSchemaをデフォルトのネームスペースにして、明示的にtargetNamespaceですべてのコンポーネントの参照を宣言する
(2)(1)の反対の方法。つまり、targetNamespaceをデフォルトネームスペースにして、XMLSchemaの方を明示的に宣言する
(3)デフォルトネームスペースを利用しない、つまりtargetNamespaceとXMLSchemaの両方とも明示的に宣言。
百聞は一見にしかず。例を見てください。

(1)の例

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.library.org"
xmlns:lib="http://www.library.org"
elementFromDefault="qualified">
    <include schemaLocation="BookCatalogue.xsd"/>
    <element name="Library">
        <complexType>
            <sequence>
                <element name="BookCatalogue">
                    <complexType>
                        <sequence>
                            <element ref="lib:Book" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

(2)の例

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.library.org"
xmlns="http://www.library.org"
elementFromDefault="qualified">
    <xsd:include schemaLocation="BookCatalogue.xsd"/>
    <xsd:element name="Library">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="BookCatalogue">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element ref="Book" maxOccurs="unbounded"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

(3)の例

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.library.org"
xmlns:lib="http://www.library.org"
elementFromDefault="qualified">
    <xsd:include schemaLocation="BookCatalogue.xsd"/>
    <xsd:element name="Library">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="BookCatalogue">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element ref="lib:Book" maxOccurs="unbounded"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

注目すべきは赤字の部分です。それぞれの利点/欠点をみていきましょう。


(1)

2.見えるようにする?それともできないようにする?(ネームスペースのスコープの問題)

3.

22:41 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/53
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。