我想在其元素之一上使用具有修改基数的预定义复杂类型。如何在不使用override / redefine的情况下执行此操作(我不想拆分xsd文件)。它甚至可能吗?
示例:对于事件,我希望组织者(person_type)的出生日期是强制性的。但是对于每个客人(person_type也是如此),它必须是可选的。
我试过使用限制/扩展,但它不符合我的需要。它显然使用2复杂类型(即person_type1 / birth_date 1..1,person_type2 / birth_date 0..1),但它是丑陋的王。
如何在guest_lement中使用复数类型“person_type”,并在birth_date上更改基数?
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="event_type">
<xs:sequence>
<xs:element name="event_name" type="xs:string"/>
<xs:element name="organizer" type="person_type"/>
<xs:element name="guests_list">
<xs:complexType>
<xs:sequence>
<xs:element name="guest" type="person_type" maxOccurs="99"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="person_type">
<xs:sequence>
<xs:element name="first_name" type="xs:string"/>
<xs:element name="last_name" type="xs:string"/>
<xs:element name="birth_date" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="event" type="event_type"/>
</xs:schema>
为了使此文件有效:
<?xml version="1.0" encoding="UTF-8"?>
<event>
<event_name>Party !!</event_name>
<organizer>
<first_name>John</first_name>
<last_name>Doe</last_name>
<birth_date>01/01/1970</birth_date>
</organizer>
<guests_list>
<guest>
<first_name>Jane</first_name>
<last_name>Doe</last_name>
</guest>
<guest>
<first_name>Foo</first_name>
<last_name>Bar</last_name>
</guest>
</guests_list>
</event>
谢谢你的回答。
我越来越倾向于使用XSD 1.1断言来做这种事情。它比使用限制和扩展更方便。
具体来说,将complexType定义为自由,然后在相关元素声明的xs:assert中定义依赖于上下文的约束。