<!-- GXL (1.0) 
     Document Type Definition
     (February 14, 2001) 
  
copyright by 

       Andy Schuerr 
         Institute for Software Technology 
         University of the German Federal Armed Forces Munich 
         85577 Neubiberg, Germany 
         Andy.Schuerr@unibw-muenchen.de 

       Susan Elliott Sim 
         Department of Computer Science 
         University of Toronto 
         Toronto M5S 3G4, Canada 
         simsuz@cs.utoronto.ca 

       Ric Holt 
         Department of Computer Science 
         University of Waterloo 
         Waterloo N2L 3G1, Canada 
         holt@plg.uwaterloo.ca 

       Andreas Winter 
         Institute for Software Technology 
         University of Koblenz-Landau 
         Rheinau 1, D-56075 Koblenz, Germany 
         winter@uni-koblenz.de
--> 

<!-- Extensions -->

<!ENTITY % gxl-extension     "" > 
<!ENTITY % graph-extension   "" > 
<!ENTITY % node-extension    "" > 
<!ENTITY % edge-extension    "" > 
<!ENTITY % rel-extension     "" > 
<!ENTITY % value-extension   "" > 
<!ENTITY % relend-extension  "" > 

<!ENTITY % gxl-attr-extension     "" > 
<!ENTITY % graph-attr-extension   "" > 
<!ENTITY % node-attr-extension    "" > 
<!ENTITY % edge-attr-extension    "" > 
<!ENTITY % rel-attr-extension     "" > 
<!ENTITY % relend-attr-extension  "" > 


<!-- Attribute values -->

<!ENTITY % val " 
           locator | 
           bool    | 
           int     | 
           float   | 
           string  | 
           enum    | 
           seq     | 
           set     | 
           bag     | 
           tup 
           %value-extension;"> 


<!-- gxl -->

<!ELEMENT gxl  (graph* %gxl-extension;) > 
<!ATTLIST gxl 
    xmlns:xlink CDATA    #FIXED    "www.w3.org/1999/xlink" 
    %gxl-attr-extension; 
> 


<!-- type -->

<!ELEMENT type EMPTY> 
<!ATTLIST type 
    xlink:type  (simple)    #FIXED  "simple" 
    xlink:href  CDATA       #REQUIRED 
> 


<!-- graph -->

<!ELEMENT graph (type? , attr* , ( node | edge | rel )* %graph-extension;) > 
<!ATTLIST graph 
    id          ID       #REQUIRED 
    role        NMTOKEN  #IMPLIED 
    edgeids     ( true | false ) "false" 
    hypergraph  ( true | false ) "false" 
    edgemode    ( directed | undirected | 
                    defaultdirected | defaultundirected) "directed" 
    %graph-attr-extension; 
> 


<!-- node -->

<!ELEMENT node (type? , attr*, graph* %node-extension;) > 
<!ATTLIST node 
    id          ID       #REQUIRED 
    %node-attr-extension; 
> 


<!-- edge -->

<!ELEMENT edge (type?, attr*, graph* %edge-extension;) > 
<!ATTLIST edge 
    id            ID       #IMPLIED 
    from          IDREF    #REQUIRED 
    to            IDREF    #REQUIRED 
    fromorder     CDATA    #IMPLIED 
    toorder       CDATA    #IMPLIED 
    isdirected    ( true | false ) #IMPLIED 
    %edge-attr-extension; 
> 


<!-- rel -->

<!ELEMENT rel (type? , attr*, graph*, relend* %rel-extension;) > 
<!ATTLIST rel 
    id          ID            #IMPLIED 
    isdirected    ( true | false ) #IMPLIED 
    %rel-attr-extension; 
> 


<!-- relend -->

<!ELEMENT relend (attr* %relend-extension;) > 
<!ATTLIST relend 
    target      IDREF                 #REQUIRED 
    role        NMTOKEN               #IMPLIED 
    direction   ( in | out | none)    #IMPLIED 
    startorder  CDATA                 #IMPLIED 
    endorder    CDATA                 #IMPLIED 
    %relend-attr-extension; 
> 
  

<!-- attr -->

<!ELEMENT attr (type?, attr*, (%val;)) > 
<!ATTLIST attr 
    id     IDREF    #IMPLIED 
    name   NMTOKEN  #REQUIRED 
    kind   NMTOKEN  #IMPLIED 
> 


<!-- locator -->

<!ELEMENT locator  EMPTY > 
<!ATTLIST locator 
    xlink:type  (simple)    #FIXED  "simple" 
    xlink:href  CDATA       #IMPLIED 
> 


<!-- atomic values -->

<!ELEMENT bool    (#PCDATA) > 
<!ELEMENT int     (#PCDATA) > 
<!ELEMENT float   (#PCDATA) > 
<!ELEMENT string  (#PCDATA) > 


<!-- enumeration value -->

<!ELEMENT enum    (#PCDATA) > 
  
  
<!-- composite values -->

<!ELEMENT seq     (%val;)* > 
<!ELEMENT set     (%val;)* > 
<!ELEMENT bag     (%val;)* > 
<!ELEMENT tup     (%val;)* > 

