The Schematroll (new mascot?)

The Schematron 1.5 Syntax

DTD for Schematron 1.5

The following DTD does not have namespace qualification.

<!-- +//IDN sinica.edu.tw//DTD Schematron 1.5//EN -->
     <!-- Data types -->
      <!ENTITY % URI  "CDATA" >
      <!ENTITY % PATTERN "CDATA" >
      <!ENTITY % EXPR "CDATA" >
      <!ENTITY % FPI  "CDATA" >
      <!-- Element declarations -->
       <!ELEMENT schema  ( title?, ns*, phase*, p*, pattern+ , p*, diagnostics? )>
       <!ELEMENT active   ( #PCDATA | dir | emph | span)* >
       <!ELEMENT assert  ( #PCDATA | name | emph | dir | span )*>
       <!ELEMENT dir     ( #PCDATA )>
       <!ELEMENT emph    ( #PCDATA )>
       <!ELEMENT extends EMPTY >
       <!ELEMENT diagnostic    (#PCDATA | value-of | emph | dir | span)* >
       <!ELEMENT diagnostics   ( diagnostic* )>
       <!ELEMENT key     EMPTY >
       <!ELEMENT name    EMPTY >
       <!ELEMENT ns      EMPTY >
       <!ELEMENT p       ( #PCDATA | dir | emph | span) >
       <!ELEMENT pattern ( p*, rule+ )>
       <!ELEMENT phase   ( active )* >
       <!ELEMENT report  ( #PCDATA | name | emph | dir  | span)*>
       <!ELEMENT rule    ( assert | report | key | extends )+>
       <!ELEMENT span    ( #PCDATA )>
       <!ELEMENT title   ( #PCDATA | dir )* >
       <!ELEMENT value-of EMPTY >
<!-- Attribute declarations -->
       <!ATTLIST schema  xmlns %URI; #FIXED "http:/www.ascc.net/xml/schematron"
                         id      ID #IMPLIED
                         fpi     %FPI; #IMPLIED
                         defaultPhase IDREF #IMPLIED
                         icon    %URI; #IMPLIED
                         version CDATA "1.5"
                         xml:lang NMTOKEN #IMPLIED >

       <!ATTLIST active  pattern ID #REQUIRED >
       <!ATTLIST assert  test    %EXPR; #REQUIRED
                         role    NMTOKEN    #IMPLIED
                         id      ID  #IMPLIED 
                         diagnostics   IDREFS #IMPLIED
                         icon    %URI; #IMPLIED
                         subject %PATTERN; #IMPLIED 
                         xml:lang NMTOKEN #IMPLIED >
       <!ATTLIST dir     value ( ltr | rtl ) #IMPLIED >
       <!ATTLIST extends rule IDREF #REQUIRED >
       <!ATTLIST diagnostic    id      ID    #REQUIRED
                         icon   %URI;  #IMPLIED
                         xml:lang NMTOKEN #IMPLIED >
       <!ATTLIST key     name    NMTOKEN #REQUIRED
                         path    %PATTERN; #REQUIRED 
                         icon    %URI;  #IMPLIED >
       <!ATTLIST name    path    %PATTERN; #IMPLIED >
               <!-- Schematrons should implement '.' 
               as the default value for path -->
       <!ATTLIST p       xml:lang CDATA #IMPLIED 
                         id      ID  #IMPLIED 
                         class CDATA #IMPLIED 
                         icon    %URI;  #IMPLIED >
       <!ATTLIST pattern name    CDATA #REQUIRED
                         see     %URI; #IMPLIED
                         id      ID    #IMPLIED 
                         icon    %URI; #IMPLIED>
       <!ATTLIST ns      uri     %URI; #REQUIRED 
                         prefix  NMTOKEN #IMPLIED >
       <!ATTLIST phase   id      ID    #REQUIRED
                         fpi     %FPI; #IMPLIED
                         icon    %URI; #IMPLIED >
       <!ATTLIST span    class CDATA #IMPLIED >
       <!ATTLIST report  test    %EXPR; #REQUIRED
                         role    NMTOKEN   #IMPLIED
                         id        ID             #IMPLIED 
                         diagnostics    IDREFS    #IMPLIED
                         icon    %URI; #IMPLIED
                         subject %PATTERN; #IMPLIED >
       <!ATTLIST rule    context %PATTERN; #IMPLIED
                         abstract  (true | false) "false"
                         role    NMTOKEN    #IMPLIED 
                         id        ID  #IMPLIED >
                  <!-- Schematrons should implement 'no' as the default
                  value of abstract -->
       <!ATTLIST value-of  select %PATTERN; #REQUIRED >

Productions for Schematron 1.5

AbbreviatedAbsoluteLocationPath    
  ::=    '//' RelativeLocationPath  
AbbreviatedRelativeLocationPath    
  ::=    RelativeLocationPath '//' Step  
AbbreviatedStep    
  ::=    '.'  | '..'  
AbbreviatedAxisSpecifier    
  ::=    '@'? 
AbsoluteLocationPath    
  ::=    '/' RelativeLocationPath?  | AbbreviatedAbsoluteLocationPath  
AdditiveExpr    
  ::=    MultiplicativeExpr  
   | AdditiveExpr '+' MultiplicativeExpr  
   | AdditiveExpr '-' MultiplicativeExpr  
AndExpr    
  ::=    EqualityExpr  | AndExpr 'and' EqualityExpr  
Argument    
  ::=    Expr 
AxisSpecifier    
  ::=    AxisName '::'  | AbbreviatedAxisSpecifier  
AxisName    
  ::=    'ancestor'  | 'ancestor-or-self'  | 'attribute'  
   | 'child'  | 'descendant'  | 'descendant-or-self'  
   | 'following'  | 'following-sibling'  | 'namespace'  
   | 'parent'  | 'preceding'  | 'preceding-sibling'  | 'self' 
ChildOrAttributeAxisSpecifier    
  ::=    AbbreviatedAxisSpecifier  | ('child' | 'attribute') '::' 
Digits    
  ::=    +  
EqualityExpr    
  ::=    RelationalExpr  
   | EqualityExpr '=' RelationalExpr  
   | EqualityExpr '!=' RelationalExpr  
Expr    
  ::=    OrExpr  
ExprToken    
  ::=    '(' | ')' | '' | '.' | '..' | '@' | ',' | '::'  
   | NameTest  | NodeType  | Operator  | FunctionName  | AxisName  
   | Literal  | Number  | VariableReference  
FilterExpr    
  ::=    PrimaryExpr  | FilterExpr Predicate 
FunctionCall    
  ::=    FunctionName '(' ( Argument ( ',' Argument )* )? ')'  
FunctionName    
  ::=   'last' | 'position' | 'ount' | 'id' | 'local-name'
   | 'namespace-uri' | 'name' | 'string' | 'concat' | 'starts-with'
   | 'contains' | 'substring-before' | 'substring-after' | 'substring'
   | 'string-length' | 'normalize-space' | 'translate' | 'boolean'
   | 'not' | 'true' | 'fals' | 'lang' | 'number' | 'sum'
   | 'floor' | 'ceiling' | 'round' | 'document' | 'key'
   | 'format-number' | 'current' 
   | 'system-property' (Caution: system-roperty() available with XSLT 1.1 only) 
IdKeyPattern    
  ::=    'id' '(' Literal ')'  | 'key' '(' Literal ',' Literal ')'  
LocalPart 
  ::=  NCName 
LocationPath    
  ::=    RelativeLocationPath  | AbsoluteLocationPath  
LocationPathPattern    
  ::=    '/' RelativePathPattern?  | '//'? RelativePathPattern  
Literal    
  ::=    '"' * "'"  
MultiplicativeExpr    
  ::=    UnaryExpr  
   | MultiplicativeExpr MultiplyOperator UnaryExpr  
   | MultiplicativeExpr 'div' UnaryExpr  
   | MultiplicativeExpr 'mod' UnaryExpr  
MultiplyOperator    
  ::=    '*'  
NameTest    
  ::=    '*'  | NCName ':' '*'  | QName  
NCName 
  ::=  (Letter | '_') (NCNameChar)* 
NCNameChar 
  ::=  Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender 
NodeTest    
  ::=    NameTest  | NodeType '(' ')'  
   | 'processing-instruction' '(' Literal ')'  
NodeType    
  ::=    'comment'  | 'text'  | 'processing-instruction'  | 'node'  
Number    
  ::=    Digits ('.' Digits?)?  | '.' Digits  
Operator    
  ::=    OperatorName  | MultiplyOperator  
   | '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>='  
OperatorName    
  ::=    'and' | 'or' | 'mod' | 'div'  
PathExpr    
  ::=    LocationPath  | FilterExpr  
   | FilterExpr '/' RelativeLocationPath  
   | FilterExpr '//' RelativeLocationPath  
Pattern    
  ::=    LocationPathPattern  | Pattern '|' LocationPathPattern  
   | IdKeyPattern (('/' | '//') RelativePathPattern)?  
Predicate    
  ::=    ''  
PredicateExpr    
  ::=    Expr 
Prefix 
  ::=  NCName 
PrimaryExpr    
  ::=    VariableReference  | '(' Expr ')'  | Literal  
   | Number  | FunctionCall 
QName 
  ::=  (Prefix ':')? LocalPart 
RelativeLocationPath    
  ::=    Step  | RelativeLocationPath '/' Step  
   | AbbreviatedRelativeLocationPath 
RelativePathPattern    
  ::=    StepPattern  
   | RelativePathPattern '/' StepPattern  
   | RelativePathPattern '//' StepPattern  
RelationalExpr    
  ::=    AdditiveExpr  
   | RelationalExpr '<' AdditiveExpr  
   | RelationalExpr '>' AdditiveExpr  
   | RelationalExpr '<=' AdditiveExpr  
   | RelationalExpr '>=' AdditiveExpr  
S    
  ::=    (#x20 | #x9 | #xD | #xA)+ 
Step    
  ::=    AxisSpecifier NodeTest Predicate*  | AbbreviatedStep  
StepPattern    
  ::=    ChildOrAttributeAxisSpecifier NodeTest Predicate*   
UnaryExpr    
  ::=    UnionExpr  | '-' UnaryExpr 
UnionExpr    
  ::=    PathExpr  | UnionExpr '|' PathExpr  
VariableReference    
  ::=    '$' QName