我已经对Google尝试了很多次,但这是不可能的,或者我使用的术语不正确。是否可以为以下示例制作XSD:
<inputs>
<input>
<name>Test 1</name>
<valuesTag>values_generated_15Jan2015</valuesTag>
</input>
<inputs>
<values>
<values_generated_15Jan2015>
...
</values_generated_15Jan2015>
</values>
这样做的原因是,对于一个值列表,我们只有很少的选择,但是对于大量的输入,其中每个值列表由多个输入使用,最好不要重复这些值。
看一下使用XSD 1.1断言的示例,该断言在注释中进行了解释。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="inputs" type="inputsType" />
<xs:element name="values" type="valuesType" />
</xs:sequence>
<!-- Ensures that there is the same number of value nodes than input nodes -->
<xs:assert test="count(values/value) = count(inputs/input)" />
<!-- Ensures that every value in a valueId node is unique -->
<xs:assert test="count(inputs/input/valueId) = count(distinct-values(inputs/input/valueId))" />
<!-- Ensures that every value in a id attribute is unique -->
<xs:assert test="count(values/value) = count(distinct-values(values/value/@id))" />
<!-- Ensures that all values in id attributes appear in valueId -->
<xs:assert test="count(values/value[@id = ../../inputs/input/valueId]) = count(values/value)" />
</xs:complexType>
</xs:element>
<xs:complexType name="inputsType">
<xs:sequence>
<xs:element name="input" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="valueId" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="valuesType">
<xs:sequence>
<xs:element name="value" maxOccurs="unbounded">
<xs:complexType>
<!-- Content -->
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句