簡単な答え: xml スキーマは単純なデータ型を連結できません。
とにかく、それはあなたが望むものではないかもしれませんxs:gMonth
.2つのハイフンプレフィックスが必要です (例: "--05"), xs:gDay
3つのハイフンが必要です (例: "---31"). 私が期待したものではありません!単純な各データ型の例を次に示します。いくつかの組み合わせ型も組み込まれています:gYearMonth
などgMonthDay
。
これらの行に沿っxs:dateTime
て、長い定義があります。'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
除外できるのは3つの部分だけなので、必要ですyyyy-mm-ddThh:mm:ss
-これに関しては、の例<out>2012</out>
は有効ではありません。
長い答え: ただし、xml スキーマでは、単純なデータ型を(選択のように) と(同じ型のスペースで区切られたリスト) で組み合わせることができます。したがって、次のようなことができます: (有効な xsd 構文ではありません。単なる例示です)。これは順序付けられておらず、重複が許可されているため、たとえば「---31 --05 --05」が有効です。ここに xsd 構文があります。union
list
(gDay|gMonth|gYear|dateTime)*
$ cat catDatatypes.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="eg" type="myString_Type"/>
<xs:simpleType name="myString_Type">
<xs:list>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:gDay"/>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:gMonth"/>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:gYear"/>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:dateTime"/>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:schema>
$ xmllint --schema catDatatypes.xsd catDatatypes.xml
<eg>2012 --12 ---01 --12 ---31 --05 --05</eg>
catDatatypes.xml validates
結論: あなた (そして私) が望む方法で組み込みデータ型を再利用することはできません。InfantProgrammer'Aravindの回答のように、自分で明示的に定義したほうがよいでしょう。(または、代わりに各コンポーネントに個別の属性を使用することもできます。これにより、解析する人も簡単になります)。
楽しみのために、私はInfantProgrammer'Aravindの答えを短くしてみました(ただし、これにより明確になるかどうかは議論の余地があります...)。午前/午後を含む 12 時間と午前/午後を含まない 24 時間のチェックを保持します (ただし、空の別名 null 値は受け入れません)。
<xs:simpleType name="CRNDATETIME2">
<xs:restriction base="xs:string">
<xs:pattern value="(0[1-9]|1[012])/(0[1-9]|[12]\d|3[01])/([12]\d{3}) ((0\d|1[012])(:[0-5]\d){2}|(0\d|1[012])(:[0-5]\d){2} [aApP][mM])"/>
</xs:restriction>
</xs:simpleType>
XSD での正規表現の簡単なガイドを次に示します。ここに長いものがあります。
ところで:「[1-9]」を「[\d-[0]]」として表すことができることがわかりました。これは、範囲ではなく「文字クラス減算」です。