我见过XML Schema element with attributes containing only text,但我有一个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:string替换xs:dateTime,我可以很好地验证文档,但我真的想要一个xs:dateTime来向消费者表明该元素中的内容。我尝试了/不使用 mixed =“true”,但无济于事。
如果它有所不同,我使用xmllint(在Mac OS X 10.5上)和XML Schema Validator
进行验证答案 0 :(得分:4)
您可以将自己的类型定义为类型联合。
1 /将“空”类型定义为只允许“”ähm没有的字符串:)
<xs:simpleType name="empty">
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
2 / next定义允许日期和空
的类型<xs:simpleType name="empty-dateTime">
<xs:union memberTypes="xs:dateTime empty"/>
</xs:simpleType>
3 /将所有可空的日期时间元素声明为type="empty-dateTime"
答案 1 :(得分:1)
你需要
<xs:element name="start-at" minOccurs="0">
混合模式与您的情况无关,您不需要。默认情况下,minOccurs="1"
,即元素是必需的。
使用minOccurs =“0”,您可以指定包含内容的元素,也可以根本不指定。如果您希望能够允许<start-at/>
,则不能使用xs:dateTime。