私は xsd に関する知識がほとんどなく、ささいな問題の解決策が緊急に必要とされています。任意のタイプと数の子要素 (およびテキスト) を持つことができる要素 (名前付きタグ) を定義する必要がありますが、空の文字列を含めることはできません。例: <tag1> co<sub1>2</sub1> <b1>レーザー</b1></tag1>,<tag1>co2</tag1>,<tag1><i1>レーザー</i1></tag1 > が許可されます (<tag1><i1></i1></tag1> も許可されているとしましょう)。ただし、<tag1></tag1> は許可されていません。これを行う非常に簡単な方法があれば教えてください。
1 に答える
1
XSD 1.1 を使用している場合は、アサーションを使用して、記述した条件を確認できます。
<xs:element name="tag" type="non-empty"/>
<xs:complexType name="non-empty">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:any/>
</xs:sequence>
<xs:assert test="child::* or not(string(.) eq '')"/>
</xs:complexType>
XSD 1.0 では、それほど単純なアプローチはありません。私が XSD 1.0 で作業している場合、XSD 1.0 で表現しやすいものに設計を変更します。
tag
1.0 では、子を制約することなく、要素に 1 つ以上の子を持たせることを簡単に要求できます。
<xs:complexType name="non-empty" mixed="true">
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:any/>
</xs:sequence>
</xs:complexType>
<xs:element name="tag" type="non-empty"/>
要素が空でない文字列を持つことができることを指定することも簡単tag
です (ここであなたの言葉を借りて、空白のみで構成される文字列を許可しています - あなたが求めるものに注意してください):
<xs:simpleType name="non-empty">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="tag" type="non-empty"/>
1.0 で不可能なことは、(a) 要素を単純型または複合型のいずれかとして宣言すること、または (b) 混合型の複合型のテキスト コンテンツを制約することです。
幸運を。
于 2013-10-02T19:06:52.027 に答える