xsd中的条件值

时间:2014-09-04 06:49:22

标签: xml xsd xsd-validation xsd-1.1

有没有办法在标签值上添加条件? 例如,我的xml看起来像这样:

<Root>
 <Scheduler>
  <DateTimeType>DAY</DateTimeType>
  <DayOfWeek>Sunday</DayOfWeek> <!-- TAG IS ALLOWED -->
 </Scheduler>

 <Scheduler>
  <DateTimeType>MONTH</DateTimeType>
  <DayOfWeek>Sunday</DayOfWeek> <!-- TAG IS NOT ALLOWED -->
  <DayOfMonth>28</DayOfMonth> <!-- TAG IS ALLOWED -->
 </Scheduler>

 <Scheduler>
  <DateTimeType>WEEKDAY</DateTimeType>
  <DayOfWeek>Sunday</DayOfWeek> <!-- TAG IS ALLOWED -->
  <TimeOfDay>15:26</TimeOfDay> <!-- TAG IS ALLOWED -->
  <DayOfMonth>28</DayOfMonth> <!-- TAG IS NOT ALLOWED -->
 </Scheduler>

 <Scheduler>
  <DateTimeType>TIME</DateTimeType>
  <DayOfWeek>Sunday</DayOfWeek> <!-- TAG IS NOT ALLOWED -->
  <DayOfMonth>28</DayOfMonth> <!-- TAG IS NOT ALLOWED -->
  <TimeOfDay>15:26</TimeOfDay> <!-- TAG IS ALLOWED -->
 </Scheduler>
</Root>

我需要一个允许/不允许在我的xml中使用这些条件的XSD方案。

感谢。

1 个答案:

答案 0 :(得分:1)

如果DateTimeType是一个属性,可以使用条件类型赋值方便地完成。但如果它必须是子元素,则可以使用断言来完成,例如

<xs:assertion test="not(DateTimeType = 'MONTH' and exists(DayOfWeek)"/>

顺便说一句,它们不是被称为标签,它们被称为元素。元素通常具有两个标记,即开始标记和结束标记。使用正确的术语有很多好处,例如,您会发现您开始更好地理解错误消息中使用的语言。