我还在学习XML架构的早期阶段,所以希望这不是一个问题太简单或天真 (我正在仔细阅读规范和各种其他资源,但如果有人可以建议进一步阅读,我不仅仅是建议)
无论如何,我对新手的理解似乎不太可能,所以我希望有人可以纠正我(因此证明可能)
我正在尝试创建一个复杂类型,它可以包含任何简单类型,或者包含复杂类型的另一个节点,但不能同时包含;因此(添加字符串“key”属性)模仿多维关联数组。
问题是,我似乎无法弄清楚如何在两者之间作出选择(当然,我似乎无法弄清楚这是否可行,尽管我的阅读引导我不相信)
因此,基本上,我需要做些什么来使目标文档验证:
<node key="string">
<node key="string">
arbitrary value
</node>
<node key="string">
arbitrary value
</node>
</node>
但无效:
<node key="string">
<node key="string">
arbitrary value
<node key="string">
arbitrary value
</node>
</node>
</node>
(注意混合内容节点,我不想要允许)
这就是我所在的地方:
<xs:attribute name="key">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:pattern value="[a-zA-Z_][a-zA-Z0-9_]*" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:complexType name="data">
<!-- what do i do? -->
<xs:attribute ref="key" use="required" />
</xs:complexType>
如果这实际上不可能,我认为这也没关系,但这似乎是一个相当常见的数据结构,我认为XML可以容纳。
答案 0 :(得分:2)
如果您将设计更改为:
,我认为您会发现XML更易于处理(不仅仅是使用XSD,还使用XSLT和XQuery)<node key="string">
<node key="string">
<value>arbitrary value</value>
</node>
<node key="string">
<value>arbitrary value</value>
</node>
</node>
然后很容易在模式中指定节点的内容模型是一个选择:节点序列或单个值。