Наличие как атрибута, так и ограничения для элемента в XML-схеме - PullRequest
23 голосов
/ 26 августа 2009

Я пытаюсь написать 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>

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

Ответы [ 2 ]

16 голосов
/ 26 августа 2009

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

Марк

0 голосов
/ 30 ноября 2017

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

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