【发布时间】:2018-06-07 13:41:46
【问题描述】:
我正在为事后创建的所有 XML 设计一个 XSD 架构。我知道我应该先做这个,但我对它有点陌生。到目前为止,我所有的 XML 都为我的应用程序创造了奇迹,我也只想对其进行一些良好的验证。
这里是我想要做的一个简单的例子。
<fields>
<field id="name" type="text">
<display>Somethings Name</display>
<description>The name of the something.</description>
</field>
</fields>
<forms>
<form id="custom_form">
<widgets>
<widget type="text-input">
<field id="name"/>
</widget>
</widgets>
</form>
</forms>
这是我拥有的 XSD 的简化示例:
<xs:sequence>
<xs:element name="fields" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="field" type="fieldType"
minOccurs="1" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="forms" maxOccurs="1" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="form" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="widgets" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="widget" minOccurs="1" maxOccurs="unbounded">
<!-- What do I put here to reference a field? -->
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
我的主要问题是如何告诉 XSD 架构 widget 节点中的元素是对其上方 fields 节点中定义的字段之一的引用?现在我只是使用代码进行此验证。
在这种情况下我应该如何定义字段节点?我是否应该简单地定义 field 节点两次,一次用于主定义,一次用于引用小部件节点中的字段?
我还看到了在 XSD 中重新定义节点的选项。我是否应该定义主要的field 定义,然后将其重新定义为小部件的引用样式节点?我怎么会这样做?
对于这种场景的常见或流行有什么建议吗?
【问题讨论】:
标签: xml xsd xsd-validation