<?xml version="1.0"?>

<!-- Header -->
<xs:schema
    targetNamespace="http://www.yworks.com/xml/graphml"

    xmlns="http://www.yworks.com/xml/graphml"
    xmlns:g="http://graphml.graphdrawing.org/xmlns"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xlink="http://www.w3.org/1999/xlink"

    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    >

  <!-- Processor -->
  <xs:complexType name="Processor.type">
    <xs:annotation>
      <xs:documentation>
        Complex type definitions for a graphml postprocessor.
        <p>Postprocessors are executed after the graph has been loaded.</p>
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Option" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>
            Type definitions for the options for a graphml postprocessor.
            <p>These options are the same as for xml serialized YModules.</p>
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:attribute name="name" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>
                The name of the option.
              </xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="value" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>
                The value of the option.
              </xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="class" type="xs:string" use="required">
      <xs:annotation>
        <xs:documentation>
          The class of the postprocessor.
          <p>This must resolve to a subclass of y.option.yModule</p>
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <!-- Postprocessors -->
  <xs:complexType name="Postprocessors.type">
    <xs:annotation>
      <xs:documentation>
        Complex type definitions for a list of graphml postprocessors.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Processor" type="Processor.type" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>
            Postprocessor element definition.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <!-- Element Definition for  Postprocessors -->
  <xs:element name="Postprocessors" type="Postprocessors.type">
    <xs:annotation>
      <xs:documentation>
        Postprocessors element definition.
      </xs:documentation>
    </xs:annotation>
  </xs:element>

</xs:schema>

