Hi Chris,
Thanks for posting about Semantic Content Packages [1]. I've been a bit slow in getting around to reading it. Here are a few thoughts I had after reading. I hope you take these as an expression of my interest in what you are doing rather than criticisms :-)
- I like how the package metadata is bundled in .scpi so that you do not have to move data around on the file system in order to package it up. This is something some of us at the Library of Congress have talked informally about wanting to change in BagIt. It is also a behavior that developers are already familiar with in version control systems (Git, Mercurial, Subversion, etc). Incidentally, what's the "i" in .scpi for?
- I like how every package must have a .scpi/id which contains a URI for the package. The alternative would be to have to monkey around around in .scp/graph.ttl to figure it out, but that could get messy. Is the statement about ASCII encoding really necessary, can't you just defer to RFC 3986 [2]?
- I like the use of Turtle RDF to describe the packages, since it really opens up the variety of assertions that can be made about the package. I think it also makes it possible to make explicit assertions about the contents of the package itself. This is something BagIt doesn't provide for, other than the ability to make an assertion about the fixity for a file in the package. It also seems to be in line with some of the work being done at CDL [2] in their use of ORE. I wonder if CDL might have some comments about how well the approach has been working so far. As far as RDF goes Turtle is pretty readable--not as readable as ANVL [3], but I guess there has to be some cost to the flexibility.
- It looks like an empty graph.ttl file would be a valid Semantic Content Package? Are there a base set of assertions that need to be made to consider it "valid"? This is one of the real strengths of BagIt IMHO. You don't have a valid bag unless you know" what the contents of the package are, and their checksums. For digital preservation purposes this is really important. Having a baseline understanding of what I can do with an SCP seems really important.
- Why not encourage people to subclass scp:Package and use rdf:type if they need to specialize what type of package they have instead of creating a new type property scp:type? Having two different type predicates for the resource seems awkward. If subclassing (and basic inferencing) isn't desired you could always have multiple rdf:type assertions.
- Did you create PackagePath intentionally instead of leaning on file:// protocol URIs?
- If one were to assert a checksum would it be made on the ByteStream or on the ContentLocation? Do you want to define a predicate for that in SCP or is there one people could use?
- Does it seem useful to be able to create packages whose contents are entirely ResolvableURIs? It doesn't look like scp:inPackage allows this.
- Does it seem reasonable to want a scp:hasBytestream predicate, similar to what ORE has in ore:aggregates and ore:isAggregatedBy?
- If the URI in .scpi/id is a HTTP URI, and it is resolved do you have any thoughts about what would come back? Would it be application/scp? Could it be the contents of .scp/graph.ttl with resolvable Bytestream URIs?
Like I said, I hope my questions above reflect that I think this is valuable work you are doing. It might be instructive to work on a few tools to see how easy it is to start using. Have you started using this scheme at all? I think it might also be useful to sketch out some use cases for SCP. Why would you want SCP instead of BagIt or ORE for example?
//Ed
[1]
http://www.ietf.org/rfc/rfc3986.txt[2]
https://wiki.ucop.edu/download/attachments/50790519/Merritt-object-modeling-latest.pdf