我是XSD的新手所以,我的问题可能看起来很明显,但无论如何......
考虑我有以下XML:
<om:model xmlns:om="http://www.r-style.com/2014/odm-model">
<om:entry>
<om:key>KEY1</om:key>
<om:value>VALUE1</om:value>
</om:entry>
<om:entry>
<om:key>KEY2</om:key>
<om:value>VALUE2</om:value>
</om:entry>
<om:entry>
<om:key>KEY3<om:key>
<om:value>
<om:model>
<om:entry>
<om:key>KEY4</om:key>
<om:value>VALUE4</om:value>
</om:entry>
<om:entry>
<om:key>KEY5</om:key>
<om:value>VALU5E</om:value>
</om:entry>
</om:model>
</om:value>
</om:entry>
</om:model>
有没有办法创建这样的XSD模式来指定在标记中允许设置实际值(String类型)或嵌套XML本身。因此,我希望有键值对或key-xml对,并且xml还应包含键值对或键-xml对等内容。等...
感谢您的时间!
P.S。:目前我已尝试使用以下XSDSchema,但仍需确定它是否正确或现在:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.r-style.com/2014/odm-model">
<xs:element xmlns:odm="http://www.r-style.com/2014/odm-model" name="model" type="odm:modelType"/>
<xs:complexType name="entryType">
<xs:sequence>
<xs:element type="xs:string" name="key"/>
<xs:element name="value">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element xmlns:odm="http://www.r-style.com/2014/odm-model" type="odm:modelType" name="model" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="modelType">
<xs:sequence>
<xs:element xmlns:odm="http://www.r-style.com/2014/odm-model" type="odm:entryType" name="entry" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="valueType">
<xs:sequence>
<xs:element xmlns:odm="http://www.r-style.com/2014/odm-model" type="odm:modelType" name="model" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
答案 0 :(得分:1)
你的架构对我来说很好;它应该适合你想做的事情。
作为一种精确度,在XML中无法设置内容模型,如文本或某些标记专有。您需要使用混合内容模型,即使插入了<om:model>
,也始终可以插入一些文本。
为避免这种情况,您可以将<om:value>
的文字内容包装在标签中,例如<om:str>
,并在架构定义中使用<xs:choice>
,产生类似的内容:
<xs:element name="value">
<xs:complexType>
<xs:choice>
<xs:element name="model"/>
<xs:element name="str" type="xs:string" />
</xs:choice>
</xs:complexType>
</xs:element>
其他可能性:使用架构1.1。,您可以在<xs:assert>
中添加<xs:complexType>
条件。
只是一句小话:为了避免在任何地方重复xmlns:odm="http://www.r-style.com/2014/odm-model"
,只需在<xs:schema>
根声明上设置名称空间声明:
<xs:schema xmlns:odm="http://www.r-style.com/2014/odm-model"