XSD-需要两个属性中的一个?

XSD-需要两个属性中的一个?,xsd,Xsd,有没有办法指定XSD中需要两个属性中的一个 例如,我有这样一个定义: <xs:attribute name="Name" type="xs:string" use="optional" /> <xs:attribute name="Id" type="xs:string" use="optional" /> 我希望能够定义至少其中一个是必需的。这可能吗?不,我认为你不能用属性来实现这一点。您可以将两个包装成一个——但对于属性,恐怕没有等效的构造。Marc是非常正确的

有没有办法指定XSD中需要两个属性中的一个

例如,我有这样一个定义:

<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Id" type="xs:string" use="optional" />


我希望能够定义至少其中一个是必需的。这可能吗?

不,我认为你不能用属性来实现这一点。您可以将两个
包装成一个
——但对于属性,恐怕没有等效的构造。

Marc是非常正确的。。。XSD中的xs:choice父元素中不能有xs:attribute子元素

逻辑似乎是,如果一个元素的两个实例具有一组相互排斥的属性,那么它们在逻辑上是两个不同的元素


Jeni Tennison已经介绍了一种解决方法。

您应该在W3C wiki上查看此页面:

XSD 1.1将允许您使用断言来完成此操作

<xsd:element name="remove">
    <xsd:complexType>                        
        <xsd:attribute name="ref" use="optional"/>
        <xsd:attribute name="uri" use="optional"/>
        <xsd:assert test="(@ref and not(@uri)) or (not(@ref) and @uri)"/>            
    </xsd:complexType>
</xsd:element>

该示例定义了一个名为“person”的元素,该元素必须包含“employee”元素或“member”元素



不错的解决方案,但由于它是在2012年发布的(),而我使用的是.NET 4.0(2010年发布),所以它不受支持。.NET4.5支持它吗?示例类:我们不能像
这样做吗?我不相信xsl'or'是独占的。我们希望它是一个或另一个,但不是两个。这不适用于同名的多个元素。。。i、 e.我希望某个名称的元素有三种可能的组合,但选择三种具有相同名称的复杂类型失败:(
<xs:element name="person">
  <xs:complexType>
    <xs:choice>
      <xs:element name="employee" type="employee"/>
      <xs:element name="member" type="member"/>
    </xs:choice>
  </xs:complexType>
</xs:element>