Как объявить нестроковый элемент как имеющий необязательное содержимое в XML-схеме - PullRequest
0 голосов
/ 09 сентября 2009

Я видел элемент XML-схемы с атрибутами, содержащими только текст , но вместо этого у меня есть элемент xs: dateTime.

Документ, для которого я пытаюсь написать схему, выглядит следующим образом:

<web-campaigns>
  <web-campaign>
    <id>1231</id>
    <start-at nil="true"/>
  </web-campaign>
  <web-campaign>
    <id>1232</id>
    <start-at>2009-08-08T09:00:00Z</start-at>
  </web-campaign>
</web-campaigns>

Иногда элемент xs: dateTime имеет содержимое, иногда - нет.

То, что у меня есть (что еще не проверено):

<xs:element name="start-at">
  <xs:complexType mixed="true">
    <xs:simpleContent>
      <xs:extension base="xs:dateTime">
        <xs:attribute name="nil" default="false" type="xs:boolean" use="optional" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

Если я заменим xs: dateTime на xs: string, я смогу проверить документ очень хорошо, но я действительно хочу xs: dateTime, чтобы указать потребителям, что находится в этом элементе. Я пробовал с / без mixed = "true" , но безрезультатно.

Если это имеет значение, я проверяю, используя xmllint (в Mac OS X 10.5) и Валидатор XML-схемы

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

вы можете определить свои собственные типы как объединение типов.

1 / определить «пустой» тип как строку, которая разрешает только «» ничего: :)

<xs:simpleType name="empty">
  <xs:restriction base="xs:string">
    <xs:enumeration value=""/>
  </xs:restriction>
</xs:simpleType>

2 / далее определить тип, который допускает дату И пусто

<xs:simpleType name="empty-dateTime">
  <xs:union memberTypes="xs:dateTime empty"/>
</xs:simpleType>

3 / объявляет все ваши элементы типа datetime обнуляемыми как type="empty-dateTime"

1 голос
/ 09 сентября 2009

Вам нужно

<xs:element name="start-at" minOccurs="0">

смешанный режим не имеет отношения к вашей ситуации, вам это не нужно. По умолчанию minOccurs="1", т.е. элемент является обязательным.

Если minOccurs = "0", вы либо указываете элемент с содержимым, либо не указываете его вообще. Если вы хотите разрешить <start-at/>, вы не можете использовать xs: dateTime.

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