Profiles and models¶
Profiles make installation-specific schemas explicit. A profile is an immutable executable mapping and identity policy bound to one exact model snapshot. Crosswalk never treats a Drupal field name or an Omeka property as globally meaningful without that contract.
Which mappings are configurable?¶
Crosswalk does not expose an editable pairwise mapping for every source and target combination. Each registered adapter maps its wire format into the Hub, out of the Hub, or both; every conversion reuses those format-to-Hub mappings.
Installation-specific mappings are exposed as model-bound profiles for systems whose schema varies by site. Crosswalk currently authors profiles for Drupal and Omeka S:
crosswalk profile create drupal ...
crosswalk profile create omeka-s ...
crosswalk profile validate ...
crosswalk profile publish ...
Use a published profile at conversion time with --source-profile. A Drupal
profile may also be selected with --target-profile for a profile-bound
Islandora Workbench transformation. Editable CSV-to-Hub and
Hub-to-Islandora-Workbench column mappings and validation policy are exposed
separately as transformation specifications, created with
crosswalk spec compile drupal, reviewed, and sealed with crosswalk spec
validate.
Mappings for versioned or static formats—including MARC21, BibTeX, DataCite, Crossref deposit XML, Dublin Core, and MODS—are currently implemented by their format adapters and compiled into Crosswalk. They are not exposed as runtime profile files or CLI mapping overrides. Supporting local MARC tags or changing one of those mappings currently requires changing the adapter. See Format support for the parse and serialization directions each adapter provides.
Ownership boundary¶
Crosswalk does not discover a live repository schema while compiling or loading a profile:
sitectl-drupalowns Drupal configuration acquisition and endpoint resolution.- An Omeka operator or sitectl feature owns acquisition of the bounded Omeka S schema snapshot.
- Crosswalk owns deterministic model compilation, ordered Hub mappings, identifier rules, fingerprints, storage, and execution.
- Repository imports and other mutations remain sitectl operations.
The split keeps credentials and live-site behavior out of the metadata model and makes the same reviewed profile reproducible offline.
Lifecycle¶
Profile authoring has three explicit steps:
profile createcompiles and stores a content-addressed model, then writes a heuristic profile draft. It does not publish guessed mappings.- An operator reviews mappings, selectors, codecs, merge policy, and identity
rules.
profile validateresolves them against the exact stored model and seals a new profile fingerprint. profile publishatomically installs the sealed definition. Existing names are not overwritten unless--forceis explicit.
profile list, profile show, and profile delete inspect and manage the
published set. The configuration root defaults to $HOME/.crosswalk; pass
--config-dir to use another root. Models are stored by fingerprint below
models/, while named published profiles live below profiles/.
Drupal¶
Export active Drupal configuration with sitectl, then pass the directory or gzip-compressed tar archive to Crosswalk:
sitectl job run drupal/config-export \
--output /absolute/path/drupal-config.tar.gz
crosswalk profile create drupal repository-items \
--config /absolute/path/drupal-config.tar.gz \
--entity-type node \
--bundle islandora_object \
--output repository-items.draft.yaml
Review the draft before sealing it. Starter mappings are derived from the bundle's field storage types, cardinality, settings, labels, descriptions, and required policy; they are a starting point, not an institutional decision.
crosswalk profile validate \
--input repository-items.draft.yaml \
--output repository-items.sealed.yaml
crosswalk profile publish \
--input repository-items.sealed.yaml
Compilation is local and bounded. Crosswalk reads archive members without extracting them and does not contact Drupal.
Omeka S¶
An Omeka S acquisition snapshot contains the properties, vocabularies, resource classes, and resource templates needed to build a model. Crosswalk does not query the Omeka API or database during profile authoring.
Create an installation-wide profile by omitting the template ID, or bind the profile to one resource template:
crosswalk profile create omeka-s photographs \
--snapshot omeka-schema.json \
--resource-template-id 200 \
--output photographs.draft.yaml
crosswalk profile validate \
--input photographs.draft.yaml \
--output photographs.sealed.yaml
crosswalk profile publish --input photographs.sealed.yaml
The current Omeka S adapter is an input adapter. Its profile maps a modeled resource or resource template into the Hub; it is not an Omeka write contract.
Institution-specific identifiers¶
A generic local identifier is not safe duplicate evidence. An institution-owned identifier becomes exact evidence only when the profile explicitly declares:
- a distinct scheme name;
- an absolute authority namespace URI;
- a fully anchored validation pattern;
- an identity level:
work,version,manifestation,concept, orsource_record; and - a
strongidentity rule and modeled lookup field.
For Drupal, the creation flags are:
crosswalk profile create drupal repository-items \
--config /absolute/path/drupal-config.tar.gz \
--entity-type node \
--bundle islandora_object \
--institution-attribute local \
--institution-scheme example-accession \
--institution-namespace https://repository.example.edu/id/accession/ \
--institution-pattern '^EX-[0-9]+$' \
--institution-identity-level source_record \
--output repository-items.draft.yaml
For Omeka S, use --institution-field instead of
--institution-attribute, plus the same scheme, namespace, pattern, and
identity-level concepts.
The compiled profile canonicalizes identifiers before applying whole-value
patterns. Scheme, namespace, and identity level are all part of exact identity.
Only strong rules enable exact duplicate policy; a built-in scheme omitted from
the profile does not silently retain process-wide exactness. A
typed-identifier mapping must use the exact same field selector as at least
one identity rule, although several rules may deliberately classify the same
stored selector.
Fingerprints and drift¶
Models, profiles, and profile-bound specs are separate signed-by-content layers:
flowchart LR
Snapshot[Acquired schema snapshot] --> Model[Model fingerprint]
Model --> Profile[Profile fingerprint]
Profile --> Spec[Transformation fingerprint]
Spec --> Contract[Workbench artifact contract]
Changing executable model or profile policy changes its fingerprint. Loading a profile requires its exact content-addressed model. A profile-bound spec must name that exact profile and model, and serializers reject a missing or mismatched runtime profile. Descriptive profile name/description changes do not alter executable policy, but a published name is still only an operator-facing handle—not the trust anchor.
Systems without profiles¶
ArchivesSpace currently uses its versioned JSONModel API representation rather
than an installation profile. Hierarchy is carried in Crosswalk's Dataset model
and can become Workbench id, parent_id, and sibling-weight columns.
Official field structure is validated while newer or plugin-defined top-level
fields are retained as canonical JSON in
Extra.archivesspace_raw_fields, including their JSON types and integer
precision.