如何在 XSD 架构文件中限制定义的复杂类型
How to limit defined complexType in XSD Schema file
我在 XSD 文件中定义了一个 object 子类型:
<xs:complexType name="object">
<xs:sequence>
<xs:element name="state" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
如您所见,<state>
标记被配置为可以出现任意次数(从 1 次开始)。所以这将是一个例子,我使用定义的 <object>
:
<System>
<object_1>
<state>string_1</state>
<state>string_2</state>
<state>string_3</state>
<object_1>
<object_2>
<state>string_4</state>
<object_2>
...
</System>
但是,有一种特殊情况,我需要定义一个 object 子类型 (<object_n>
) exactly 2 <state>
elements/tags(不多也不少):
<object_n>
<state>string_n1</state>
<state>string_n2</state>
</object_n>
当我在 Schema 文件中声明这种类型时,有没有办法 extend/modify/limit 明确它必须只包含两个子元素?
<xs:element type="object">
<xs:somewayToLimitChildren/>
实际上,对象子类型比较复杂,因此需要将其设为子类型。
您需要使用 xs:restriction
创建一个新类型:
<xs:complexType name="newObject">
<xs:complexContent>
<xs:restriction base="object">
<xs:sequence>
<xs:element name="state" minOccurs="2" maxOccurs="2" type="xs:string"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
我在 XSD 文件中定义了一个 object 子类型:
<xs:complexType name="object">
<xs:sequence>
<xs:element name="state" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
如您所见,<state>
标记被配置为可以出现任意次数(从 1 次开始)。所以这将是一个例子,我使用定义的 <object>
:
<System>
<object_1>
<state>string_1</state>
<state>string_2</state>
<state>string_3</state>
<object_1>
<object_2>
<state>string_4</state>
<object_2>
...
</System>
但是,有一种特殊情况,我需要定义一个 object 子类型 (<object_n>
) exactly 2 <state>
elements/tags(不多也不少):
<object_n>
<state>string_n1</state>
<state>string_n2</state>
</object_n>
当我在 Schema 文件中声明这种类型时,有没有办法 extend/modify/limit 明确它必须只包含两个子元素?
<xs:element type="object">
<xs:somewayToLimitChildren/>
实际上,对象子类型比较复杂,因此需要将其设为子类型。
您需要使用 xs:restriction
创建一个新类型:
<xs:complexType name="newObject">
<xs:complexContent>
<xs:restriction base="object">
<xs:sequence>
<xs:element name="state" minOccurs="2" maxOccurs="2" type="xs:string"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>