Home | History | Annotate | Download | only in xml
      1 syntax = "proto2";
      2 package protobuf_mutator.xml;
      3 
      4 // Simplified definition of XML formant according https://www.w3.org/TR/xml/
      5 // Not all features are implemented and some rules are flattened.
      6 
      7 // There are no required fields to allow backward compatibility with older
      8 // corpus.
      9 
     10 // document ::= prolog element Misc*
     11 // prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
     12 // XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
     13 // doctypedecl ::=
     14 //    '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'
     15 message Document {
     16   // XMLDecl
     17   optional string version = 1;
     18   optional string encoding = 2;
     19   optional bool standalone = 3;
     20 
     21   repeated Misk misk1 = 4;
     22   optional DoctypeDecl doctype = 5;
     23   optional Element element = 6;
     24   repeated Misk misk2 = 7;
     25 }
     26 
     27 message DoctypeDecl {
     28   optional string name = 1;
     29   optional string external_id = 2;
     30   optional string int_subset = 3;
     31   repeated Misk misk = 4;
     32 }
     33 
     34 message Misk {
     35   oneof _ {
     36     Pi pi = 1;
     37     string comment = 2;
     38   }
     39 }
     40 
     41 // element ::= EmptyElemTag | STag content ETag
     42 message Element {
     43   optional Tag tag = 1;
     44   // Use EmptyElemTag tag if missing, or STag and ETag otherwise.
     45   repeated Content content = 2;
     46 }
     47 
     48 // EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
     49 // STag ::= '<' Name (S Attribute)* S? '>'
     50 // ETag ::= '</' Name S? '>'
     51 message Tag {
     52   optional string name = 1;
     53   repeated Attribute attribute = 2;
     54 }
     55 
     56 message Reference {
     57   optional string name = 1;
     58   optional bool entry = 2;
     59 }
     60 
     61 message Pi {
     62   optional string target = 1;
     63   optional string data = 2;
     64 }
     65 
     66 // content ::=
     67 //    CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*
     68 message Content {
     69   oneof _ {
     70     string char_data = 1;
     71     Element element = 2;
     72     Reference reference = 3;
     73     string cdsect = 4;
     74     Misk misk = 5;
     75   }
     76 }
     77 
     78 // Attribute ::=  Name Eq AttValue
     79 message Attribute {
     80   optional string name = 1;
     81   optional string value = 2;
     82 }
     83 
     84 message Input {
     85   optional Document document = 1;
     86 
     87   // Option will be sent into libxml2 parser.
     88   // TODO(vitalybuka): Use proto extension. Options is libxml2 specific,
     89   // other libs may need different data. At the moment mutator does not support
     90   // extensions.
     91   optional uint32 options = 2;
     92 }
     93