2013-06-12 22 views
1

對不起,如果這很簡單或已經在某個地方回答 - 我找不到任何對我嘗試過的搜索詞有用的東西。XSD可選條件

我有一些數據輸入,我想提出在有條件的級聯,像這樣:

  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> 
    

==>嬰兒

這將是一個辦法,但它需要一個元素的所有最新信息。此外,它讓我的日期數字更多的廢話值,比如2999年,13個,14個......,天數達39

如果你在我嘗試再看看,你會看到,我要麼所有的數據信息一次在元素:[DatumOd]中,或者三個獨立的元素:[RokStary],[MesicStary]和[DenStary]。我想要做的是規定我可以接受[DatumOd]或集合[RokStary],[MesicStary]和[DenStary]。此外,我想級聯依賴關係,因此[MesicStary]的存在要求[RokStary]存在,[DenStary]要求[MesicStary]存在。所以,我可以有:

[DatumOd]

OR

[RokStary]

OR

[RokStary]和[MesicStary]

OR

[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> 
+0

的樣本數據輸入XML請.. –

回答

2
假設

樣本輸入的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) 
+0

你可以只讓正則表達式更詳細忽略您有問題的情況下,即 「20 [0-1] [0-9] | [0-1] [0-9] [0-9] [0-9] | [0-2] [0-9] [0 -9] [0-9] -0 [1-9] | [0-2] [0-9] [0-9] [0-9] -1 [0-2] | [0-2 ] [0-9] [0-9] [0-9] -0 [1-9] -0 [1-9] | [0-2] [0-9] [0-9] [0- 9] -0 [1-9] - [1-2] [0-9] | [0-2] [0-9] [0-9] [0-9] -0 [1-9] - 3 [0-1]」 – Bishop