我正在尝试定义我的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元素是不可能的。考虑到这一点,我怎么能这样做呢?我在方法中遗漏了什么吗?
答案 0 :(得分:2)
我想你要说的是,必须有一个“标题”,它可以在序列的任何地方。你肯定不能这样做:你违反了XSD中的许多规则,例如“元素声明一致”规则,如果两个兄弟元素具有相同的名称,那么它们必须具有相同的类型。
你当然可以在XSD 1.1中使用断言来完成它。在XSD 1.0中可能有一些使用唯一性约束的创造性方法,但是如果有的话我就看不到了。
我的方法是将XML实例重新设计为更卫生的东西。请记住,在验证之前总是可以选择转换。