последовательность xsd любого типа элемента, который является расширением определенного сложного типа - PullRequest
4 голосов
/ 05 января 2010

В принципе, если бы это был .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());

По сути, я хочу, чтобы последовательность элементов называлась как угодно, если их сложный тип является расширением сложного типа, который я определяю.

Так что это может выглядеть примерно так:

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

Я уверен, что это возможно, я полагаю, альтернативой является композиция, где у меня есть стандартный элемент, который может содержать один дочерний элемент, по крайней мере, «Нечто».

Заранее спасибо, xsd не моя сильная сторона.


Edit, хорошо, самая близкая вещь, которую я нашел до сих пор, в основном:

<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>

Полагаю, это единственный способ, которым это обрабатывается? если это так, то это не так уж и плохо, и против intellisense, кажется, понимает это достаточно хорошо.

Спасибо.

1 Ответ

1 голос
/ 05 января 2010

Это хороший вопрос. Вы можете сделать последовательность «any», которая позволит вам иметь произвольно названные элементы внутри, но это никак не ограничит их. В качестве альтернативы приведенная ниже схема ограничивает имя и атрибуты, но не более (как во втором примере)

<?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>

Я не могу найти способ ограничения типа, но не имени элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...