tags:

views:

51

answers:

1

I have seen XML Schema element with attributes containing only text but I have an element that's an xs:dateTime instead.

The document I'm trying to write a schema for looks like this:

<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>

Sometimes the xs:dateTime element has content, sometimes it doesn't.

What I have so far (which doesn't validate yet) is:

<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>

If I replace xs:dateTime with xs:string, I can validate the document just fine, but I really want an xs:dateTime, to indicate to consumers what's in that element. I tried with/without mixed="true" as well, to no avail.

If it makes a difference, I validate using xmllint (on Mac OS X 10.5) and XML Schema Validator

+1  A: 

You need

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

mixed-mode isn't relevant to your situation, you don't need that. By default, minOccurs="1", i.e. the element is mandatory.

With minOccurs="0", you either specify the element with content, or not at all. If you want to be able to permit <start-at/>, then you cannot use xs:dateTime.

skaffman