Xsd 如何通过xs:univoque实现我的枚举
有人能告诉我为什么我的XSD中的unique元素不强制使用unique属性吗?这会引发错误,因为最后一个Xsd 如何通过xs:univoque实现我的枚举,xsd,attributes,unique,Xsd,Attributes,Unique,有人能告诉我为什么我的XSD中的unique元素不强制使用unique属性吗?这会引发错误,因为最后一个屏幕结果元素不包含类型属性的唯一值。我还应该注意到,我确实是在ScreenResults中强制每种类型(ScreenResult需要存在3次,有3种类型的屏幕,我需要唯一性)因此,如果有更好的方法来实现这一点,我也完全赞成 多谢各位 以下是我的XML代码片段: <ScreenResults> <ScreenResult Type="Screen Type A">
屏幕结果
元素不包含类型
属性的唯一值。我还应该注意到,我确实是在ScreenResults
中强制每种类型
(ScreenResult
需要存在3次,有3种类型的屏幕,我需要唯一性)因此,如果有更好的方法来实现这一点,我也完全赞成
多谢各位
以下是我的XML代码片段:
<ScreenResults>
<ScreenResult Type="Screen Type A">1</ScreenResult>
<ScreenResult Type="Screen Type B">1</ScreenResult>
<ScreenResult Type="Screen Type B">2</ScreenResult>
</ScreenResults>
1.
1.
2.
这是我的XSD代码段(还请注意,我的原始XSD代码段跨越多个文件,但我已经验证了我的所有名称空间都是正确的):
1.
2.
3.
肯定的
消极的
未管理
我正在为遇到此问题的任何其他人发布我的解决方案。虽然我断言我所有的名称空间都是正确的,但这当然是问题所在。除了唯一元素本身的之外,所有名称空间都是正确的。
我错误地认为,惟一元素不需要在名称空间前面加前缀,因为它在上下文中。但事实并非如此。因为我确实为文件声明了一个默认名称空间,所以我仍然需要前缀 因此,我唯一的改变和解决方案如下:
<xs:element name="ScreenResults" type="import:ScreenResults" minOccurs="0" maxOccurs="1">
<xs:unique name="UniqueScreenResults">
<xs:selector xpath="import:ScreenResult" />
<xs:field xpath="@Type" />
</xs:unique>
</xs:element>
感谢您发布解决方案,我刚刚遇到了完全相同的问题。如果您想要univoque属性而不是值,这应该可以解决您的问题:
<xs:element name="ScreenResults" type="import:ScreenResults" minOccurs="0" maxOccurs="1">
<xs:unique name="UniqueScreenResults">
<xs:selector xpath="import:ScreenResult" />
<xs:field xpath="@Type" />
</xs:unique>
</xs:element>