Xsd 如何在XML模式中将非字符串元素声明为具有可选内容

Xsd 如何在XML模式中将非字符串元素声明为具有可选内容,xsd,Xsd,我已经看到了,但是我有一个元素,它是xs:dateTime 我试图为其编写架构的文档如下所示: <web-campaigns> <web-campaign> <id>1231</id> <start-at nil="true"/> </web-campaign> <web-campaign> <id>1232</id> <start-at&

我已经看到了,但是我有一个元素,它是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>

1231
1232
2009-08-08T09:00:00Z
有时xs:dateTime元素有内容,有时没有

到目前为止,我得到的(尚未验证)是:


如果我用xs:string替换xs:dateTime,我可以很好地验证文档,但我确实需要一个xs:dateTime,以向消费者指示该元素中包含什么。我也尝试过使用/不使用mixed=“true”,但没有效果

如果有区别,我将使用xmllint(在Mac OS X 10.5上)和您需要的

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

混合模式与您的情况无关,您不需要它。默认情况下,
minOccurs=“1”
,即该元素是必需的

使用minOccurs=“0”,可以指定包含内容的元素,也可以根本不指定。如果希望能够允许
,则不能使用xs:dateTime。

您需要

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

混合模式与您的情况无关,您不需要它。默认情况下,
minOccurs=“1”
,即该元素是必需的


使用minOccurs=“0”,可以指定包含内容的元素,也可以根本不指定。如果希望能够允许
,则不能使用xs:dateTime。

您可以将自己的类型定义为类型的并集

1/将“empty”类型定义为只允许“ähm nothing:”的字符串


2/接下来定义一个允许日期和空的类型

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


3/将所有可为空的日期时间元素声明为
type=“empty datetime”

您可以将自己的类型定义为类型的联合

1/将“empty”类型定义为只允许“ähm nothing:”的字符串


2/接下来定义一个允许日期和空的类型

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

3/将所有可为空的日期时间元素声明为
type=“empty datetime”