"So then if I store the Injection element_key (in the case of an array), as a property in the ImageFile object which references the injection, I will be able to get to the various Injection properties from the ImageFile instance? "

Sure, just to pay attention to manage the array key, that will be like your ID

"What would I store in the ImageFile in the case of a list? "

You can use list like a collection, could be of %SerialObjects or other types like %Strings, in the table will be save like $Piece in the column

Sorry for delay...

You can use both, as a list you will use the insert method like a relationship

Set inj = ##class(PET.Injection).%New(), inj.Desc = "blabla "_i
Do study.Injection.Insert(inj)

It will add a column with the list

You can use an array, but you must use SetAt:

Do study.InjectionArr.SetAt(inj,i)

And it will create another table with the name of the property

Another option is to use a regular expression, like this:

ClassMethod ReplaceAccents(ByRef pWord As %String) As %Status
{
  Set tSC = $$$OK
  Try {
      Set dictionary = ##class(%ArrayOfDataTypes).%New()
      Do dictionary.SetAt("ÀÁÂÃÄÅ","A")
      Do dictionary.SetAt("àáâãäå","a")
      Do dictionary.SetAt("ÈÉÊË","E")
      //.... all the rest
   
      While dictionary.GetNext(.key) {
        Set matcher = ##class(%Regex.Matcher).%New("["_ dictionary.GetAt(key) _ "]", pWord)
        Set pWord = matcher.ReplaceAll(key)
      }
  Catch tException {
    Set:$$$ISOK(tSC) tSC = tException.AsStatus()
  }
  Quit tSC
}