<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:annotation>
    <xs:documentation>

      Copyright (C) 2002-2021  The FreeCol Team

      This file is part of FreeCol.

      FreeCol is free software: you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation, either version 2 of the License, or
      (at your option) any later version.

      FreeCol is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
      GNU General Public License for more details.

      You should have received a copy of the GNU General Public License
      along with FreeCol. If not, see http://www.gnu.org/licenses

      XSD for specification version 0.117
      CHANGELOG:
      0.26:  add capture-equipment
      0.27:  add limits
      0.28:  move limits into other elements
      0.29:  add events
      0.30:  extend string options
      0.31:  change difficulty selection for tile types
      0.32:  change difficulty selection for european nation types
      0.33:  add scoreValue to event
      0.34:  add abstract buildable types
      0.35:  remove minimap-color from tile-type
      0.36:  change image-id of improvement action to string
      0.37:  remove art element from tile-type
      0.38:  remove overlay attribute from tileimprovement-type
      0.39:  remove color from nation and add audio options
      0.40:  change tile(s) children of tile improvement to scope
      0.41:  add consumes element to unit-type
      0.42:  remove pathImage attribute from unit-type
      0.43:  add attributes id and extends to specification
      0.44:  add delete element
      0.45:  add delete attribute to upgrade, downgrade, ability and modifier
      0.46:  add undead downgrade
      0.47:  remove index from player
      0.48:  add difficultyLevel attribute for in-game specification
      0.49:  marketData add goods-type attribute and make ID a MarketDataId
      0.50:  allow OptionGroups to contain OptionGroups
      0.51:  remove improvementaction-type and difficultyLevels
      0.52:  add upkeep attribute to building-type
      0.53:  add exposeResourcePercent attribute to tileimprovement-type
      0.54:  add settlement type
      0.55:  add increment and incrementType to modifier
      0.56:  add scope to plunder and gifts elements
      0.57:  add tradeBonus attribute to settlement
      0.58:  change unit type changes to use percentages rather than booleans
      0.59:  add maximumExperience attribute to UnitType
      0.60:  add offeredFathers to player
      0.61:  add moveToEurope to tile
      0.62:  add settlementType to indianSettlement
      0.63:  remove anthem from nation
      0.64:  add preferredLatitude and startsOnEastCoast to nation
      0.65:  add REF size option
      0.66:  make immigrants a unit option, too
      0.67:  expand tile type change
      0.68:  add role as a game object type
      0.69:  add attribute editable to option group
      0.70:  add disasters, and duration to features
      0.71:  exportData is a FreeColObject, should use id attribute, not ID
      0.72:  allow preserveAttributes attribute to aid spec fragment authors
      0.73:  generalize preserveAttributes to preserve
      0.74:  add convertThreshold to settlement
      0.75:  add generalized production element
      0.76:  change attribute name from "colonyCenterTile" to "unattended"
      0.77:  nation has a color attribute again
      0.78:  added production-weight, low-production-threshold,
             zero-production-factor to goods-type
      0.79:  upgrade role from enum to role
      0.80:  replace unit type default equipment with default role
      0.81:  Percentage option values are PercentageType.
      0.82:  Add conversion update type.
      0.83:  Add delete attribute to production.
      0.84:  Add is-military to goods type.
      0.85:  Add role-change element to Role.
      0.86:  expended-equipment becomes required-role in tileimprovement-type.
      0.87:  Add defaultUnit attribute to unit-type.
      0.88:  Add textOption to OptionGroup.
      0.89:  tileimprovement-type/s -> tile-improvement-type/s
      0.90:  difficultyLevel -> difficulty-level
      0.91:  productionLevel -> production-level
      0.92:  Fix capitalization in Tile-type/gen/*.
      0.93:  Fix capitalization in Role.
      0.94:  exposeResourcePercent -> expose-resource-percent
      0.95:  Fix capitalization in UnitType.
      0.96:  Fix capitalization in BuildingType.
      0.97:  scoreValue -> score-value in Event.
      0.98:  Fix capitalization in national settlement type.
      0.99:  Downcase disaster amount enum.
      0.100: Fix capitalization in Nation.
      0.101: Fix capitalization in Limit.
      0.102: Fix capitalization in UnitTypeChange.
      0.103: incrementType -> increment-type
      0.104: Fix capitalization in Scope.
      0.105: Fix capitalization in Operand.
      0.106: Add priority to unit-type.
      0.107: Improve unit changes.
      0.108: Migrate change to tile-type-change.
      0.109: Big reorganization.
      0.110: Add experts-with-connections-production attribute to BuildingType.
      0.111: Add unit-change-types etc.
      0.112: Added rebel-factor attribute to building-type.
      0.113: Added competence-factor attribute to building-type.
      0.114: Drop upgrade element from founding-father.
      0.115: Drop equipment.
      0.116: Mass update to fix neglect of saved game format.
      0.117: Update unit-type-change to include identifier.
      0.118: Add optional nationType to unitOption.
      0.119: Add optional mercenary-price to unit-type.
      0.120: Add type attribute to fileOption.
    </xs:documentation>
  </xs:annotation>

  <xs:include schemaLocation="spec-model.xsd" />
  <xs:include schemaLocation="spec-building-types.xsd"/>
  <xs:include schemaLocation="spec-disasters.xsd"/>
  <!-- @compat 0.11.x -->
  <xs:include schemaLocation="spec-equipment-types.xsd"/>
  <!-- end @compat 0.11.x -->
  <xs:include schemaLocation="spec-events.xsd"/>
  <xs:include schemaLocation="spec-founding-fathers.xsd"/>
  <xs:include schemaLocation="spec-goods-types.xsd"/>
  <xs:include schemaLocation="spec-modifiers.xsd"/>
  <xs:include schemaLocation="spec-nations.xsd"/>
  <xs:include schemaLocation="spec-options.xsd"/>
  <xs:include schemaLocation="spec-resource-types.xsd"/>
  <xs:include schemaLocation="spec-roles.xsd"/>
  <xs:include schemaLocation="spec-tile-improvement.xsd"/>
  <xs:include schemaLocation="spec-tile-types.xsd"/>
  <xs:include schemaLocation="spec-unit-change-types.xsd"/>
  <xs:include schemaLocation="spec-unit-types.xsd"/>
  <xs:include schemaLocation="spec-common.xsd"/>

  <xs:element name="freecol-specification">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="building-types"/>
        <xs:element ref="disasters"/>
        <xs:element ref="events"/>
        <xs:element ref="founding-fathers"/>
        <xs:element ref="goods-types"/>
        <xs:element ref="modifiers"/>
        <xs:element ref="nations"/>
        <xs:element ref="european-nation-types"/>
        <xs:element ref="indian-nation-types"/>
        <xs:element ref="options"/>
        <xs:element ref="resource-types"/>
        <xs:element ref="roles"/>
        <xs:element ref="tile-improvement-types"/>
        <xs:element ref="tile-types"/>
        <xs:element ref="unit-change-types"/>
        <xs:element ref="unit-types"/>
        <!-- @compat 0.11.3 -->
        <xs:element ref="tileimprovement-types"/>
        <!-- end @compat 0.11.3 -->
        <!-- @compat 0.11.x -->
        <xs:element ref="equipment-types"/>
        <!-- end @compat 0.11.x -->
      </xs:choice>

      <xs:attribute name="id" type="xs:ID"/>
      <xs:attribute name="extends" type="xs:string"/>

      <xs:attribute name="difficulty-level" type="xs:string"/>
      <xs:attribute name="version" type="xs:string"/>
      <!-- @compat 0.11.3 -->
      <xs:attribute name="difficultyLevel" type="xs:string"/>
      <!-- end @compat 0.11.3 -->
    </xs:complexType>
  </xs:element>

</xs:schema>
