【发布时间】:2018-10-29 09:05:14
【问题描述】:
下面是 xml ,我需要创建一个 xml 模式(xsd 文件)来验证字段名称,即在 tableData 节点中(在下面的 xml 中),第一列名称应该是“字段”,键为“ name”,它的值应该是“Data1”。我还想验证该列的值应该是 xs:integer 类型(因为值是 123)。 同样需要表的所有列。我是 xml 验证的新手,所以面临问题。
XML:
<table name="Employee">
<tableData>
<field name="Data1">123</field>
<field name="Data2">234</field>
<field name="Data3">Y</field>
<field name="Data4">321</field>
</tableData>
</table>
我尝试创建架构,但未能验证 123 的类型(即 xs:integer)和其他列类型。如果有人可以对此提供提示,请提供。
我尝试过的架构:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="tableData" >
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="4" name="field" type="fieldType" minOccurs="4"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="fieldType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="validAttributeType" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="validAttributeType">
<xs:restriction base="xs:string">
<xs:enumeration value="Data1"/>
<xs:enumeration value="Data2"/>
<xs:enumeration value="Data3"/>
<xs:enumeration value="Data4" />
</xs:restriction>
</xs:simpleType>
</schema>
另外,对于 xml 中的表名 =“Employee”(xml 中的第一行),我尝试创建一个架构并将其添加到我上面提到的架构之前,但这会给出错误:元素“表”不能包含子元素'tableData' 因为父元素的内容模型只是文本。我在上述架构之上添加的架构是:
<xs:element name="table" type="mTable"/>
<xs:complexType name="mTable" >
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" fixed="Employee"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
【问题讨论】:
-
你能告诉我们你目前的架构吗?这样我们就可以看到您需要进行哪些更改才能使其正常工作。
-
已经添加了我目前尝试过的架构。
-
根据您的示例 xml,字段可以包含数字和文本值。 (123/234/Y/321)。你到底想验证什么?
-
我想验证每个字段类型(即 Data1 值是 123 所以,它应该是 xs:integer )。同样适用于所有字段 (123/234/Y/321)。