Class: Glossarist::Rdf::GlossNaryMember
- Inherits:
-
Lutaml::Model::Serializable
- Object
- Lutaml::Model::Serializable
- Glossarist::Rdf::GlossNaryMember
- Defined in:
- lib/glossarist/rdf/gloss_nary_member.rb
Overview
Shared base for typed n-ary hyperedge member RDF views (GlossPartitiveMember, GlossGenericMember, future leaves).
Carries the shared attributes and the deterministic_id algorithm.
Concrete leaves declare their own rdf do block AND their own
type-specific attributes — is_delimiting on GlossPartitiveMember
(binary role, ISO 704 §5.5.4.2.2); characteristic on
GlossGenericMember (delimiting text, ISO 704 §5.5.4.2.1).
Subject identity is content-derived so the same member in the same hyperedge produces the same URI across runs (and across processes). Two members with identical ref + dimensions share a subject — that is intentional: it exposes model-level inconsistency if the same concept is given different dimensions inside the same dataset.
Direct Known Subclasses
Class Method Summary collapse
-
.deterministic_id(member) ⇒ Object
Human-readable SOURCE:ID when both are present; SHA-256 / 16 hex chars fallback otherwise.
Class Method Details
.deterministic_id(member) ⇒ Object
Human-readable SOURCE:ID when both are present; SHA-256 / 16 hex chars fallback otherwise. Same content → same slug across instances, runs, and processes.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/glossarist/rdf/gloss_nary_member.rb', line 32 def self.deterministic_id(member) readable = [member.ref_source, member.ref_id].compact.reject(&:empty?) return readable.join(":") unless readable.empty? parts = [member.ref_source, member.ref_id, member.ref_text, member.presence, member.count] # Type-specific discriminator: include the delimiting flag for # partitive members (binary role) or the characteristic text # for generic members (so members of different criteria don't # collide on the same hash input). case member when GlossPartitiveMember parts << member.is_delimiting when GlossGenericMember parts << member.characteristic end DeterministicSlug.from_parts(*parts) end |