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

XSD - разрешить тип элемента как целое ИЛИ пустое

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

<xsd:element name="weight" type="xsd:integer"/>
4b9b3361

Ответ 1

Что вам нужно сделать, это назначить ограничения для одного и того же элемента плюс создать на них объединение, например, следующий пример:

<xs:element name="job_code">
  <xs:simpleType>
    <xs:union>
      <xs:simpleType>
        <xs:restriction base='xs:string'>
          <xs:length value="0"/>
        </xs:restriction>
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base='xs:integer' />
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
</xs:element>

Используя это ограничение, вы указываете правильность xml, чтобы разрешить любое целочисленное значение и разрешить элементу, если он пуст.

Ответ 2

Мы можем добиться этого, создав SimpleType

<xs:simpleType name="NullOrInteger">
    <xs:restriction base="xs:string">
         <xs:pattern value="\d*|\s{0}" />
    </xs:restriction>
</xs:simpleType>

Добавьте NullOrInteger как тип, где вы хотите ограничить целое или нулевое значение.

например:

<xs:element name="null_or_int" type="NullOrInteger" />

Ответ 3

Вам нужно установить атрибут "nillable" как true:

<xsd:element name="weight" type="xsd:integer" nillable="true"/>

См. Принцип схемы XML.

Ответ 4

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <product>
        <weight xsi:nil="true"/>
    </product>
</products>

Попробуйте выше, должен работать; скорее всего, вы забыли добавить атрибут xsi: nil. Кроме того, убедитесь, что весовой элемент не имеет характера в виде детей (пробел все равно не будет приемлемым). Если вам нужно передать некоторые символы вместо целого числа, вам нужно определить тип объединения, чтобы разрешить оба.

Ответ 5

Я подошел к этому ответу, выполнив поиск того, как получить атрибут как нулевое целое число, используя схему xsd и на основе которого создаются классы JAXB. Я не нашел здесь ответа, поэтому после того, как я обнаружил ответ, я решил поделиться им. Следующая часть xsd будет генерировать недействительный тип int (int):

<xsd:attribute name="length" type="xsd:int" use="required"/>

В коде Java это приведет к:

@XmlAttribute(name = "length", required = true)
protected int length;

Если мы отбросим требуемое использование, мы получим:

@XmlAttribute(name = "length")
protected Integer length;

Надеюсь, это поможет кому-то. И даже если этот ответ может быть не связан с фактическим вопросом, я считаю полезным быть здесь для тех, кто будет здесь, выполняя тот же поиск, что и я!