Skip to content
Andrew Myers edited this page Aug 31, 2016 · 13 revisions

Question: When there is technical metadata about a pcdm:File in XML format (e.g., FITS XML), should there be a relationship between the parent pcdm:Object and the technical metadata file?

The emerging LDP implementation pattern is to use different kinds of LDP container for related files to keep or omit the relationship between the parent object and the related files.

hasRelatedFile2

The related files are in an LDP BasicContainer without any predicates specifying a relationship between the parent object and the related files:

Note for Hydra users: Currently the iana:describedby predicate is used to associate a given pcdm:File resource with a single fcr:metadata resource, which in turn contains technical metadata about the binary file. Throughout the Hydra stack, there is a lot of code that is making assumptions that there is only one association using iana:describedby, and that the object of the association is the fcr:metadata resource. Implementing a model that allows a given pcdm:File to be associated with a fcr:metadata resource as well as multiple pcdm:File resources, implies non-trivial code changes throughout the stack.

As of 31 Aug, 2016, there is expected to be more discussion on whether to stick with the model below, or if there is a different way to model related files containing technical metadata. If you are interested in implementing the model below, it's recommended that you first check the "hydra-tech" Google group, and other communication channels, to see if a different solution has been adopted.

</object1> a pcdm:Object;
  ldp:contains </object1/files>, </object1/relatedFiles>;
  pcdm:hasFile </object1/files/file1> .

</object1/files> a ldp:DirectContainer;
  ldp:hasMemberRelation pcdm:hasFile;
  ldp:membershipResource </object1> 
  ldp:contains </object1/files/file1> .

</object1/relatedFiles> a ldp:BasicContainer;
  ldp:contains </object1/relatedFiles/related1> .

</object1/files/file1> a pcdm:File;
  iana:describedby </object1/files/file1/fcr:metadata>,
      </object1/relatedFiles/related1> .

</object1/relatedFiles/related1> a pcdm:File;
  iana:describedby </object1/relatedFiles/related1/fcr:metadata>;
  iana:describes </object1/files/file1> .

Alternative LDP Projection: DirectContainer per File

Instead of manually creating the describes relationship, a DirectContainer could also be used to manage the relationship. This would mean more containers, but fewer interactions:

</object1/files/file1> a pcdm:Object;
  iana:describedby </object1/files/file1/fcr:metadata>,
      </object1/relatedFiles/related1> ;
  pcdm:hasRelatedFilesContainer </object1/relatedFiles1/> .

</object1/relatedFiles1> a ldp:DirectContainer ;
  ldp:membershipResource </object1/files/file1> ; 
  ldp:hasMemberRelation iana:describedby ;   
  ldp:contains </object1/relatedFiles1/related1> .

</object1/relatedFiles1/related1> a pcdm:File;
  iana:describedby </object1/relatedFiles1/related1/fcr:metadata>;
  iana:describes </object1/files/file1> .

The first describedby link for file1 is added by Fedora4 (or other LDP system), and the second is managed by the DirectContainer. It would need the hasRelatedFilesContainer link to discover which DirectContainer was associated with which File, as the container can't be below the File itself.