我正在尝试定义我的XSD,但我在使用元素时遇到了问题。
下面是我的XML:
<key>Lambda, People</key>
<dict>
<key>Cost Center</key>
<string> 186B Hello Street, Mangilao</string>
<key>Organisation Path</key>
<string>NOA/NOZ</string>
<key>Phone Number</key>
<string>+1340232103</string>
<key>Room Number</key>
<string>GUM Sales</string>
<key>VoIP</key>
<string></string>
<key>title</key>
<string>Lambda, People</string>
</dict>下面是我想在我的XSD中使用的:
<!-- <key>title</key><string>...</string> -->
<xs:group name="key_string_title">
<xs:sequence>
<!-- <key>title</key> -->
<xs:element name="key" type="xs:string" fixed="title"/>
<!-- <string>...<string> -->
<xs:element name="string" type="xs:string"/>
</xs:sequence>
</xs:group>
<!-- <key>title</key><string>...</string> -->
<!-- <key><string> -->
<xs:group name="key_string">
<xs:sequence>
<!-- <key>...</key> -->
<xs:element name="key" type="xs:string"/>
<!-- <string>...<string> -->
<xs:element name="string" type="xs:string"/>
</xs:sequence>
</xs:group>
<!-- <key><string> -->
<!-- <key><dict> Staff -->
<xs:group name="key_dict_staff">
<xs:sequence>
<!-- <key> -->
<xs:element name="key" type="xs:string"/>
<!-- <dict> -->
<xs:element name="dict">
<xs:complexType>
<xs:all>
<!-- <key>title</key><string>...</string> -->
<xs:group ref="key_string_title"/>
<!-- <key><string> -->
<xs:group ref="key_string" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
</xs:element>
<!-- </dict> -->
</xs:sequence>
</xs:group>
<!-- </key></dict> Staff -->不幸的是,我发现在all元素中使用group元素是不可能的。考虑到这一点,我怎么才能做得对呢?我是不是在这种方法中遗漏了什么?
发布于 2014-04-09 22:48:29
我猜你想说的是,必须只有一个“标题”,而且它可以在序列中的任何地方。您肯定不能以这种方式实现:您违反了XSD中的许多规则,例如“元素声明一致”规则,该规则规定,如果两个兄弟元素具有相同的名称,则它们必须具有相同的类型。
当然,您可以使用XSD1.1中的断言来完成此操作。在XSD1.0中可能有一些创造性的使用唯一性约束的方法,但是如果有,我就看不到它了。
我的方法是将XML实例重新设计成更卫生的东西。请记住,在验证之前总是有转换的选项。
https://stackoverflow.com/questions/22964654
复制相似问题