1

考虑以下正则表达式

pattern = "(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d"

此模式以 MM/DD/YYYY 格式表示日期字符串。现在,如果我想创建几个这种类型的属性,我显然可以这样写:

element holiday 
{
 attribute beginDate
 {
  xs:string { pattern = "(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d" }
 }
 attribute endDate
 {
  xs:string { pattern = "(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d" }
 }
}

但是每次我想以这种格式定义日期时,写模式线是非常不方便的。我想定义自己的类型,例如MyDateFormat,并在必要时使用它,attribute someDate { MyDateFormat }而不是多次重写相同的代码,但我找不到使用Relax NG compact syntax定义自己的类型的方法。我的问题是如何实现这种行为并避免代码两次重写。

任何帮助将不胜感激。提前致谢。

4

1 回答 1

3

找到了一种解决方案:新类型可以定义为

MMDDYYYY = xs:string { pattern = "(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d" }

然后在必要时使用它:

element holiday 
{
 attribute beginDate { MMDDYYYY }
 attribute endDate   { MMDDYYYY }
}
于 2011-07-18T13:39:24.497 回答