如何强制 complexType 元素在字符串中至少包含 3 个字符?
How to force a comlpexType element to have at least 3 characters in a string?
在 XML 1.1 中工作。我试图限制 complexType 元素的 XML-schema,该元素将包含一个至少具有 3 个字符的字符串。我该怎么做?
我的目标是拥有一个复杂类型的元素,因此它包含一些其他元素以及要使用的属性。现在的目标是这个元素本身的内容不能为空。理想情况下,我想要这样的东西:
<text type='question'><condition extended='playerMoved' keyword='game'/>Did you already <keyword>move</keyword>?</text>
我想要它,这样内部没有任何文本的元素是无效的,所以应该禁止这样的事情:
<text type='question'><condition extended='playerMoved' keyword='game'/></text>
我现在的问题是,我尝试过的所有解决方案都只适用于简单类型,但我无法将它们用于复杂类型。我已经尝试过以下想法,但它们都只会抛出错误消息并且不会编译:
1.) 元素本身的限制:
<xs:element name="text">
<xs:complexType mixed="true">
<xs:simpleContent>
<xs:restriction base='xs:string'>
<xs:minLength value="3"/>
</xs:restriction>
</xs:simpleContent>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
...
</xs:choice>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
...
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
2.) 受简单内容的复杂类型限制:
<xs:element name="text">
<xs:complexType mixed="true">
<xs:simpleContent>
<xs:restriction base='textString'>
<xs:minLength value="3"/>
</xs:restriction>
</xs:simpleContent>
<xs:sequence>
...
</xs:sequence>
<xs:attribute name="type" use="required">
...
</xs:attribute>
</xs:complexType>
</xs:element>
...
<xs:complexType name="textString">
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
None 这些工作,由于我无法通过断言找到一种方法,所以我被严重困住了,不知道如何继续。我怎样才能让我的架构强制包含至少 3 个字符的字符串?
将 <xs:assert id="test-length" test="string-length() ge 3"></xs:assert>
之类的断言放入 xs:complexType
元素中。
在 XML 1.1 中工作。我试图限制 complexType 元素的 XML-schema,该元素将包含一个至少具有 3 个字符的字符串。我该怎么做?
我的目标是拥有一个复杂类型的元素,因此它包含一些其他元素以及要使用的属性。现在的目标是这个元素本身的内容不能为空。理想情况下,我想要这样的东西:
<text type='question'><condition extended='playerMoved' keyword='game'/>Did you already <keyword>move</keyword>?</text>
我想要它,这样内部没有任何文本的元素是无效的,所以应该禁止这样的事情:
<text type='question'><condition extended='playerMoved' keyword='game'/></text>
我现在的问题是,我尝试过的所有解决方案都只适用于简单类型,但我无法将它们用于复杂类型。我已经尝试过以下想法,但它们都只会抛出错误消息并且不会编译:
1.) 元素本身的限制:
<xs:element name="text">
<xs:complexType mixed="true">
<xs:simpleContent>
<xs:restriction base='xs:string'>
<xs:minLength value="3"/>
</xs:restriction>
</xs:simpleContent>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="condition" type="condition" minOccurs="0" maxOccurs="unbounded"/>
...
</xs:choice>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
...
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
2.) 受简单内容的复杂类型限制:
<xs:element name="text">
<xs:complexType mixed="true">
<xs:simpleContent>
<xs:restriction base='textString'>
<xs:minLength value="3"/>
</xs:restriction>
</xs:simpleContent>
<xs:sequence>
...
</xs:sequence>
<xs:attribute name="type" use="required">
...
</xs:attribute>
</xs:complexType>
</xs:element>
...
<xs:complexType name="textString">
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
None 这些工作,由于我无法通过断言找到一种方法,所以我被严重困住了,不知道如何继续。我怎样才能让我的架构强制包含至少 3 个字符的字符串?
将 <xs:assert id="test-length" test="string-length() ge 3"></xs:assert>
之类的断言放入 xs:complexType
元素中。