很抱歉,如果这很简单或已在某处得到解答 - 我找不到任何有用的搜索条件。
我有一些日期输入,我想在条件级联中进行,如下所示:
密钥(以及此帖的原因),如果存在月份,则必须存在年份;如果存在日,则必须存在月份和年份。如此有效,日期可能是'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>
==&GT;婴儿
这将是一种方法,但它需要一个元素中的所有日期信息。此外,它在我的日期编号中允许更多的无意义值,例如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 & 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 & 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. & 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 :(得分: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)