1

これが単純であるか、すでにどこかで回答されている場合は申し訳ありません-私が試した検索用語のいずれにも役立つものは見つかりませんでした.

次のように、条件付きカスケードで作成したい日付入力があります。

  1. 日付全体が ISO 形式の順序である - YYYY-MM-DD
  2. 月と日には「不正な」値、特にゼロまたは 2 月 30 日が含まれている可能性があります。
  3. キー (およびこの投稿の理由)、月が存在する場合、年が存在する必要があります。日が存在する場合、月と年が存在する必要があります。したがって、日付は「YYYY」または「YYYY-MM」または「YYYY-MM-DD」のいずれかになります。私がこれまでに持っているのは、個々の要素をチェックする単純な仕様であり、説明したような結合された計画ではありません。これはXSDで可能ですか?

    <xs:element name='DatumOd' minOccurs='0' maxOccurs='1'>
      <xs:simpleType>
        <xs:restriction base='xs:string'>
          <xs:minLength value='4'/>
          <xs:maxLength value='10'/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name='RokStary' minOccurs='0' maxOccurs='1'>
      <xs:simpleType>
        <xs:restriction base='xs:short'>
          <xs:minInclusive value='700' />
          <xs:maxInclusive value='2013' />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name='MesicStary' minOccurs='0' maxOccurs='1'>
      <xs:simpleType>
        <xs:restriction base='xs:byte'>
          <xs:minInclusive value='0' />
          <xs:maxInclusive value='12' />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name='DenStary' minOccurs='0' maxOccurs='1'>
      <xs:simpleType>
        <xs:restriction base='xs:byte'>
          <xs:minInclusive value='0' />
          <xs:maxInclusive value='31' />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    

==>幼児

それは 1 つのアプローチですが、1 つの要素にすべての日付情報が必要です。また、2999 年、13、14 か月、39 日までの日付など、より多くの意味のない値を日付番号に使用できます。

私の試みをもう一度見てみると、[DatumOd] という要素、または [RokStary]、[MesicStary]、[DenStary] という 3 つの個別の要素のいずれかに、一度にすべてのデータ情報があることがわかります。私がやりたいことは、[DatumOd]、またはセット [RokStary]、[MesicStary]、および [DenStary] のいずれかを受け入れることができることを指定することです。さらに、[MesicStary] が存在する場合は [RokStary] が存在する必要があり、[DenStary] が存在する場合は [MesicStary] が存在する必要があるように、依存関係をカスケードしたいと考えています。だから、私は持つことができます:

[データムOD]

また

[ロックスターリー]

また

[RokStary] AND [MesicStary]

また

[RokStary] AND [MesicStary] AND [DenStary].

これでわかりやすくなりましたか?

================================================== ======

サンプルデータ

    <?xml version='1.0' encoding='UTF-8'?>
    <dataroot>
      <DSXML SeqNum='1' ID='92491'>
        <TypZaznamu>Z</TypZaznamu>
        <Rad>RO</Rad>
        <Druh>Spermophilus citellus</Druh>
        <CharVyskyt>0</CharVyskyt>
        <DatumOd>1894</DatumOd>
        <Katastr>Habartice</Katastr>
        <Kvadrat>4956</Kvadrat>
        <Oblast>Frydlantska pahorkatina</Oblast>
        <Zdroj>(Wurm 1894, Wiesbaur 1894)</Zdroj>
        <Pocet>0</Pocet>
        <Elevation>240</Elevation>
        <Zapsano>06/24/98</Zapsano>
        <Zapsal>M.A.</Zapsal>
        <Poznamka>(Ebersdorf)</Poznamka>
        <Okres>LI</Okres>
        <Region>SC</Region>
      </DSXML>
      <DSXML SeqNum='2' ID='92591'>
        <TypZaznamu>Z</TypZaznamu>
        <Rad>RO</Rad>
        <Druh>Spermophilus citellus</Druh>
        <CharVyskyt>0</CharVyskyt>
        <DatumOd>1894-09</DatumOd>
        <Katastr>Habartice</Katastr>
        <Kvadrat>4956</Kvadrat>
        <Oblast>Frydlantska pahorkatina</Oblast>
        <Zdroj>(Wurm 1894, Wiesbaur 1894)</Zdroj>
        <Pocet>0</Pocet>
        <Elevation>240</Elevation>
        <Zapsano>06/24/98</Zapsano>
        <Zapsal>M.A.</Zapsal>
        <Poznamka>(Ebersdorf)</Poznamka>
        <Okres>LI</Okres>
        <Region>SC</Region>
      </DSXML>
      <DSXML SeqNum='3' ID='93491'>
        <TypZaznamu>Z</TypZaznamu>
        <Rad>RO</Rad>
        <Druh>Spermophilus citellus</Druh>
        <CharVyskyt>0</CharVyskyt>
        <DatumOd>1894-03-22</DatumOd>
        <Katastr>Habartice</Katastr>
        <Kvadrat>4956</Kvadrat>
        <Oblast>Frydlantska pahorkatina</Oblast>
        <Zdroj>(Wurm 1894, Wiesbaur 1894)</Zdroj>
        <Pocet>0</Pocet>
        <Elevation>240</Elevation>
        <Zapsano>06/24/98</Zapsano>
        <Zapsal>M.A.</Zapsal>
        <Poznamka>(Ebersdorf)</Poznamka>
        <Okres>LI</Okres>
        <Region>SC</Region>
      </DSXML>
      <DSXML SeqNum='4' ID='9418'>
        <TypZaznamu>Z</TypZaznamu>
        <Rad>CA</Rad>
        <Druh>Neovison vison</Druh>
        <CharVyskyt>2</CharVyskyt>
        <RokStary>1991</RokStary>
        <MesicStary>01</MesicStary>
        <DenStary>19</DenStary>
        <Katastr>Cernousy</Katastr>
        <Kvadrat>4956</Kvadrat>
        <Oblast>Frydlantska pahorkatina</Oblast>
        <Zdroj>(Andera &amp; Hanzal 1996)</Zdroj>
        <Pocet>0</Pocet>
        <Elevation>260</Elevation>
        <Zapsano>03/10/99</Zapsano>
        <Zapsal>M.A.</Zapsal>
        <Okres>LI</Okres>
        <Region>SC</Region>
      </DSXML>
      <DSXML SeqNum='5' ID='94174'>
        <TypZaznamu>Z</TypZaznamu>
        <Rad>CA</Rad>
        <Druh>Neovison vison</Druh>
        <CharVyskyt>2</CharVyskyt>
        <RokStary>1991</RokStary>
        <Katastr>Habartice</Katastr>
        <Kvadrat>4956</Kvadrat>
        <Oblast>Frydlantska pahorkatina</Oblast>
        <Zdroj>(Andera &amp; Hanzal 1996)</Zdroj>
        <Pocet>0</Pocet>
        <Elevation>240</Elevation>
        <Zapsano>03/10/99</Zapsano>
        <Zapsal>M.A.</Zapsal>
        <Okres>LI</Okres>
        <Region>SÈ</Region>
      </DSXML>
      <DSXML SeqNum='6' ID='94660'>
        <TypZaznamu>Z</TypZaznamu>
        <Rad>RO</Rad>
        <Druh>Apodemus agrarius</Druh>
        <CharVyskyt>4</CharVyskyt>
        <RokStary>1991</RokStary>
        <MesicStary>05</MesicStary>
        <Katastr>Cernousy</Katastr>
        <Kvadrat>4956</Kvadrat>
        <Oblast>Frydlantska pahorkatina</Oblast>
        <Zdroj>(Barta Z. &amp; Benda 1998)</Zdroj>
        <Pocet>9</Pocet>
        <Elevation>260</Elevation>
        <Zapsano>05/06/99</Zapsano>
        <Zapsal>M.A.</Zapsal>
        <Okres>LI</Okres>
        <Region>SC</Region>
      </DSXML>
    </dataroot>
4

1 に答える 1

3

サンプルの入力 xml を想定すると、次のようになります。

<root>
  <datevalue>2013-05-29</datevalue>
</root>

サンプル XSD コードは次のようになります。

<xs:element name="root">
  <xs:complexType>
    <xs:element name='datevalue' minOccurs="0">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="[0-2][0-9][0-9][0-9]
                            |[0-2][0-9][0-9][0-9][-][01|02|03|04|05|06|07|08|09|10|11|12]
                            |[0-2][0-9][0-9][0-9][-][01|02|03|04|05|06|07|08|09|10|11|12][-][01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31]"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
  </xs:complexType>
</xs:element>

値は次のいずれかです。

0000 to 2999
or 0000-01 to 2999-12
or 0000-01-01 to 2999-12-31

潜在的な非現実的な値が存在する可能性があり、それをそのまま受け入れる必要があるとあなたが言っているので..私はあなたのためにもう1つのアプローチを持っています。これは非常に単純なコードです:

<xs:element name="root">
  <xs:complexType>
    <xs:element name='datevalue' minOccurs="0">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="[0-2][0-9][0-9][0-9]
                            |[0-2][0-9][0-9][0-9][-][0-1][0-9]
                            |[0-2][0-9][0-9][0-9][-][0-1][0-9][-][0-3][0-9]"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
  </xs:complexType>
</xs:element>

値は次のいずれかです。

0000 to 2999
or 0000-00 to 2999-12 (to 2999-19)
or 0000-00-00 to 2999-12-31 (to 2999-19-39) 
于 2013-06-14T10:27:52.877 に答える