XSD可选条件

XSD可选条件,xsd,conditional,optional,Xsd,Conditional,Optional,很抱歉,如果这是简单的或已经回答的地方-我找不到任何有用的搜索词,我尝试 我有一些日期输入,我想在条件级联中进行,如下所示: 整个日期以ISO格式排列-YYYY-MM-DD 月份和日期可能包含“非法”值,尤其是零或2月30日 关键字(以及该职位的原因),如果有月份,则必须有年份;如果有日期,则必须有月份和年份。因此,有效的日期可能是“YYYY”或“YYYY-MM”或“YYYY-MM-DD”。到目前为止,我所拥有的只是一个检查单个元素的简单规范,而不是我所描述的连接计划。这在XSD中是可能的吗 &

很抱歉,如果这是简单的或已经回答的地方-我找不到任何有用的搜索词,我尝试

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

  • 整个日期以ISO格式排列-YYYY-MM-DD
  • 月份和日期可能包含“非法”值,尤其是零或2月30日
  • 关键字(以及该职位的原因),如果有月份,则必须有年份;如果有日期,则必须有月份和年份。因此,有效的日期可能是“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>
    
    
    Z
    反渗透
    黄鼠嗜精细胞
    0
    1894
    哈巴特
    4956
    Frydlantska pahorkatina
    (伍尔姆1894,威斯堡1894)
    0
    240
    06/24/98
    文学硕士。
    (埃伯斯多夫)
    锂
    联合国安全理事会
    Z
    反渗透
    黄鼠嗜精细胞
    0
    1894-09
    哈巴特
    4956
    Frydlantska pahorkatina
    (伍尔姆1894,威斯堡1894)
    0
    240
    06/24/98
    文学硕士。
    (埃伯斯多夫)
    锂
    联合国安全理事会
    Z
    反渗透
    黄鼠嗜精细胞
    0
    1894-03-22
    哈巴特
    4956
    Frydlantska pahorkatina
    (伍尔姆1894,威斯堡1894)
    0
    240
    06/24/98
    文学硕士。
    (埃伯斯多夫)
    锂
    联合国安全理事会
    Z
    加利福尼亚州
    新面貌
    2.
    1991
    01
    19
    阉割
    4956
    Frydlantska pahorkatina
    (安德拉和汉扎尔,1996年)
    0
    260
    03/10/99
    文学硕士。
    锂
    联合国安全理事会
    Z
    加利福尼亚州
    新面貌
    2.
    1991
    哈巴特
    4956
    Frydlantska pahorkatina
    (安德拉和汉扎尔,1996年)
    0
    240
    03/10/99
    文学硕士。
    锂
    SÈ
    Z
    反渗透
    黑线姬鼠
    4.
    1991
    05
    阉割
    4956
    Frydlantska pahorkatina
    (Barta Z.和Benda 1998)
    9
    260
    05/06/99
    文学硕士。
    锂
    联合国安全理事会
    
    假设示例输入xml:

    <root>
      <datevalue>2013-05-29</datevalue>
    </root>
    
    既然你说可能存在潜在的非现实价值,我们就不得不接受它。。我还有另外一种方法,它的代码非常简单:

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

    你只可以把regex变得更详细,而忽略你正遇到问题的个案,例如“20[0[0-0-1][0-1][0-1][0-9[0-1][0-1[0-1[0-1[0-1[0-1][0-1[0-1][0-1[0-1][0-1[0-1][0-1[0-1[0-1[0-1][0-1[0-1[0-1[0-1[0-1[0-1[0-1[0-1[0-1[0-1[0-1[0-1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-0[1-9]-3[0-1]“我只是翻了翻一些旧帖子,发现了这个,我当时没有回答。所以,很多年过去了,但还是谢谢你。这种“或”的模式正是我需要的。
    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)