1

抱歉,如果这很简单或已经在某个地方回答过 - 我找不到任何对我尝试过的搜索词有用的东西。

我有一些日期输入,我想在条件级联中进行,如下所示:

  1. 整个日期采用 ISO 格式顺序 - YYYY-MM-DD
  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>
    

==> 婴儿

那将是一种方法,但它需要一个元素中的所有日期信息。此外,它允许在我的日期数字中使用更多无意义的值,例如 2999 年、第 13 个月、第 14 个月...、最多 39 天。

如果您再次查看我的尝试,您会发现我要么一次拥有所有数据信息,要么在元素中:[DatumOd],要么在三个单独的元素中:[RokStary]、[MesicStary] 和 [DenStary]。我想要做的是指定我可以接受 [DatumOd] 或集合 [RokStary]、[MesicStary] 和 [DenStary]。另外,我想级联依赖,以便 [MesicStary] 的存在需要 [RokStary] 存在,而 [DenStary] 需要 [MesicStary] 存在。所以,我可以:

[基准点]

或者

[RokStary]

或者

[RokStary] 和 [MesicStary]

或者

[RokStary] 和 [MesicStary] 和 [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

既然您说可能存在潜在的非现实值,我们必须按原样接受它。我为您提供了另一种方法,它的代码非常简单:

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