如何在Relax NG中定义自己的类型?

发布于 2024-11-24 04:49:14 字数 742 浏览 2 评论 0原文

考虑以下正则表达式

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 紧凑语法 定义自己的类型的方法。我的问题是如何实现这种行为并避免代码两次重写。

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

Consider the following regular expression

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

This pattertn represents date strings in MM/DD/YYYY format. Now, if I want to create several attribues of this type, I can apparently write them like:

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

But this is very inconvenient to write the pattern line every time when I want to define a date in such format. I would like to define my own type, e.g. MyDateFormat, and use it where necessary as attribute someDate { MyDateFormat } instead of rewriting the same code multiple times, but I couldn't find a way to define own types using Relax NG compact syntax. My question is how is it possible to implement such behaviour and avoid code twice rewriting.

Any help will be appreciated. Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最佳男配角 2024-12-01 04:49:14

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

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

Found out one solution: new type can be defined as

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

and then use it where necessary:

element holiday 
{
 attribute beginDate { MMDDYYYY }
 attribute endDate   { MMDDYYYY }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文