# Decompose Title into Classical Metadata

This statement is used to decompose titles into separate classical components. title is used loosely as the Title field is not directly used.

The source parsing is the same algorithm which is used when decomposing MusicBrainz works to import classical fields. The algorithm is not foolproof.

Input and output is maintained in a container array. Any directed path can be used as long as it resolves to be an array. Every element in the array must be an object which contains a String name of title. Array items which are not Objects or do not contain a non empty title member are ignored.

The action test state will be set to false if the directed path is not an array or does not exist. It will also be set to false if no array elements are valid. Otherwise it will be set to true.

On output the objects can contain the following members. Note that all items are strings except for isClassical. All items are optional.

isClassical
  A boolean value which is set to true if classical metadata was extracted.
classicalCatalog
  The extracted catalog metadata.
composition
  Commonly stored as Work
movementCount
  The synthesized movement count. Note that this only is accurate if the submitted titles encompass all tracks in a movement.
movementName
  The name of the movement.
movementNumber
  The movement number
opus
  The opus.
partName
  Commonly stored as Part. The Part is the movement number as a Roman numeral followed by period-space and the movement name.

Example input container:

    [
      {
        "title" : "Piano Concerto No. 23 in a Major, K. 488: 1. Allegro"
      },
      {
        "title" : "Piano Concerto No. 23 in a Major, K. 488: 2. Adagio"
      },
      {
        "title" : "Piano Concerto No. 23 in a Major, K. 488: 3. Allegro Assai"
      },
      {
        "title" : "Piano Concerto No. 24 in C Minor, K. 491: 1. Allegro"
      },
      {
        "title" : "Piano Concerto No. 24 in C Minor, K. 491: 2. Larghetto"
      },
      {
        "title" : "Piano Concerto No. 24 in C Minor, K. 491: 3. Allegretto"
      },
      {
        "title" : "Impromptu for Piano in G Flat Major, D. 899/3 (Op. 90/3)"
      },
      {
        "title" : "Impromptu for Piano in a Flat Major, D. 899/4 (Op. 90/4)"
      }
    ]

Example output container:

    [
      {
        "classicalCatalog" : "K. 488",
        "composition" : "Piano Concerto No. 23 in a Major, K. 488",
        "isClassical" : true,
        "movementCount" : "3",
        "movementName" : "Allegro",
        "movementNumber" : "1",
        "partName" : "I. Allegro",
        "title" : "Piano Concerto No. 23 in a Major, K. 488: 1. Allegro"
      },
      {
        "classicalCatalog" : "K. 488",
        "composition" : "Piano Concerto No. 23 in a Major, K. 488",
        "isClassical" : true,
        "movementCount" : "3",
        "movementName" : "Adagio",
        "movementNumber" : "2",
        "partName" : "II. Adagio",
        "title" : "Piano Concerto No. 23 in a Major, K. 488: 2. Adagio"
      },
      {
        "classicalCatalog" : "K. 488",
        "composition" : "Piano Concerto No. 23 in a Major, K. 488",
        "isClassical" : true,
        "movementCount" : "3",
        "movementName" : "Allegro Assai",
        "movementNumber" : "3",
        "partName" : "III. Allegro Assai",
        "title" : "Piano Concerto No. 23 in a Major, K. 488: 3. Allegro Assai"
      },
      {
        "classicalCatalog" : "K. 491",
        "composition" : "Piano Concerto No. 24 in C Minor, K. 491",
        "isClassical" : true,
        "movementCount" : "3",
        "movementName" : "Allegro",
        "movementNumber" : "1",
        "partName" : "I. Allegro",
        "title" : "Piano Concerto No. 24 in C Minor, K. 491: 1. Allegro"
      },
      {
        "classicalCatalog" : "K. 491",
        "composition" : "Piano Concerto No. 24 in C Minor, K. 491",
        "isClassical" : true,
        "movementCount" : "3",
        "movementName" : "Larghetto",
        "movementNumber" : "2",
        "partName" : "II. Larghetto",
        "title" : "Piano Concerto No. 24 in C Minor, K. 491: 2. Larghetto"
      },
      {
        "classicalCatalog" : "K. 491",
        "composition" : "Piano Concerto No. 24 in C Minor, K. 491",
        "isClassical" : true,
        "movementCount" : "3",
        "movementName" : "Allegretto",
        "movementNumber" : "3",
        "partName" : "III. Allegretto",
        "title" : "Piano Concerto No. 24 in C Minor, K. 491: 3. Allegretto"
      },
      {
        "classicalCatalog" : "D. 899/3",
        "composition" : "Impromptu for Piano in G Flat Major, D. 899/3 (Op. 90/3)",
        "isClassical" : true,
        "movementCount" : "1",
        "movementNumber" : "1",
        "opus" : "90",
        "title" : "Impromptu for Piano in G Flat Major, D. 899/3 (Op. 90/3)"
      },
      {
        "classicalCatalog" : "D. 899/4",
        "composition" : "Impromptu for Piano in a Flat Major, D. 899/4 (Op. 90/4)",
        "isClassical" : true,
        "movementCount" : "1",
        "movementNumber" : "1",
        "opus" : "90",
        "title" : "Impromptu for Piano in a Flat Major, D. 899/4 (Op. 90/4)"
      }
    ]

The Extract Work and Part from Title action on the resources web page is a good example of how to use this statement.

Containers

Directed Paths