Class: Xmi::Sparx::SparxRoot

Inherits:
Root show all
Defined in:
lib/xmi/sparx/root.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Lutaml::Model::Serializable

#type?

Class Method Details

.fix_encoding(xml_content) ⇒ String

Fix invalid UTF-8 encoding in the XML content.

Some EA-generated XMI files contain invalid UTF-8 byte sequences that would cause parsing failures. This method replaces invalid bytes with placeholder characters.

Parameters:

  • xml_content (String)

    The raw XML content

Returns:

  • (String)

    The XML content with valid UTF-8 encoding



49
50
51
52
53
54
55
# File 'lib/xmi/sparx/root.rb', line 49

def fix_encoding(xml_content)
  return xml_content if xml_content.valid_encoding?

  xml_content
    .encode("UTF-16be", invalid: :replace, replace: "?")
    .encode("UTF-8")
end

.parse_xml(xml_content) ⇒ SparxRoot

Parse XMI content into Ruby objects.

This method uses automatic version detection to handle different XMI namespace versions (e.g., XMI 20110701, 20131001, 20161101) and their corresponding UML versions.

Parameters:

  • xml_content (String)

    The raw XMI XML content

Returns:

  • (SparxRoot)

    The parsed Ruby object with index built

See Also:



33
34
35
36
37
38
39
# File 'lib/xmi/sparx/root.rb', line 33

def parse_xml(xml_content)
  xml_content = fix_encoding(xml_content)
  Xmi.init_versioning!
  root = Xmi::VersionRegistry.parse_with_detected_version(xml_content, self)
  root.build_index
  root
end

Instance Method Details

#build_indexXmi::Index

Build index for fast lookups

Returns:



63
64
65
# File 'lib/xmi/sparx/root.rb', line 63

def build_index
  @index = Xmi::Index.new(self)
end

#indexXmi::Index

Access the index (builds on first access if needed)

Returns:



69
70
71
# File 'lib/xmi/sparx/root.rb', line 69

def index
  @index || build_index
end