# File lib/versionomy/format_definitions/semver.rb, line 105
      def self.create

        # The following is the definition of the semver schema
        schema_ = Schema.create do

          # The first field has the default value of 1. All other fields
          # have a default value of 0. Thus, the default version number
          # overall is "1.0".
          field(:major, :type => :integer, :default_value => 1) do
            field(:minor, :type => :integer) do
              field(:patch, :type => :integer) do
                field(:prerelease_suffix, :type => :string) do
                  to_compare do |a_, b_|
                    a_.length == 0 ? (b_.length == 0 ? 0 : 1) : (b_.length == 0 ? -1 : a_ <=> b_)
                  end
                end
              end
            end
          end

          # An alias
          alias_field(:special_suffix, :prerelease_suffix)

          # Add the methods in this module to each value
          add_module(Format::Semver::ExtraMethods)
        end

        # The following is the definition of the standard format. It
        # understands the standard schema defined above.
        Format::Delimiter.new(schema_) do

          # All version number strings must start with the major version.
          # Unlike other fields, it is not preceded by the usual "dot"
          # delimiter, but it can be preceded by a "v" indicator.
          field(:major) do
            recognize_number(:delimiter_regexp => 'v?', :default_delimiter => '')
          end

          # The remainder of the core version number are represented as
          # integers delimited by periods. These fields are required.
          field(:minor) do
            recognize_number
          end
          field(:patch) do
            recognize_number
          end

          # The optional prerelease field is represented as a string
          # beginning with an alphabetic character.
          field(:prerelease_suffix) do
            recognize_regexp('[a-zA-Z][0-9a-zA-Z-]*', :default_value_optional => true,
                             :delimiter_regexp => '', :default_delimiter => '')
          end
        end
      end