8

私の質問はthis oneとほぼ同じですが、ユーザー定義要素ではなく xs:dateTime タイプです。

XML (私は作成していません) の要素は次のようになります。

<parent>
    ...
    <start>2012-01-01T00:00:00.000</start>
    <end>2013-01-01T00:00:00.000</end>
    ...
</parent>

-また-

<parent>
    ...
    <start reference="a string" />
    <end reference="a string" />
    ...
</parent>

つまり、親要素内の「開始」フィールドと「終了」フィールドは、xs:dateTime 値を含むか、空であるが「参照」属性を持つことができます (いずれかのフィールドが親要素内のいずれかである可能性があります)。 、必ずしも両方が参照または両方がdateTimeであるとは限りません)。これを XSD で表現するためにさまざまな方法を試しましたが、解決策が見つかりませんでした。私が最も近いのは(はるかに大きなXSDからの抜粋)です:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="DateOrRef">
    <xs:simpleContent>
<!--      <xs:extension base="xs:dateTime"> This does not validate-->
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="reference" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="parent">
    <xs:sequence>
        <xs:element minOccurs="0" name="start" type="DateOrRef" />
        <xs:element minOccurs="0" name="end" type="DateOrRef" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

これは検証を行いますが、ノードの内容を xs:dateTime 値に制限しません。コメントアウトされた行のように、拡張基本型を xs:string ではなく xs:dateTime に変更すると、dateTime 型を空にすることができないため、空の要素は検証されなくなります。

これらのフィールドを xs:string ではなく xs:dateTime として検証するように XSD を構成するにはどうすればよいですか?

4

2 に答える 2