Подтвердить что ты не робот

Имея как атрибут, так и ограничение на элемент в xml-схеме

Я пытаюсь написать схему xml, которая будет проверять этот фрагмент xml:

<date isodate="2007-03-14">14 march 2007</date>

В атрибуте isodate должен быть установлен тип xs: date, а содержание должно быть не более 50 символов.

Интересно, можно ли написать определение схемы xml в одном блоке, что-то вроде этого возможно:

<xs:element name="date" minOccurs="0" maxOccurs="1">  
  <xs:complexType>  
    <xs:simpleContent>  
      <xs:restriction base="xs:string">  
        <xs:minLength value="0"/>  
        <xs:maxLength value="50"/>  
      </xs:restriction>  
      <xs:attribute name="isodate" type="xs:date" use="required"/>  
    </xs:simpleContent>  
  </xs:complexType>  
</xs:element>

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

<xs:simpleType name="reviewDate">  
    <xs:restriction base="xs:string">  
        <xs:minLength value="0"/>  
        <xs:maxLength value="50"/>  
    </xs:restriction>  
</xs:simpleType>

<xs:element name="date" minOccurs="0" maxOccurs="1">  
    <xs:complexType>  
        <xs:simpleContent>  
            <xs:extension base="reviewDate">  
                <xs:attribute name="isodate" type="xs:date" use="required"/>  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
</xs:element>

У меня есть вопрос, как написать определение в одном блоке, чтобы схема была более читаемой и не ссылалась на типы в других частях схемы.

4b9b3361

Ответ 1

Вы не можете объединить и ограничение, и расширение в один блок XSD. Решение, которое у вас есть с простым типом "ReviewDate", является лучшим решением, о котором я знаю.

Марк

Ответ 2

У вас может быть элемент с ограничениями и атрибутом (-s). Ключ должен определить пользовательский тип с его ограничениями, а затем использовать его для добавления в него атрибутов. См. Здесь Ограничение содержимого и проверка атрибута для одного и того же элемента в XSD