XML-схема - как сопоставить любое целое число? - PullRequest
1 голос
/ 08 декабря 2011

Мне нужно написать файл XML, который должен соответствовать схеме.Схема принудительно устанавливает тип данных элемента (в частности, идентификатор процесса в Linux) как целое число.

Этот фрагмент кода прошел проверку -

<pid datatype="int">123</pid>

Однако я не буду заранее знать «123» или идентификатор процесса, поэтому я хочу написать что-то вроде этого-

 <pid datatype="int">*</pid>

Очевидно, что это не работает, поскольку * рассматривается как строка, а не как целое число.

Мой вопрос: есть ли способ, которым я могу ввести значение в XML-файл , который пройдет тест?

EDIT - вот схема- http://oval.mitre.org/language/version5.10/ovaldefinition/documentation/unix-definitions-schema.html#process58_object

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

После прохождения определения схемы pid может быть либо пустым, либо содержать числовое значение. Таким образом, если нет данных для передачи, просто укажите их как <pid datatype="int"></pid> или <pid />

1 голос
/ 08 декабря 2011

Если вы хотите разрешить целое число или звездочку, измените схему, чтобы использовать такой тип:

<xs:element name="pid">
  <xs:simpleType>
    <xs:union>
      <xs:simpleType ref="xs:integer"/>
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="*"/>
        </
      </
    </
  </
</
0 голосов
/ 12 октября 2012

Возможно, вы также можете определить простой тип в вашем XSD с помощью regex следующим образом:

<!-- definition of simple types -->
<simpleType name="pidType">
    <annotation>
        <documentation>A number or *</documentation>
    </annotation>
    <restriction base="string">
        <pattern value="\d+|\*{1}" />
    </restriction>
</simpleType>

Затем вы можете использовать его:

<element name="pid" type="tns:pidType"></element>
...