Как определить собственные типы в Relax NG? - PullRequest
1 голос
/ 18 июля 2011

Рассмотрим следующее регулярное выражение

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

Этот шаблон представляет строки даты в формате ММ / ДД / ГГГГ. Теперь, если я хочу создать несколько атрибутов этого типа, я могу написать их как:

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 . Мой вопрос заключается в том, как можно реализовать такое поведение и избежать повторного переписывания кода.

Любая помощь будет оценена. Заранее спасибо.

1 Ответ

1 голос
/ 18 июля 2011

Обнаружил одно решение: новый тип можно определить как

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