<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.bridje.com/schemas/jfxmodel" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.bridje.com/schemas/jfxmodel" version="1.0">

  <xs:element name="model" type="tns:modelInf"/>

  <xs:complexType name="iconDef">
    <xs:annotation>
      <xs:documentation><![CDATA[Icon definition.]]></xs:documentation>
    </xs:annotation>
    <xs:sequence/>
    <xs:attribute name="name" type="xs:string"/>
    <xs:attribute name="file" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="includeInf">
    <xs:annotation>
      <xs:documentation><![CDATA[Java class include information.]]></xs:documentation>
    </xs:annotation>
    <xs:sequence/>
    <xs:attribute name="fullName" type="xs:string"/>
  </xs:complexType>

  <xs:complexType abstract="true" name="jFxComponent">
    <xs:annotation>
      <xs:documentation><![CDATA[Base class for all definitions of JavaFX components.]]></xs:documentation>
    </xs:annotation>
    <xs:sequence/>
  </xs:complexType>

  <xs:complexType name="modelInf">
    <xs:annotation>
      <xs:documentation><![CDATA[A JavaFX application model.]]></xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element minOccurs="0" name="description" type="xs:string"/>
      <xs:element minOccurs="0" name="objects">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="object" type="tns:objectInf"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="icons">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="icon" type="tns:iconDef"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="properties">
        <xs:complexType>
          <xs:sequence>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element name="observableList" type="tns:obListPropertyInf"/>
              <xs:element name="property" type="tns:propertyInf"/>
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="includes">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="include" type="tns:includeInf"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:ID"/>
    <xs:attribute name="package" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="objectInf">
    <xs:annotation>
      <xs:documentation><![CDATA[Data object information for a JavaFX model.]]></xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element minOccurs="0" name="description" type="xs:string"/>
      <xs:element minOccurs="0" name="key" type="tns:propertyInf"/>
      <xs:element minOccurs="0" name="toString" type="tns:propertyInf"/>
      <xs:element minOccurs="0" name="properties">
        <xs:complexType>
          <xs:sequence>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element name="observableList" type="tns:obListPropertyInf"/>
              <xs:element name="property" type="tns:propertyInf"/>
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="includes">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="include" type="tns:includeInf"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="components">
        <xs:complexType>
          <xs:sequence>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element name="table" type="tns:tableComponent"/>
              <xs:element name="treeTable" type="tns:treeTableComponent"/>
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:ID"/>
  </xs:complexType>

  <xs:complexType name="propertyInf">
    <xs:annotation>
      <xs:documentation><![CDATA[Information for a property of a data object.]]></xs:documentation>
    </xs:annotation>
    <xs:sequence/>
    <xs:attribute name="name" type="xs:ID"/>
    <xs:attribute name="type" type="xs:string"/>
    <xs:attribute name="description" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="obListPropertyInf">
    <xs:annotation>
      <xs:documentation><![CDATA[An observable list property.]]></xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="tns:propertyInf">
        <xs:sequence/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="tableComponent">
    <xs:annotation>
      <xs:documentation><![CDATA[JavaFX Table component definition.]]></xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="tns:jFxComponent">
        <xs:sequence/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="treeTableComponent">
    <xs:annotation>
      <xs:documentation><![CDATA[JavaFX tree table component definition.]]></xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="tns:jFxComponent">
        <xs:sequence/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>
