ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9718  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

制約ファセットやるとかいっててウソばっかりです。
空要素の定義について書いておくの忘れてました。
<xsd:complexType/>
これだけです。
なぜ simpleType ではありません。complexType です。
属性を持つ場合は、
<xsd:complexType>
    <xsd:attribute name="attr"type="xsd:string"/>
</xsd:complexType>
簡単ですね。

で、これ以外にも定義する方法があります。
空要素を定義するのではなく、空要素を許可するという定義があります。
前述の定義では、例えば br 要素や img 要素のように、絶対に中身を持たない要素を定義することになります。
内容があれば記述し、なければ空要素としたいということは往々にしてありますよね。
そんな場合は、このように記述します。
<xsd:element name="要素" type="要素型" nillable="true"/>
これだけではダメなのです。 XML インスタンスにその要素に対して、xsi:nil="true" 属性を追加しなければなりません。
<要素 xsi:nil="true"/>
こんな感じです。
xsi とは XML Schema において XML インスタンス用に定義された名前空間です。
名前空間 URI は http://www.w3.org/2001/XMLSchema-instance です。
nil と nillable です。null ではありません。
nil は l が 1 本、nillable は l が 2 本繋がるところも注意です。
Ruby、Delphi なんかをやったことがある方にはおなじみかもしれませんね。

んで、ぶっちゃけめんどくさくないですか?nillable だけでいーやんって私は思うのですが。
XML インスタンスがスキーマを知っている必要があるか?ということなんですね。
「XML インスタンスを作るアプリやシステムが」ではありません。「XML インスタンスそのものが」ということです。
出力するのはたかがひとつの属性です。
ですが、検証時には
  • nillable で定義されているか?
  • xsi:nil="true" 属性がついているか?
  • xsi の名前空間は正しいか?
を検証しなければなりません。めんどーだと思うんだけどなぁ。
投稿日時 : 2007年5月1日 21:30

コメント

# re: 空要素の定義 2007/05/02 10:15 シャノン
<xsd:element name="要素" type="要素型" default="デフォ値"/>

でいいんじゃないの?
nillable は、「基本的には空要素になるべきではないんだけど、何らかの事情があって空要素にせざるを得ない場合」に使ったり。
そういう場合は XML 側にも「例外的に空要素」であることを明示するために nil を書くのも悪くないかも。

# re: 空要素の定義 2007/05/02 10:21 シャノン
> xsi:nil="true" 属性がついているか?
> xsi の名前空間は正しいか?

っていうより、プレフィックスを展開した結果、ちゃんと
{http://www.w3.org/2001/XMLSchema-instance}:nil
になっているか、ですね。
別に「hogehoge:nil」だって、
<xmlns:hogehoge="http://www.w3.org/2001/XMLSchema-instance ">
って書いてあればいいわけだし。

# re: 空要素の定義 2007/05/03 9:03 THREE-ONE
確かに厳密には展開された名前だからそうなりますね


# バーバリー コート 2012/11/06 20:25 http://burberry.suppa.jp/
突然訪問します失礼しました。あなたのブログはとてもすばらしいです、本当に感心しました!

Post Feedback

タイトル
名前
Url:
コメント: