前提・実現したいこと
XMLスキーマ検証で属性の値によって、指定できる属性を定めたいのですが、
どのように記載すべきかわかりませんでした。
もし、方法についてご存知の方がいらっしゃれば、
お教えいただけないでしょうか。
具体例
以下のような XML に対し、下記に示すような検証を行いたいです。
① type の値が rectangle であれば、point4 は必須
② type の値が circle であれば、radius は必須
<?xml version="1.0" encoding="UTF-8"?> <project name="サンプル"> <shape type="rectangle" point1="0,0" point2="0,1" point3="1,1" point4="1,0"/> <shape type="triangle" point1="0,0" point2="0,1" point3="1,1"/> <shape type="circle" point1="0,0" radius="1"/> <project/>
試したこと
以下のように、XMLスキーマを作成したのですが、
①、②に示すような検証が行えるように作成できませんでした。
XMLSchema
1<?xml version="1.0" encoding="utf-8"?> 2<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3 <xsd:element name="project"> 4 <xsd:complexType> 5 <xsd:all> 6 <xsd:element name="shape" type="shape_type"/> 7 </xsd:all> 8 </xsd:complexType> 9 </xsd:element> 10 <xsd:complexType name="shape_type"> 11 <xsd:attribute name="type" use="required"> 12 <xsd:simpleType> 13 <xsd:restriction base="xsd:string"> 14 <xsd:enumeration value="rectangle"/> 15 <xsd:enumeration value="triangle"/> 16 <xsd:enumeration value="circle"/> 17 </xsd:restriction> 18 </xsd:simpleType> 19 </xsd:attribute> 20 <xsd:attribute name="point1" use="required"> 21 <xsd:simpleType> 22 <xsd:restriction base="xsd:string"/> 23 </xsd:simpleType> 24 </xsd:attribute> 25 <xsd:attribute name="point2" use="optional"> 26 <xsd:simpleType> 27 <xsd:restriction base="xsd:string"/> 28 </xsd:simpleType> 29 </xsd:attribute> 30 <xsd:attribute name="point3" use="optional"> 31 <xsd:simpleType> 32 <xsd:restriction base="xsd:string"/> 33 </xsd:simpleType> 34 </xsd:attribute> 35 <xsd:attribute name="point4" use="optional"> 36 <xsd:simpleType> 37 <xsd:restriction base="xsd:string"/> 38 </xsd:simpleType> 39 </xsd:attribute> 40 <xsd:attribute name="radius" use="optional"> 41 <xsd:simpleType> 42 <xsd:restriction base="xsd:string"/> 43 </xsd:simpleType> 44 </xsd:attribute> 45 </xsd:complexType> 46</xsd:schema>
補足情報
事情によって、要素名を変更したりすることができないため、
属性の値によって判断したいです。
あなたの回答
tips
プレビュー