Skip to content

Creating a container

rasta edited this page Mar 30, 2023 · 19 revisions

Creating an empty container

curl -X POST -u username:password "https://services.phaidra-sandbox.univie.ac.at/api/container/create" -F "metadata=@cont_metadata.json"

{"alerts":[],"pid":"o:1","status":200}

Container metadata example: cont_metadata.json

{ 
  "metadata": { 
    "json-ld": {
        "dcterms:type": [
          {
            "@type": "skos:Concept",
            "skos:exactMatch": [
              "https://pid.phaidra.org/vocabulary/8MY0-BQDQ"
            ],
            "skos:prefLabel": [
              {
                "@language": "eng",
                "@value": "container"
              }
            ]
          }
        ],
        "edm:hasType": [
         {
            "@type": "skos:Concept",
            "skos:prefLabel": [
              {
                "@value": "interview",
                "@language": "eng"
              }
            ],
            "skos:exactMatch": [
              "https://pid.phaidra.org/vocabulary/8KGA-CH97"
            ]
          }
        ],
        "dce:title": [
          {
            "@type": "bf:Title",
            "bf:mainTitle": [
              {
                "@value": "test container",
                "@language": "eng"
              }
            ]
          }
        ]
      }
    }
  }

Container metadata should be interpreted as parent metadata record for the members, ie. all container metadata apply for members too unless re-defined on member level.

Creating a member (see Creating a simple object)

curl -X POST -u username:password "https://services.phaidra-sandbox.univie.ac.at/api/document/create" -F "metadata=@foo_metadata.json" -F "file=@test.wav" -F "mimetype=audio/wav"

{"alerts":[],"pid":"o:2","status":200}

Member metadata example: foo_metadata.json

{
  "metadata": {
    "json-ld": {
      "dcterms:type": [
        {
          "@type": "skos:Concept",
          "skos:exactMatch": [
            "https://pid.phaidra.org/vocabulary/8YB5-1M0J"
          ],
          "skos:prefLabel": [
            {
              "@language": "eng",
              "@value": "sound"
            }
          ]
        }
      ],
      "dce:title": [
        {
          "@type": "bf:Title",
          "bf:mainTitle": [
            {
              "@value": "My title",
              "@language": "eng"
            }
          ]
        }
      ],
      "schema:duration": [
        "PT1M30S"
      ],
      "ebucore:filename": [
        "interview.wav"
      ],
      "ebucore:hasMimeType": [
        "audio/wav"
      ],
      "edm:rights": [
        "http://rightsstatements.org/vocab/InC/1.0/"
      ]
    }
  }
}

Add container member to container

curl -X POST -u username:password "https://services.phaidra-sandbox.univie.ac.at/api/object/o:1/relationship/add" -F "predicate=http://pcdm.org/models#hasMember" -F "object=info:fedora/o:2"

{"alerts":[{"msg":"true","type":"success"}],"status":200}

Creating a container with members

curl -X POST -u username:password "https://services.phaidra-sandbox.univie.ac.at/api/container/create" -F "metadata=@cont_metadata.json" -F "member_foo=@test.wav" -F "member_bar=@test1.wav"

In this case, the metadata do not have the structure metadata->json-ld->{predicates}

but

metadata->json-ld->container->{predicates}

metadata->json-ld->member_foo->{predicates}

metadata->json-ld->member_bar->{predicaes}

etc.

Example:

{ 
  "metadata": { 
    "json-ld": {
      "container": {
        "dcterms:type": [
          {
            "@type": "skos:Concept",
            "skos:exactMatch": [
              "https://pid.phaidra.org/vocabulary/8MY0-BQDQ"
            ],
            "skos:prefLabel": [
              {
                "@language": "eng",
                "@value": "container"
              }
            ]
          }
        ],
        "edm:hasType": [
         {
          "@type": "skos:Concept",
          "skos:prefLabel": [
            {
              "@value": "interview",
              "@language": "eng"
            }
          ],
          "skos:exactMatch": [
            "https://pid.phaidra.org/vocabulary/8KGA-CH97"
          ]
         }
        ],
        "dce:title": [
          {
            "@type": "bf:Title",
            "bf:mainTitle": [
              {
                "@value": "test container",
                "@language": "eng"
              }
            ]
          }
        ]
      },
      "member_foo": {
        "dcterms:type": [
          {
            "@type": "skos:Concept",
            "skos:exactMatch": [
              "https://pid.phaidra.org/vocabulary/8YB5-1M0J"
            ],
            "skos:prefLabel": [
              {
                "@language": "eng",
                "@value": "sound"
              }
            ]
          }
        ],
        "dce:title": [
          {
            "@type": "bf:Title",
            "bf:mainTitle": [
              {
                "@value": "My title",
                "@language": "eng"
              }
            ]
          }
        ],
        "schema:duration": [
          "PT1M30S"
        ],
        "ebucore:filename": [
          "test.wav"
        ],
        "ebucore:hasMimeType": [
          "audio/wav"
        ],
        "edm:rights": [
          "http://rightsstatements.org/vocab/InC/1.0/"
        ]
      },
      "member_bar": {
        "dcterms:type": [
          {
            "@type": "skos:Concept",
            "skos:exactMatch": [
              "https://pid.phaidra.org/vocabulary/8YB5-1M0J"
            ],
            "skos:prefLabel": [
              {
                "@language": "eng",
                "@value": "sound"
              }
            ]
          }
        ],
        "dce:title": [
          {
            "@type": "bf:Title",
            "bf:mainTitle": [
              {
                "@value": "track 2",
                "@language": "deu"
              }
            ]
          }
        ],
        "schema:duration": [
          "PT1M30S"
        ],
        "ebucore:filename": [
          "test2.wav"
        ],
        "ebucore:hasMimeType": [
          "audio/wav"
        ],
        "edm:rights": [
          "http://rightsstatements.org/vocab/InC/1.0/"
        ]
      }
    }
  } 
}

Relationships

You can add "relationships" to "metadata" where you can define a specific relationship between the member (referred to as member_<key>) and the container (referred to as container), eg

"relationships": [ 
    { 
        "s": "member_foo", 
        "p": "http://phaidra.org/XML/V1.0/relations#isThumbnailFor", 
        "o": "container"
    } 
]

The http://pcdm.org/models#hasMember relationship is added automatically for members.

Clone this wiki locally