属性における匿名のデータ型

2002年9月8日(日)更新


■知っていると、ちょっと便利なテクニック

たけち: 前回は属性の宣言の仕方についてきちんと勉強したけれど、今回は属性の宣言について知っていると、ちょっと便利なテクニックの1つを勉強するね。以前、要素の宣言で匿名のデータ型というテクニックを勉強したよね。

さらら: えぇ、わざわざデータ型の名前を決めなくても、要素の宣言の中にデータ型の定義を組み込んでしまえばいいのよね。

たけち: そう、そしてこれと同じテクニックは、要素の宣言だけでなくて、属性の宣言でも使えるんだよ。まず以前も出てきたこんな例を考えてみるね。

たけち

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="poem" type="PoemType" />

<xsd:complexType name="PoemType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="poemVariety" type="PoemVarietyType" use="required" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

<xsd:simpleType name="PoemVarietyType">
<xsd:restriction base="xsd:string">
  <xsd:enumeration value="挽歌" />
  <xsd:enumeration value="雑歌" />
  <xsd:enumeration value="譬喩歌" />
  <xsd:enumeration value="相聞歌" />
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>

たけち: ちなみにこれはDTDでいうと
<!ELEMENT poem (#PCDATA)>
<!ATTLIST poem poemVariety (挽歌 | 雑歌 | 譬喩歌| 相聞歌) #REQUIRED>
にあたるんだよね。で、これの属性の宣言のところに、匿名のデータ型をあてはめて、書き換えてみることにするね。

さらら: あっ、これはわかるような気がするわ。要素の宣言における匿名のデータ型と同じようにすればいいんでしょ。こんな形かしら。。。。。

さらら

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="poem" type="PoemType" />

<xsd:complexType name="PoemType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="poemGroup" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
  <xsd:enumeration value="挽歌" />
  <xsd:enumeration value="雑歌" />
  <xsd:enumeration value="譬喩歌" />
  <xsd:enumeration value="相聞歌" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>

</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

</xsd:schema>

たけち: あたりぃ〜!! 

さらら: 今回は簡単だったわ...(^ ^*

たけち: ある属性のデータ型の定義が1箇所だけでしか使われないような場合には、このようなテクニックが便利だね。次回も「知っていると、ちょっと便利なテクニック」を勉強するね。

さらら: は〜い。

→ 次回は名前付き属性グループ定義です。。。。 (^ ^)v


XMLスキーマのコーナーは、TAKABEさま(XSLTの遊び部屋)の全面的なご協力をいただいて作成しています。