まず、min / maxOccursはパーティクル(ローカル要素、要素参照、グループ参照、シーケンス、選択)用に予約されています。属性の発生は、によって制御されます
use =(オプション|禁止|必須) -デフォルト値はオプションです
要素のセットの中でそれをさらに制限するために、trueの論理値(1またはリテラルのいずれかtrue
)で指定された属性を持つことができるのは1つだけです。これはXSD1.0だけでは実行できないことです。XSDの上でSchematronを使用できます。
または、XSD1.1でこれを簡単に実現できます。
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="sample">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="selection" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="source">
<xsd:complexType>
<xsd:choice>
<xsd:element name="item" minOccurs="1" maxOccurs="unbounded" type="xsd:string"/>
<xsd:element name="path" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="multiselection" type="xsd:boolean" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:assert test="count(selection[@multiselection=true()])=1"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
これらの線に沿った何か(falseまたは両方trueの両方が検証に失敗します):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<sample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<selection multiselection="false">
<name>name1</name>
<source>
<item>item1</item>
<item>item1</item>
</source>
</selection>
<selection multiselection="false">
<name>name1</name>
<source>
<item>item1</item>
<item>item1</item>
</source>
</selection>
</sample>
cvc-assertion.3.13.4.1: Assertion evaluation ('count(selection[@multiselection=true()])=1') for element 'sample' with type '#anonymous' did not succeed.
それらの1つを作成すると、true
検証が成功するはずです。