Xml 在一个元素中使用simpletype和复杂类型组合xsd

Xml 在一个元素中使用simpletype和复杂类型组合xsd,xml,xsd,Xml,Xsd,我想在onece为下面的元素创建xsd。 这样做有什么想法吗 <database> <user>user1</user> <password>dbpassword</password> </database> <database>"user1/password"</database> 用户1 数据库密码 “用户1/密码” 所以elment可以有复杂类型和简单字符串类型 如何为

我想在onece为下面的元素创建xsd。 这样做有什么想法吗

<database>
    <user>user1</user>
    <password>dbpassword</password>
</database>


<database>"user1/password"</database>

用户1
数据库密码
“用户1/密码”
所以elment可以有复杂类型和简单字符串类型


如何为此编写xsd?

您可以定义
complexType
,并将
mixed
属性设置为true。从:

要使字符数据出现在“字母”的子元素之间,必须将混合属性设置为“true”


标记是可选的,这意味着
标记只能包含字符串并且是有效的


您可能应该只使用一种用户名和密码样式。使用简单文本或将它们放在单独的标记中,但不能同时使用两者。将两者混合在一起可能会导致一些不必要的行为。

您可以使用混合内容并使元素节点成为可选的,但这可能会允许许多您不想允许的事情

在XSD1.1中,您可以将其定义为混合内容,并使用断言进一步约束可能出现的内容。但这也不是一个特别好的解决方案,因为不能简单地将约束定义为“complex-type-1或simple-type-2”


我建议不要这样做。例如,如果简单类型是一种传统格式,并且您希望移动到更结构化的元素形式,我将使用不同的元素名称,或者给它一个attribute format=“v2”,然后使用XSD 1.1条件类型分配根据属性值分配类型。

谢谢您的回复,但由于向后兼容性问题:(我不能强制更改为新格式。。。
<xs:element name="database" type="dbType"/>

<xs:complexType name="dbType" mixed="true">
    <xs:sequence>
        <xs:element name="user" type="xs:string" minOccurs="0"/>
        <xs:element name="password" type="xs:string" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>