我正在编写一个 XSD 模式来验证一个文档,其中存储了许多result
元素。此元素的两个属性,clickIndex
和timeViewed
是可选的,并使用内置数据类型nonNegativeInteger
和decimal
. 我不想在未设置它们的值时删除这些属性,而是将它们设置为空字符串,如下所示:
<Page resultCount="10" visited="true">
<Result index="1" clickIndex="1" timeViewed="45.21" pid="56118" title="alpha"/>
<Result index="2" clickIndex="" timeViewed="" pid="75841" title="beta"/>
<Result index="3" clickIndex="2" timeViewed="21.45" pid="4563" title="gamma"/>
<Result index="4" clickIndex="" timeViewed="" pid="44546" title="delta"/>
<Result index="5" clickIndex="" timeViewed="" pid="1651" title="epsilo"/>
<Result index="6" clickIndex="" timeViewed="" pid="551651" title="zeta"/>
<Result index="7" clickIndex="" timeViewed="" pid="20358" title="eta"/>
<Result index="8" clickIndex="" timeViewed="" pid="61621" title="theta"/>
<Result index="9" clickIndex="" timeViewed="" pid="135154" title="iota"/>
<Result index="10" clickIndex="" timeViewed="" pid="95821" title="kappa"/>
</Page>
不幸的是,这不会针对以下 xsd 进行验证:
<xs:element name="Result">
<xs:complexType>
<xs:attribute name="index" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="clickIndex" type="xs:nonNegativeInteger" use="optional"/>
<xs:attribute name="timeViewed" type="xs:decimal" use="optional"/>
<xs:attribute name="pid" type="xs:positiveInteger" use="required"/>
<xs:attribute name="title" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
是否无法验证具有已定义类型的属性上的空字符串?有没有办法在不定义自定义类型的情况下做到这一点?我只是忘记了 XSD 中的一个选项吗?
我将处理这些 XML 文件以生成统计信息,其中缺少的属性可能会引入不必要的复杂性。如果没有解决方法,我将用零替换空值。我宁愿保留空字符串,因为它看起来更干净,但也许零也会更有效。