module PROIEL::PROIELXML::Schema

Functionality concerned with PROIEL XML schema loading and versioning. Functionality for validation using a PROIEL XML schema is found in {PROIEL::PROIELXML::Validator}.

@api private

Public Class Methods

check_schema_version_of_xml_file(filename) click to toggle source

Opens a PROIEL XML schema file and peek at the schema version number that the file claims it conforms to.

@return [String] schema version number

@raise InvalidSchemaVersion

# File lib/proiel/proiel_xml/schema.rb, line 35
def self.check_schema_version_of_xml_file(filename)
  doc = Nokogiri::XML(File.read(filename))

  if doc and doc.root and doc.root.name == 'proiel'
    case doc.root.attr('schema-version')
    when '2.0'
      '2.0'
    when '2.1'
      '2.1'
    when '3.0'
      '3.0'
    when NilClass
      '1.0'
    else
      raise InvalidSchemaVersion, 'invalid schema version number'
    end
  else
    raise InvalidSchemaVersion, 'top-level XML element not found'
  end
end
current_proiel_xml_schema_version() click to toggle source

Returns the current version of the PROIEL XML schema.

@return [String] schema version number

# File lib/proiel/proiel_xml/schema.rb, line 18
def self.current_proiel_xml_schema_version
  '3.0'
end
load_proiel_xml_schema(schema_version) click to toggle source

Loads a PROIEL XML schema.

@return [Nokogiri::XML::Schema] schema version number

@raise RuntimeError

# File lib/proiel/proiel_xml/schema.rb, line 62
def self.load_proiel_xml_schema(schema_version)
  filename = proiel_xml_schema_filename(schema_version)

  Nokogiri::XML::Schema(File.open(filename).read)
end
proiel_xml_schema_filename(schema_version) click to toggle source

Determines the filename of a specific version of the PROIEL XML schema.

@return [String] filename

@raise ArgumentError

# File lib/proiel/proiel_xml/schema.rb, line 74
def self.proiel_xml_schema_filename(schema_version)
  if schema_version == '1.0' or schema_version == '2.0' or schema_version == '2.1' or schema_version == '3.0'
    File.join(File.dirname(__FILE__),
              "proiel-#{schema_version}",
              "proiel-#{schema_version}.xsd")
  else
    raise ArgumentError, 'invalid schema version'
  end
end