XML架构绑定存在具有特定值属性的元素

XML架构绑定存在具有特定值属性的元素,xml,xsd,Xml,Xsd,我有以下xml结构- <Recipients> <SwapswireRecipient Role="Counterparty"> ... </SwapswireRecipient> <SwapswireRecipient Role="PrimeBroker"> ... </SwapswireRecipient> </Recipients> ... ... 收件人可以有0个或多个SwapswireRecipi

我有以下xml结构-

<Recipients>
 <SwapswireRecipient Role="Counterparty">
 ...
 </SwapswireRecipient>
 <SwapswireRecipient Role="PrimeBroker">
 ...
 </SwapswireRecipient>
</Recipients>

...
...
收件人可以有0个或多个SwapswireRecipient,并且每个SwapswireRecipient都应该具有具有唯一值的角色属性。角色属性是可选的

我已经在xsd模式中实现了上面的内容,它工作得很好。现在我有一个新的约束要在模式中实现,我发现很难实现

约束- 如果存在SwapswireRecipient,则应仅存在一个SwapswireRecipient,且Role=“Contractor”值为


非常感谢您的帮助。

这不能在XML模式中完成,一部分是由于选择器支持的XPath语法的限制,另一部分与跨字段验证有关


如果必须在XSD中捕获这样的规则,我将重写XML模式,以便元素的内容将包含一个可选序列,该序列由一个强制元素组成,后跟零或多个。我将保留元素的xsd:unique子句,并确保@Role的类型受到限制,因此它不包含对方值。

这不能在XML模式中完成,一部分是由于选择器支持的XPath语法的限制,另一部分与跨字段验证相关

如果必须在XSD中捕获这样的规则,我将重写XML模式,以便元素的内容将包含一个可选序列,该序列由一个强制元素组成,后跟零或多个。我将保留元素的xsd:unique子句,并确保@Role的类型受到限制,以便它不包括对方的值