我有这个XSD工作正常:
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="ExportFile">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Part" minOccurs="2" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="xsd:normalizedString" name="PrdCode" />
<xsd:element type="xsd:normalizedString" name="PrdName" />
<xsd:element type="xsd:nonNegativeInteger" name="Week1" />
<xsd:element type="xsd:nonNegativeInteger" name="Week2" />
<xsd:element type="xsd:nonNegativeInteger" name="Week3" />
<xsd:element type="xsd:nonNegativeInteger" name="Week4" />
<xsd:element type="xsd:nonNegativeInteger" name="Week5" />
<xsd:element type="xsd:nonNegativeInteger" name="Week6" />
<xsd:element type="xsd:nonNegativeInteger" name="Week7" />
<xsd:element type="xsd:nonNegativeInteger" name="Week8" />
<xsd:element type="xsd:nonNegativeInteger" name="Week9" />
<xsd:element type="xsd:nonNegativeInteger" name="Week10" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
如何更改它以验证包含10到80个“周”列的XML 使用顺序名称,例如:“Week1”,“Week2”,......,“WeekN”。 (10 = = N = 80)
感谢您的时间。
答案 0 :(得分:0)
有时当XSD不允许你做X时,这是因为X不是一件好事。使用结构化标识符(封装有关他们识别的事物的信息的标识符)几乎总是一个坏主意,在选择元素名称时肯定是个坏主意。
最好用<week20>
替换<week nr="20">
。
话虽如此,您仍然需要XSD 1.1来定义周数必须是递增的连续序列的约束。在XSD 1.1中表达此约束的方法是
<xs:assert test="every $i in 1 to count(week) satisfies week[$i]/@nr = $i"/>
但是,@nr
属性实际上是多余的:您可以始终根据序列中的位置计算周数。在XML中包含冗余信息有什么意义?如果你把它遗漏了,你就不需要定义约束了。