【スキーマ】に関する知恵袋
【質問】
XMLスキーマで「どちらかの要素が空要素」というのは表現できますでしょうか?スキーマの知恵袋を紐解くと、以下のnumber="1"と"2"はvalidで"3"がinvalidになるような定義です。-----------------------------------------------<object number="1"> <attr1>A</> <attr2/></object><object number="2"> <attr1/> <attr2>B</attr2></object><object number="3"> <attr1>A</attr1> <attr2>B</attr2></object>-----------------------------------------------以下のように同じ要素に別の型を定義しようとしたらエラーになってしまいました。うまくいく方法があれば教えていただきたいです。iPhoneの進化から考察していくと、よろしくお願いします。<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="objects"> <xs:complexType> <xs:sequence> <xs:element name="object" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:choice> <xs:group ref="group1"/> <xs:group ref="group2"/> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:group name="group1"> <xs:sequence> <xs:element name="attr1" type="type1"/> <xs:element name="attr2"> <xs:complexType/> </xs:element> </xs:sequence> </xs:group> <xs:group name="group2"> <xs:sequence> <xs:element name="attr1"> <xs:complexType/> </xs:element> <xs:element name="attr2" type="type1"/> </xs:sequence> </xs:group> <xs:simpleType name="type1"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType></xs:schema>iPhoneの進化についてだが、以上についてがスキーマの知恵袋の解説になります。
【解答】
iPhoneの進化について話していくと、XML Schema でのやり方は、私は思い付きません(正攻法では無理な気がしますが、スキーマの知恵袋を言及していくと、できるという方がおられるかもしれません)。RELAX NG なら、ご提示の考え方そのままで可能です。スキーマの知恵袋というと、default namespace = ""datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"start =element root {element object {attribute number { text } &((attr1.nonempty & attr2.empty) | (attr1.empty & attr2.nonempty))}+}attr1.nonempty = element attr1 { xsd:string { minLength = "1" } }attr1.empty = element attr1 { empty }attr2.nonempty = element attr2 { xsd:string { minLength = "1" } }attr2.empty = element attr2 { empty }iPhoneの進化の詳細は以上です。