Module: Dcc

Defined in:
lib/dcc.rb,
lib/dcc/si.rb,
lib/dcc/v2.rb,
lib/dcc/v3.rb,
lib/dcc/cli.rb,
lib/dcc/base.rb,
lib/dcc/diff.rb,
lib/dcc/i18n.rb,
lib/dcc/type.rb,
lib/dcc/error.rb,
lib/dcc/si/v1.rb,
lib/dcc/si/v2.rb,
lib/dcc/plugin.rb,
lib/dcc/schema.rb,
lib/dcc/server.rb,
lib/dcc/builder.rb,
lib/dcc/cli/cli.rb,
lib/dcc/convert.rb,
lib/dcc/extract.rb,
lib/dcc/inspect.rb,
lib/dcc/migrate.rb,
lib/dcc/si/base.rb,
lib/dcc/version.rb,
lib/dcc/validate.rb,
lib/dcc/base/data.rb,
lib/dcc/base/item.rb,
lib/dcc/base/list.rb,
lib/dcc/base/text.rb,
lib/dcc/namespace.rb,
lib/dcc/signature.rb,
lib/dcc/transform.rb,
lib/dcc/server/app.rb,
lib/dcc/base/result.rb,
lib/dcc/builder/dsl.rb,
lib/dcc/convert/csv.rb,
lib/dcc/diff/change.rb,
lib/dcc/diff/result.rb,
lib/dcc/type_guards.rb,
lib/dcc/base/comment.rb,
lib/dcc/base/contact.rb,
lib/dcc/base/formula.rb,
lib/dcc/convert/html.rb,
lib/dcc/convert/json.rb,
lib/dcc/convert/yaml.rb,
lib/dcc/extract/file.rb,
lib/dcc/extract/ring.rb,
lib/dcc/namespace/si.rb,
lib/dcc/si/base/real.rb,
lib/dcc/si/namespace.rb,
lib/dcc/type/si_unit.rb,
lib/dcc/v2/namespace.rb,
lib/dcc/v3/namespace.rb,
lib/dcc/validate/xsd.rb,
lib/dcc/base/location.rb,
lib/dcc/base/quantity.rb,
lib/dcc/base/software.rb,
lib/dcc/base/xml_blob.rb,
lib/dcc/namespace/dcc.rb,
lib/dcc/quantity_math.rb,
lib/dcc/base/byte_data.rb,
lib/dcc/base/condition.rb,
lib/dcc/base/core_data.rb,
lib/dcc/base/hash_type.rb,
lib/dcc/base/item_list.rb,
lib/dcc/base/statement.rb,
lib/dcc/cli/formatters.rb,
lib/dcc/convert/result.rb,
lib/dcc/inspect/report.rb,
lib/dcc/namespace/dsig.rb,
lib/dcc/namespace/qudt.rb,
lib/dcc/schema/version.rb,
lib/dcc/server/storage.rb,
lib/dcc/si/base/hybrid.rb,
lib/dcc/transform/xslt.rb,
lib/dcc/validate/issue.rb,
lib/dcc/builder/session.rb,
lib/dcc/common_elements.rb,
lib/dcc/context_options.rb,
lib/dcc/plugin/registry.rb,
lib/dcc/quantity_format.rb,
lib/dcc/si/base/complex.rb,
lib/dcc/si/base/si_list.rb,
lib/dcc/si/v1/namespace.rb,
lib/dcc/si/v2/namespace.rb,
lib/dcc/validate/result.rb,
lib/dcc/base/resp_person.rb,
lib/dcc/base/result_list.rb,
lib/dcc/base/used_method.rb,
lib/dcc/i18n/text_lookup.rb,
lib/dcc/si/base/constant.rb,
lib/dcc/signature/result.rb,
lib/dcc/signature/signer.rb,
lib/dcc/transform/result.rb,
lib/dcc/v2/configuration.rb,
lib/dcc/v3/configuration.rb,
lib/dcc/versioned_parser.rb,
lib/dcc/base/rich_content.rb,
lib/dcc/namespace/math_ml.rb,
lib/dcc/validate/severity.rb,
lib/dcc/base/software_list.rb,
lib/dcc/quantity_math/real.rb,
lib/dcc/si/common_elements.rb,
lib/dcc/signature/verifier.rb,
lib/dcc/type/base64_binary.rb,
lib/dcc/v2/common_elements.rb,
lib/dcc/v3/common_elements.rb,
lib/dcc/base/identification.rb,
lib/dcc/base/statement_list.rb,
lib/dcc/si/base/expanded_mu.rb,
lib/dcc/si/base/standard_mu.rb,
lib/dcc/si/v1/configuration.rb,
lib/dcc/si/v2/configuration.rb,
lib/dcc/type/schema_version.rb,
lib/dcc/validate/schematron.rb,
lib/dcc/base/equipment_class.rb,
lib/dcc/base/identifications.rb,
lib/dcc/server/storage/entry.rb,
lib/dcc/base/resp_person_list.rb,
lib/dcc/base/string_with_lang.rb,
lib/dcc/base/used_method_list.rb,
lib/dcc/context_configuration.rb,
lib/dcc/server/storage/memory.rb,
lib/dcc/si/v1/common_elements.rb,
lib/dcc/si/v2/common_elements.rb,
lib/dcc/type/decimal_xml_list.rb,
lib/dcc/type/iso_country_code.rb,
lib/dcc/quantity_math/quantity.rb,
lib/dcc/type/iso_language_code.rb,
lib/dcc/base/contact_not_strict.rb,
lib/dcc/base/measurement_result.rb,
lib/dcc/validate/business_rules.rb,
lib/dcc/base/administrative_data.rb,
lib/dcc/base/influence_condition.rb,
lib/dcc/base/measuring_equipment.rb,
lib/dcc/base/ref_type_definition.rb,
lib/dcc/validate/schematron/rule.rb,
lib/dcc/quantity_format/formatter.rb,
lib/dcc/validate/schematron/rules.rb,
lib/dcc/base/measurement_meta_data.rb,
lib/dcc/si/base/real_list_xml_list.rb,
lib/dcc/base/calibration_laboratory.rb,
lib/dcc/validate/schematron/profile.rb,
lib/dcc/base/measurement_result_list.rb,
lib/dcc/si/base/coverage_interval_mu.rb,
lib/dcc/base/influence_condition_list.rb,
lib/dcc/base/measuring_equipment_list.rb,
lib/dcc/base/ref_type_definition_list.rb,
lib/dcc/si/base/complex_list_xml_list.rb,
lib/dcc/si/base/expanded_unc_xml_list.rb,
lib/dcc/validate/schematron/rules/base.rb,
lib/dcc/base/measurement_meta_data_list.rb,
lib/dcc/base/digital_calibration_certificate.rb,
lib/dcc/si/base/measurement_uncertainty_univariate.rb,
lib/dcc/validate/schematron/rules/date_range_check.rb,
lib/dcc/validate/schematron/rules/id_refid_linking.rb,
lib/dcc/validate/schematron/rules/xml_list_spacing.rb,
lib/dcc/validate/schematron/rules/unit_format_check.rb,
lib/dcc/validate/schematron/rules/non_si_declaration.rb,
lib/dcc/validate/schematron/rules/iso_code_validation.rb,
lib/dcc/validate/schematron/rules/language_code_dedup.rb,
lib/dcc/validate/schematron/rules/release_format_check.rb,
lib/dcc/validate/schematron/rules/schema_version_check.rb,
lib/dcc/validate/schematron/rules/used_methods_placement.rb,
lib/dcc/validate/schematron/rules/uncertainty_consistency.rb,
lib/dcc/validate/schematron/rules/used_software_placement.rb,
lib/dcc/validate/schematron/rules/influence_conditions_placement.rb,
lib/dcc/validate/schematron/rules/administrative_data_completeness.rb

Overview

Dcc::Validate::Schematron::Rules hosts the 14 pure-Ruby PTB Schematron rule classes. Each rule subclasses Base and overrides #check_on(dcc).

The parent module autoloads every rule lazily — no require_relative is used anywhere in this directory (project rule).

Defined Under Namespace

Modules: Base, Builder, Cli, ContextConfiguration, ContextOptions, Convert, Diff, Extract, I18n, Inspect, Migrate, Namespace, Plugin, QuantityFormat, QuantityMath, Schema, Server, Si, Signature, Transform, Type, TypeGuards, V2, V3, Validate, VersionedParser Classes: BuilderError, CommonElements, ConversionError, Error, ExtractionError, MissingDependencyError, ParseError, SchemaError, SignatureError, TransformError, UnknownVersionError, ValidationError

Constant Summary collapse

SUPPORTED_VERSIONS =
[2, 3].freeze
UNSPECIFIED_CONTEXT =

Sentinel value used to distinguish "no context supplied" from "context supplied as nil". Defined eagerly so callers can reference it without triggering autoload.

Object.new.freeze
VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.build(version: 3) {|Dcc::Builder::Session| ... } ⇒ Object

Build a new DCC programmatically using the builder DSL.

Parameters:

  • version (Integer, nil) (defaults to: 3)

    major DCC version (default: 3).

Yields:



77
78
79
# File 'lib/dcc.rb', line 77

def build(version: 3, &block)
  Builder.call(version: version, &block)
end

.detect_version(input) ⇒ Integer

Detect the DCC major version from an XML document's schemaVersion attribute.

Parameters:

  • input (String, IO)

Returns:

  • (Integer)

    2 or 3.



104
105
106
107
108
109
# File 'lib/dcc.rb', line 104

def detect_version(input)
  str = read_input(input)
  match = str.match(/schemaVersion\s*=\s*["'](\d+)\./)
  major = match && match[1] ? match[1].to_i : 3
  major == 2 ? 2 : 3
end

.io_like?(input) ⇒ Boolean

Returns whether the input is an IO-like stream we support.

Returns:

  • (Boolean)

    whether the input is an IO-like stream we support.



122
123
124
125
126
127
# File 'lib/dcc.rb', line 122

def io_like?(input)
  !!(input.is_a?(::IO) ||
    input.is_a?(::StringIO) ||
    input.is_a?(::File) ||
    (defined?(::Tempfile) && input.is_a?(::Tempfile)))
end

.load_all!true

Eager-load every version context (DCC + D-SI) so symbol type references in the base modules resolve correctly. Called automatically on first Dcc.parse. Safe to call multiple times.

Returns:

  • (true)


133
134
135
136
137
138
139
# File 'lib/dcc.rb', line 133

def load_all!
  V2.load_all!
  V3.load_all!
  Si::V1.load_all!
  Si::V2.load_all!
  true
end

.migrate(dcc, from:, to:) ⇒ Object

Migrate a parsed DCC object from one schema version to another.

Parameters:



85
86
87
# File 'lib/dcc.rb', line 85

def migrate(dcc, from:, to:)
  Migrate.call(dcc, from: from, to: to)
end

.parse(input, version: nil, context: nil, register: nil) ⇒ Dcc::V2::DigitalCalibrationCertificate, Dcc::V3::DigitalCalibrationCertificate

Parse a DCC XML document and return a typed object tree.

Parameters:

  • input (String, IO)

    XML string or readable IO.

  • version (Integer, nil) (defaults to: nil)

    Major DCC version (2 or 3). Auto-detected from the schemaVersion attribute when nil.

  • context (Symbol, nil) (defaults to: nil)

    Substitution context (e.g. :dcc_v3_4).

  • register (Symbol, nil) (defaults to: nil)

    Alias for context (mml-compatible API).

Returns:



68
69
70
71
72
# File 'lib/dcc.rb', line 68

def parse(input, version: nil, context: nil, register: nil)
  load_all!
  resolved = version || detect_version(input)
  parser_for(resolved).parse(input, context: context, register: register)
end

.parser_for(version) ⇒ Module

Return the parser module for the given major version.

Parameters:

  • version (Integer)

    2 or 3.

Returns:

  • (Module)

    Dcc::V2 or Dcc::V3.



92
93
94
95
96
97
98
99
# File 'lib/dcc.rb', line 92

def parser_for(version)
  case version.to_i
  when 2 then V2
  when 3 then V3
  else
    raise UnknownVersionError, "Unsupported DCC version: #{version.inspect} (expected 2 or 3)"
  end
end

.read_input(input) ⇒ String

Read an input that may be a String or an IO-like object. Uses explicit type checks per project rule (no respond_to?).

Parameters:

  • input (String, IO, StringIO, File, Tempfile)

Returns:

  • (String)


115
116
117
118
119
# File 'lib/dcc.rb', line 115

def read_input(input)
  return input.read if io_like?(input)

  input.to_s
end