Могут ли атрибуты быть обнуляемыми в XSD 1.0?

У меня есть случай, когда атрибут 1) не требуется, 2) при использовании может принимать .i) значение null или пустое или .ii) строку версии, которая будет проверена (надеюсь) с помощью регулярного выражения.

Что касается 2.i, как я могу создать атрибут, который может быть нулевым? Я еще не видел этого в течение моего короткого времени с xml и xsds

РЕДАКТИРОВАТЬ: Добавление примера того, о чем я говорю, где «атрибут_1» соответствует моей ситуации

<xsd:element attribute_1="x" attribute_2="y" />
<!-- or -->
<xsd:element attribute_2="y" />
<!-- or -->
<xsd:element attribute_1="" attribute_2="y" />

person Jefftopia    schedule 10.06.2013    source источник


Ответы (2)


Вам нужно создать сложный тип для вашего элемента и объявить атрибут как «необязательный», примерно так:

<xs:element name="tElementType">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="myelement" type="xs:string"/>           
    </xs:sequence>
    <xs:attribute name="myattribute" type="xs:string" use="optional"/>
  </xs:complexType>
</xs:element>-
<xs:element name="thisIsMyRealElement" type="tElementType" />

См. http://www.w3schools.com/Schema/schema_example.asp.

Надеюсь, это поможет ;)

person gtonic    schedule 10.06.2013
comment
Ах, но передача пустого значения отличается от наличия или отсутствия атрибута. use=Optional необходимо, но недостаточно. Я немного почитал и вот что нашел: Использование minLength=0 по какой-то причине не работает, но использование ‹xsd:pattern value=x| /› разрешено для значения x или null. Между шаблоном и использованием я смог проверить: D Однако спасибо за ответ. - person Jefftopia; 10.06.2013

В XSD «обнуляемый» — это технический термин, применимый только к элементам; nillability позволяет элементам, типы которых в противном случае требовали бы, чтобы они имели содержимое, быть действительными, даже если они пусты. Таким образом, ответ на поставленный вами вопрос: «Нет, атрибуты не могут быть нулевыми».

С другой стороны, то, что вы описываете, является атрибутом, который может быть неопределенным (чего вы можете достичь с помощью use="optional" в объявлении атрибута) и который допускает пустую строку в качестве допустимого значения (которое уже является свойством xs:string). Таким образом, ответ на вопрос «могу ли я сделать атрибут отсутствующим и действительным, если он указан с пустой строкой?» Да."

Поскольку "" является допустимым значением для xs:string, ни minLength="0", ни указанный вами шаблон не нужны; если у вас есть валидатор, который отклоняет пустую строку для атрибутов, введенных как xs:string, у вас сломан валидатор.

person C. M. Sperberg-McQueen    schedule 21.06.2013