Background on FOLDER AQL

This note contains some examples to define how AQL on Folder structures should work. The most important part is how the CONTAINS function should work in hierarchical folders.

Example 1

{
    "name": "f6",
    "items": [
        "comp_ref:y1"
    ],
    "folders": [
        {
            "name": "f6.1",
            "items": [],
            "folders": [
                {
                    "name": "f6.2",
                    "items": [
                        "comp_ref:x1",
                        "comp_ref:x2"
                    ]
                }
            ]
        }
    ]
}
SELECT f, c
FROM folder f CONTAINS composition c
ORDER BY f/name/value
 -- limit 1;
Resultset
  1. f6, y1

  2. f6, x1

  3. f6, x2

  4. f6.1, x1

  5. f6.1, x2

  6. f6.2, x1

  7. f6.2, x2

Note
Look how each top level folder is repeated and is sorted on folder.name
Note
If you add the LIMIT function it will work on the resultset. Which may or may not give unpredictable results depending on the use-case
 select f from folder f contains composition c where f/items/type = 'COMPOSITION';
Resultset
  1. f6

  2. f6.2

Note
In this example we use type on OBJECT_REF to filter in only those FOLDERS who have a composition references. This reduces the resultset.
select f from folder f contains folder f2 contains composition c;
Resultset
  1. f6

  2. f6.1

select f from folder f contains folder f2 contains folder f3 contains composition c;
Resultset
  1. f6

select f3 from folder f contains folder f2 contains folder f3 contains composition c;
Resultset
  1. f6.2

Example 2

[
    {
        "name": "f6",
        "folders": [
            {
                "name": "f6.1",
                "items": [
                    "folder_ref:f6.2"
                ]
            }
        ]
    },
    {
        "name": "f6.2",
        "items": [
            "comp_ref:x1"
        ]
    }
]
select f from folder f contains composition c;
Resultset
  1. f6.2

select f from folder f contains folder f2 contains composition c;
Resultset

<empty>

select f from folder f contains folder f2 contains folder f3 contains composition c;
Resultset

<empty>

select f3 from folder f contains folder f2 contains folder f3 contains composition c;
Resultset

<empty>

Example 3

[
    {
        "name":"f7",
        "items":["folder_ref:f7.2"]
    },
    {
        "name":"f7.2",
        "items":["folder_ref:f7.3"]
    },
    {
        "name":"f7.3",
        "items":["folder_ref:f7.4"]
    },{
        "name":"f7.4",
        "items":["folder_ref:f7.5"]
    },
    {
        "name":"f7.5",
        "items":["comp_ref:x"]
    }
]
select f from folder f contains composition c;
Resultset
  1. f7.5

select f from folder f contains folder f2 contains composition c;
Resultset

<empty>

select f from folder f contains folder f2 contains folder f3 contains composition c;
Resultset

<empty>

select f3 from folder f contains folder f2 contains folder f3 contains composition c;
Resultset

<empty>

Exampple Section

composition c
{
    section s1
     {
         section s2
         {
             observation o

        }
    }
}
select s from section s contains observation o
Resultset
  1. s1

  2. s2

select o from composition c contains observation o
Resultset
  1. o

Example Periode

folder periode
{
    folder epsiode
    {
       folder clinical_statements
       {
           comp_refA
       }

       folder medical_coding
       {
           comp_refB
       }
    }
}

comp_A
{
    observation O
}


comp_B
{
    evaluation E
}
select c from folder f contains composition c where f/name/value = 'periode'
Resultset
  1. comp_A

  2. comp_B

Appendix A: Other things

select f from folder f where f/name/value = 'kliniske_opplysninger'

select f from folder f contains composition c contains observation o where ...
select c, s from ehr e contains folder f contains composition c contains section s
Resultset
  1. c1, s1

  2. c1, s2

  3. c2, s3