这是我想在我的架构中定义的XML的一部分。我已经为name
元素的<add />
属性添加了一个唯一约束。
<parameters>
<add name="one" value="1" />
<add name="two" value="2" />
</parameters>
但我不知道如何阻止<add name="" value="" />
。我尝试了以下架构,但它没有兑现:
<xs:attribute name="name" use="required" type="config:NonEmptyString" />
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
config
是架构的目标命名空间。
编辑:当我在XML编辑器中编写XML时,我正在使用Visual Studio来验证XML。
答案 0 :(得分:2)
我做了一个快速测试;从XML中创建了一个XSD并添加了约束:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="parameters">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="add">
<xsd:complexType>
<xsd:attribute name="name" type="NonEmptyString" use="required"/>
<xsd:attribute name="value" type="xsd:unsignedByte" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="NonEmptyString">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
我已经验证了这个XML:
<parameters>
<add name="" value="1" />
<add name="two" value="2" />
</parameters>
我有这个错误:
Error occurred while loading [], line 2 position 8
The 'name' attribute is invalid - The value '' is invalid according to its datatype 'NonEmptyString' - The actual length is less than the MinLength value.
我想说问题在于你的XSD处理器,而不是XSD本身。也许您可以使用您正在使用的处理器更新帖子?
答案 1 :(得分:1)
Visual Studio 2010正确执行验证 - 它会产生警告:
Warning 4 The 'name' attribute is invalid - The value '' is invalid according to its datatype 'config:NonEmptyString' - The actual length is less than the MinLength value. XMLFile1.xml 3 14 Miscellaneous Files
但出于某种原因(bug?),它没有在XML编辑器中强调错误位置。