我想执行xml架构验证。这是我的xml文件的摘录。
.....
<parameter name="ip">true</parameter>
<parameter name="address">calo</parameter>
<parameter name="telephone" locked="false">optional</parameter>
<parameter name="tools">cutter</parameter>
.......
当我生成xsd文件时,它看起来像这样。
<xs:complexType name="parameterType" mixed="true">
<xs:sequence>
<xs:element type="propertyType" name="property" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="optional"/>
<xs:attribute type="xs:string" name="locked" use="optional"/>
</xs:complexType>
<xs:complexType name="listenerType" mixed="true">
<xs:sequence>
<xs:element type="propertyType" name="property" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute type="xs:string" name="class" use="optional"/>
<xs:attribute type="xs:string" name="name" use="optional"/>
<xs:attribute type="xs:string" name="locked" use="optional"/>
</xs:complexType>
我的问题是我想通过施加限制来验证每个标签属性值。 (对于'ip'检查值(true)包含一些字符,如'$',对于地址值'calo'包含相同的字符($)。
我使用过这样的东西,但它只验证了属性的名称。 (例如:ip - ok,i $ p - 错误)
<xs:attribute name="name" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^$]*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
我想要的是验证值而不是属性的名称。 (不是名字'地址',而是价值 - 'calo'包含'$')无论如何要做到这一点?
答案 0 :(得分:0)
只要parameterType
包含子元素(propertyType
),就不能这样做。
如果parameterType
不包含任何子元素,您可以声明对其内容的限制,如下所示:
<xs:simpleType name="propertyString">
<xs:restriction base="xs:string">
<xs:pattern value="[^$]*"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="propertyType">
<xs:simpleContent>
<xs:extension base="propertyString">
<xs:attribute type="xs:string" name="name" use="optional"/>
<xs:attribute type="xs:string" name="locked" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
请注意,根据其中一个属性的值,不可能有不同的限制。