作为特定复杂类型扩展的任何类型元素的xsd序列

作为特定复杂类型扩展的任何类型元素的xsd序列,xsd,Xsd,基本上,如果这是.NET,它将如下所示: ISomething { string A { get; } int B { get; } } var somethings = new List<ISomething>(); something.Add(new SomethingSomething()); something.Add(new AnotherSomething()); something.Add(new AnythingSomething()); { 字符串A{

基本上,如果这是.NET,它将如下所示:

ISomething
{
  string A { get; }
  int B { get; }
}

var somethings = new List<ISomething>();
something.Add(new SomethingSomething());
something.Add(new AnotherSomething());
something.Add(new AnythingSomething());

{
字符串A{get;}
int B{get;}
}
var somethings=新列表();
添加(newsomethingsomething());
添加(新的另一个东西());
添加(新的AnythingSomething());
基本上,我希望元素序列可以被命名为它们想要的任何名称,只要它们的复杂类型是我定义的复杂类型的扩展

所以它可能看起来像:

<somethings>
  <something-something a="foo" b="0" />
  <another-something a="bar" b="1" />
  <example:anything-something a="baz" b="2" />
</somethings>

我相信这是可能的,我想另一种选择是合成,我有一个标准元素,可以包含一个至少是“某物”的子元素

提前谢谢,xsd不是我的强项


编辑,好的,到目前为止我发现的最接近的东西基本上是:

<somethings>
  <something xsi:type="something-something" a="foo" b="0" />
  <something xsi:type="another-something" a="bar" b="1" />
  <something xsi:type="example:anything-something" a="baz" b="2" />
</somethings>

我想这是处理这件事的唯一方法?如果是这样的话,这还不算太糟糕,vs intellisense似乎对这一点非常了解


谢谢。

这是个好问题。您可以执行“any”序列,这将允许您在其中任意命名元素,但这不会以任何方式约束它们。或者,下面的模式约束名称和属性,但不约束其他内容(如第二个示例)



我找不到一种方法来约束类型,但不能约束元素名。

感谢您确认这一点,我想元素和类型在xml中要明显得多,所以我们两人所使用的版本可能是实现这一点的理想方法。。再次感谢
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="somethingsType" >
    <xs:complexContent>    
      <xs:restriction base="xs:anyType">
       <xs:attribute name="a" type="xs:string"/>
       <xs:attribute name="b" type="xs:string"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="somethingsSeq" >
    <xs:sequence>
      <xs:element name="something" type="somethingsType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="somethings"  type="somethingsSeq"/> 

</xs:schema>