XSD 架构验证问题
XSD Schema Validation Issue
我有一个无法验证的架构片段。
<?xml version="1.1" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="colorrgbGroup">
<xs:all>
<xs:element name="r" type="xs:unsignedShort" minOccurs="1" maxOccurs="1"/>
<xs:element name="g" type="xs:unsignedShort" minOccurs="1" maxOccurs="1"/>
<xs:element name="b" type="xs:unsignedShort" minOccurs="1" maxOccurs="1"/>
<xs:element name="a" type="xs:unsignedShort" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
<xs:group name="colornameGroup">
<xs:all>
<xs:element name="colorName" type="xs:normalizedString" minOccurs="1" maxOccurs="1"/>
<xs:element name="a" type="xs:unsignedShort" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
<xs:group name="colorpresetGroup">
<xs:all>
<xs:element name="preset" type="xs:normalizedString" minOccurs="1" maxOccurs="1"/>
<xs:element name="a" type="xs:unsignedShort" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
<xs:element name="color">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:group ref="colorpresetGroup"/>
<xs:group ref="colornameGroup"/>
<xs:group ref="colorrgbGroup"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
我想说的是,元素颜色作为子元素具有三个可能的组之一,并且一次只能有一个选项。如您所见,所有三个选项都将 alpha 通道设为可选。
如果我将“<'xs:all'>”标签更改为“<'xs:sequence'>”标签,它会正确验证。但是对于 "colorrgbGroup",我们希望用户能够输入 RGBA、ABGR、ARGB、BGRA 等,因此我们更喜欢使用“<'xs:all'>”而不是“<[=30” =]>'.
我正在使用这个 website 来检查我的验证。
我的“<'xs:choice'>”中的每个“<'xs:group'>”选项都会给我以下错误。
Error - Line 30, 51: org.xml.sax.SAXParseException; lineNumber: 30;
columnNumber: 51 cos-all-limited. 1.2: An 'all' model group must
appear in a particle with '{'min occurs'}' = '{'max occurs'}' = 1, and
that particle must be part of a pair which constitutes the '{'content
type'}' of a complex type definition.
我以前处理过模式并修改过现有模式,但这是我第一次真正从头开始编写模式。非常感谢任何帮助!
谢谢!
托德
基本上,您不能将 xs:all 与 xs:choice 或 xs:sequence 混用。如果您的内容模型使用 xs:all,那么它就可以使用了。
规则名称 cos-all-limited kind-of 总结...
即使组中没有共同元素也不允许,所以这不仅仅是歧义(遇到第一个 'a' 而不知道哪个组 child使用)这就是问题所在。这只是你做不到的事情。
我有一个无法验证的架构片段。
<?xml version="1.1" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="colorrgbGroup">
<xs:all>
<xs:element name="r" type="xs:unsignedShort" minOccurs="1" maxOccurs="1"/>
<xs:element name="g" type="xs:unsignedShort" minOccurs="1" maxOccurs="1"/>
<xs:element name="b" type="xs:unsignedShort" minOccurs="1" maxOccurs="1"/>
<xs:element name="a" type="xs:unsignedShort" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
<xs:group name="colornameGroup">
<xs:all>
<xs:element name="colorName" type="xs:normalizedString" minOccurs="1" maxOccurs="1"/>
<xs:element name="a" type="xs:unsignedShort" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
<xs:group name="colorpresetGroup">
<xs:all>
<xs:element name="preset" type="xs:normalizedString" minOccurs="1" maxOccurs="1"/>
<xs:element name="a" type="xs:unsignedShort" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:group>
<xs:element name="color">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:group ref="colorpresetGroup"/>
<xs:group ref="colornameGroup"/>
<xs:group ref="colorrgbGroup"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
我想说的是,元素颜色作为子元素具有三个可能的组之一,并且一次只能有一个选项。如您所见,所有三个选项都将 alpha 通道设为可选。
如果我将“<'xs:all'>”标签更改为“<'xs:sequence'>”标签,它会正确验证。但是对于 "colorrgbGroup",我们希望用户能够输入 RGBA、ABGR、ARGB、BGRA 等,因此我们更喜欢使用“<'xs:all'>”而不是“<[=30” =]>'.
我正在使用这个 website 来检查我的验证。
我的“<'xs:choice'>”中的每个“<'xs:group'>”选项都会给我以下错误。
Error - Line 30, 51: org.xml.sax.SAXParseException; lineNumber: 30; columnNumber: 51 cos-all-limited. 1.2: An 'all' model group must appear in a particle with '{'min occurs'}' = '{'max occurs'}' = 1, and that particle must be part of a pair which constitutes the '{'content type'}' of a complex type definition.
我以前处理过模式并修改过现有模式,但这是我第一次真正从头开始编写模式。非常感谢任何帮助!
谢谢! 托德
基本上,您不能将 xs:all 与 xs:choice 或 xs:sequence 混用。如果您的内容模型使用 xs:all,那么它就可以使用了。
规则名称 cos-all-limited kind-of 总结...
即使组中没有共同元素也不允许,所以这不仅仅是歧义(遇到第一个 'a' 而不知道哪个组 child使用)这就是问题所在。这只是你做不到的事情。