Делать атрибут необязательным и включать атрибут в XML, только если есть дата, - хороший вариант, но в некоторых случаях вы можете не иметь контроля над генерацией XML.В этом случае вы можете попробовать следующий шаблон в XSD
<xs:simpleType name="edition_date">
<xs:restriction base="xs:string">
<xs:maxLength value="7"/>
<xs:pattern value="((0[1-9]|1[012])[-](19|20)\d\d)?"/>
</xs:restriction>
</xs:simpleType>
. Этот шаблон аналогичен вашему, но использование?Оператор указывает, что шаблон может встречаться ноль или один раз, и поэтому допускает пустую строку.Также обратите внимание на использование xs: maxLength вместо xs: length.Не то, что бит необходим, потому что шаблон в любом случае допускает только фиксированную длину.