我有一个XSD 1.0序列,它定义了一组元素,其中一些元素可以是可选的,但其中没有一个可以出现多次,并且还以<xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="lax"/>
标记结尾,以便用户可以添加他们自己的数据元素以最简单的方式编程导出符合的XML(即理想情况下不需要它们定义自己的名称空间/ XSD)。对xsd进行进一步约束:any?
处理用户生成的XML时,我会忽略通过<any>
标记添加的任何自定义元素,但是我想知道是否有强制元素名称唯一性的方法,以便我可以确定它们'是不是将maxOccurs=1
中定义的元素的重复项放在一起?
下面是一个简单的XSD(交互式版本here):
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns="testxsd" targetNamespace="testxsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:element name="XSDSequence">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="itemA" type="xsd:string"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="itemB" type="xsd:string"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="itemC" type="xsd:string"
minOccurs="1" maxOccurs="1"/>
<xsd:any minOccurs="0" maxOccurs="unbounded"
namespace="##any" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
这里是传递XSD验证,但我想对因错误出在最后的复制<itemA>
一个示例XML:
<XSDSequence xmlns="testxsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<itemA>foo</itemA>
<itemC>bar</itemC>
<randomElement>this is ok</randomElement>
<itemA>I want this second itemA to cause an error</itemA>
</XSDSequence>
(请注意,通过属性而不是元素捕获数据项是不东西,我婉吨至做。)
谢谢,我认为这很可能是这种情况。 – ivanatpr