Xsd 如何通过xs:univoque实现我的枚举

Xsd 如何通过xs:univoque实现我的枚举,xsd,attributes,unique,Xsd,Attributes,Unique,有人能告诉我为什么我的XSD中的unique元素不强制使用unique属性吗?这会引发错误,因为最后一个屏幕结果元素不包含类型属性的唯一值。我还应该注意到,我确实是在ScreenResults中强制每种类型(ScreenResult需要存在3次,有3种类型的屏幕,我需要唯一性)因此,如果有更好的方法来实现这一点,我也完全赞成 多谢各位 以下是我的XML代码片段: <ScreenResults> <ScreenResult Type="Screen Type A">

有人能告诉我为什么我的XSD中的unique元素不强制使用unique属性吗?这会引发错误,因为最后一个
屏幕结果
元素不包含
类型
属性的唯一值。我还应该注意到,我确实是在
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>