---
# System prepended metadata

title: BIDS Schema Enumeratorator

---

# BIDS Schema Enumeratorator

## ~~Option 1: Dense dereferenced objects (via Taylor)~~

<details><summary>columns.yaml + values.yaml</summary>

```yaml
type__eeg_channels:
  name: type
  display_name: Channel type
  description: |
    Type of channel; MUST use the channel types listed below.
    Note that the type MUST be in upper-case.
  type: string
  enum:
    - $ref: objects.values.AUDIO
    - $ref: objects.values.EEG
    - ...
```

```yaml
AUDIO:
  name: AUDIO
  display_name: AUDIO
  description: |
    Audio signal.
```

</details>
    
<details><summary>Derefs to:</summary>

```yaml
type__eeg_channels:
  name: type
  display_name: Channel type
  description: |
    Type of channel; MUST use the channel types listed below.
    Note that the type MUST be in upper-case.
  type: string
  enum:
    - name: AUDIO
      display_name: AUDIO
      description: |
        Audio signal.
    - name: EEG
      display_name: EEG
      description: |
        Electroencephalogram channel.
    - ...
```

</details>
    
## ~~Option 2: Dereferenced values~~

<details><summary>columns.yaml + values.yaml</summary>

```yaml
type__eeg_channels:
  name: type
  display_name: Channel type
  description: |
    Type of channel; MUST use the channel types listed below.
    Note that the type MUST be in upper-case.
  type: string
  enum:
    - $ref: objects.values.AUDIO.value
    - $ref: objects.values.EEG.value
    - ...
```

```yaml
AUDIO:
  value: AUDIO
  display_name: AUDIO
  description: |
    Audio signal.
```

</details>
    
<details><summary>Derefs to:</summary>

```yaml
type__eeg_channels:
  name: type
  display_name: Channel type
  description: |
    Type of channel; MUST use the channel types listed below.
    Note that the type MUST be in upper-case.
  type: string
  enum:
    - AUDIO
    - EEG
    - ...
```

</details>

## Option 3: Backreferences + dereferenced values

<details open><summary>columns.yaml + values.yaml</summary>

```yaml
type__eeg_channels:
  name: type
  display_name: Channel type
  description: |
    Type of channel; MUST use the channel types listed below.
    Note that the type MUST be in upper-case.
  type: string
  enum:
    - $ref: objects.values.AUDIO.value
    - $ref: objects.values.EEG.value
    - ...
```

```yaml
AUDIO:
  value: AUDIO
  display_name: AUDIO
  tag: [common]
  description: |
    Audio signal.
PPG:
  value: PPG
  display_name: PPG
  tag: [eeg]
  description: |
    Photoplethysmography.
    
ECG:
  tag: [eeg, ieeg]
```

</details>

<details open><summary>Derefs to:</summary>

```yaml
type__eeg_channels:
  name: type
  display_name: Channel type
  description: |
    Type of channel; MUST use the channel types listed below.
    Note that the type MUST be in upper-case.
  type: string
  enum:
    - AUDIO
    - EEG
    - ...
```

</details>

Strategy: Use current MEG to generate `meg` tags, EEG to generate `eeg`, etc. Some can be made common short-term, but the rest can be shifted from multi-tag to "common" later.