Ограничение содержимого и проверка атрибутов для одного и того же элемента в XSD - PullRequest
8 голосов
/ 21 сентября 2011

Я хотел бы подтвердить, что элемент 'Test' должен

  • имеют ограниченное содержимое (например, с использованием ограничения шаблона) и
  • Содержит определенные атрибуты (например, «id», «class» и «name»).

XSD, который я пишу, выглядит так:

<xsd:element name="Test" minOccurs="0" maxOccurs="unbounded">
  <xsd:complexType mixed="true">
    <xsd:simpleContent>
      <xsd:restriction>
        <xsd:pattern value="xyz"/>
      </xsd:restriction>
    </xsd:simpleContent>
    <xsd:attribute name="id" type="xsd:string"></xsd:attribute>
    <xsd:attribute name="class" type="xsd:string"></xsd:attribute>
    <xsd:attribute name="name" type="xsd:string"></xsd:attribute>
  </xsd:complexType>
</xsd:element>

Однако, когда я кодирую это в Visual Studio, я получаю следующую ошибку для элементов 'xsd: attribute':

'атрибут' и модель контента являются взаимоисключающими

Есть ли способ проверить оба атрибута ограничения содержимого и для одного и того же элемента?

1 Ответ

13 голосов
/ 21 сентября 2011

Вам нужно выделить свое ограничение и дать ему имя, а затем назвать его базовым типом для расширения.Как это:

  <xsd:simpleType name="RestrictedString">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="xyz" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:element name="Test">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="RestrictedString">
          <xsd:attribute name="id" type="xsd:string" />
          <xsd:attribute name="class" type="xsd:string" />
          <xsd:attribute name="name" type="xsd:string" />
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
...