Relax NG non-XML Grammar
source: relaxNG.g
-
topLevel
-
decl
* ( pattern
| grammar
) END
-
decl
- ( "namespace" identifier "=" ( literal
| "inherit" ) )
| ( "default" "namespace" [ identifier ] "=" ( literal
| "inherit" ) )
| ( "datatypes" identifier "=" literal
)
-
pattern
-
UnaryExpr
[ ( "\\|" UnaryExpr
) +
| ( "," UnaryExpr
) +
| ( "&" UnaryExpr
) + ]
-
UnaryExpr
-
PrimaryExpr
[ "\\*"
| "\\+"
| "\\?" ]
-
PrimaryExpr
-
"empty"
| "text"
| "notAllowed"
| ( "element" NameClass
0 "{" pattern
"}" )
| ( "attribute" NameClass
1 "{" pattern
"}" )
| ( "list" "{" pattern
"}" )
| ( "mixed" "{" pattern
"}" )
| ( "grammar" "{" grammar
"}" )
| ( "\\(" pattern
"\\)" )
| ( "externalRef" literal
[ inherit
] )
| ( "parent" ref
)
| ref
| datatypeValue
| ( datatypeName
[ ( params
[ Except
] )
| Except
| datatypeValue
] )
-
Except
-
"-" PrimaryExpr
-
NameClass
inAttr
-
PrimaryNameClass
inAttr [ ( "\\|" PrimaryNameClass
inAttr ) * ]
-
PrimaryNameClass
inAttr
-
UnprefixedNameClass
inAttr
| PrefixedNameClass
| AnyNameClass
inAttr
| NsNameClass
inAttr
| ParenNameClass
inAttr
-
UnprefixedNameClass
inAttr
-
identifier
-
PrefixedNameClass
-
CName
-
NsNameClass
inAttr
-
nsName [ "-" PrimaryNameClass
inAttr ]
-
AnyNameClass
inAttr
-
"\\*" [ "-" PrimaryNameClass
inAttr ]
-
ParenNameClass
inAttr
-
"\\(" NameClass
inAttr "\\)"
-
ref
-
identifierNotKeyword
-
datatypeName
-
CName
| "string"
| "token"
-
datatypeValue
-
literal
-
params
-
"{" ( identifier "=" literal
) + "}"
-
grammar
- ( definition
| include
) +
-
definition
-
defLHS
pattern
-
defLHS
- ( "start" ( "="
| "\\|="
| "&=" ) )
| identDEF
-
include
-
"include" literal
[ inherit
] [ "{" definition
* "}" ]
-
inherit
-
"inherit" "=" identifier
-
literal
-
literal1
| literal2