我想为字符串键值对的树构建XSD。 的东西,以适应这一点:XSD字符串键值对的树
<entry>
<key>root</key>
<entry key="name">john</entry>
<entry key="address">
<entry key="street">Rou de Flon 1</entry>
<entry key="city">Lausanne</entry>
</entry>
</entry>
我没能得到这个(我想用的xsd:字符串,而不是XSD:anyType的)
这种替代模式:
<entry>
<key>root</key>
<entry>
<key>name</key>
<value>john</value>
</entry>
<entry>
<key>address</key>
<entry>
<key>street</key>
<value>Rou de Flon 1</value>
</entry>
<entry>
<key>city</key>
<value>Lausanne</value>
</entry>
</entry>
</entry>
可以用:
<xsd:complexType name="Entry">
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:choice>
<xsd:element name="value" type="xsd:string"/>
<xsd:element name="entry" maxOccurs="unbounded" type="rbo:Entry"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
但我宁愿使用第一种模式,因为它更紧凑。
我想这个其他XSD:
<xsd:complexType name="ValueEntry">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="key" use="required" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="ListEntry">
<xsd:sequence>
<xsd:element name="entry" maxOccurs="unbounded" type="rbo:ListOrValueEntry"/>
</xsd:sequence>
<xsd:attribute name="key" use="required" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="ListOrValueEntry">
<xsd:sequence>
<xsd:choice>
<xsd:element name="value" type="rbo:ValueEntry"/>
<xsd:element name="entry" type="rbo:ListEntry"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
,但它会产生更加难看XML:
<listEntry>
<entry>
<value key="name">john</value>
</entry>
<entry>
<entry key="address">
<entry>
<value key="street">Rou de Flon 1</value>
</entry>
<entry>
<value key="city">Lausanne</value>
</entry>
</entry>
</entry>
</listEntry>
那么,有没有一种方法来创建此模式的XSD,而无需使用XSD:anyType的?
<entry>
<key>root</key>
<entry key="name">john</entry>
<entry key="address">
<entry key="street">Rou de Flon 1</entry>
<entry key="city">Lausanne</entry>
</entry>
</entry>
ps:请不要讨论你是否喜欢这种模式;这是一个很好的讨论,但它不是这篇文章的目标。 这篇文章的目的是要找出如何尽可能为这个XML编写XSD,而不使用xsd:anyType。
我试过对字符串和非字符串元素使用不同标签名称的选项,但我没有为它构建XSD。那正是我在用我包括在帖子中的大XSD尝试时,但它产生了我在帖子中提到的“丑陋的XML”。 你知道如何构建一个与你的例子一致的XSD吗?关于“更可读性将会...”的 –
,我同意,这是XML和XSD的目的。但是,由于某个项目的特定原因,我需要预先未预先定义的字符串值键对树。 –
我已经为XML添加了XSD。另外,如果你需要一对没有预定义的对的树 - 这正是XML的内容。使用XSD“定义不预定义”有什么意义? – kan