XML模式中多维关联数组的结构

时间:2012-01-04 03:06:06

标签: xml multidimensional-array xsd hierarchy xml-validation

我还在学习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可以容纳。

1 个答案:

答案 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>

然后很容易在模式中指定节点的内容模型是一个选择:节点序列或单个值。