在一个元素中用单纯类型和复杂类型组成xsd

时间:2015-08-12 01:21:22

标签: xml xsd

我想在onece上为下面的元素制作xsd。 这样做有什么想法吗?

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


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

所以elment可以有一个复杂类型和简单的字符串类型。

我怎么能为此编写xsd?

2 个答案:

答案 0 :(得分:2)

您可以定义complexTypemixed属性设置为true。来自W3Schools tutorial

  

要使字符数据显示在“letter”的子元素之间,必须将mixed属性设置为“true”。

<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>

<user><password>标记可选地显示,这意味着<database>标记只能包含字符串且有效。

你可能应该只使用一种风格的用户名和密码。使用简单文本将它们放在单独的标签中,但不能同时放在两者中。将两者混合在一起可能会受到一些不良行为的欢迎。

答案 1 :(得分:0)

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

在XSD 1.1中,您可以将其定义为混合内容,并使用断言来进一步限制可能出现的内容。但这也不是一个特别好的解决方案,因为你不能简单地将约束定义为&#34;复杂类型1或简单类型2&#34;。

我建议不要这样做。例如,如果简单类型是遗留格式并且您想要移动到元素的更结构化形式,我将使用不同的元素名称,或者可能给它一个属性格式=&#34; v2&#34;然后使用XSD 1.1条件类型赋值根据属性值分配类型。