我想在onece上为下面的元素制作xsd。 这样做有什么想法吗?
<database>
<user>user1</user>
<password>dbpassword</password>
</database>
<database>"user1/password"</database>
所以elment可以有一个复杂类型和简单的字符串类型。
我怎么能为此编写xsd?
答案 0 :(得分:2)
您可以定义complexType
,mixed
属性设置为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条件类型赋值根据属性值分配类型。