Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  
  @prefix dc: <http://purl.org/dc/elements/1.1/> .
  <>
    dc:title "Important Academic Research Paper" ;
    # Don't doAvoid the following
    dc:creator (<http://example.com/author/Quinn>  #no
                <http://example.com/author/Alice>  #no
                <http://example.com/author/Bob>) . #no

That example creates a bunch of blank nodes, which then get mangled going into Fedora. Let's not do that.

Instead, hereHere's possibly the simplest a very simple alternative formation which still gets the job done. We use hash-URIs instead of blank nodes.

...

In addition to being Fedora-friendly, this formulation is arguably better from a representational standpoint: anybody iterating the triples can query for the paper by author without having to jump through rdf:list hijinx. Of course, those consumers that care about the ordering would need to parse the number out of the hash part of each URI and sort by that. For plenty of people that's good enough.

What if you wanted to represent ordering as a separate number? Here's a more complex version that accomplishes that; the hash URIs can be anything, and the ordering is stored as a separate triple:

  @prefix dc: <http://purl.org/dc/elements/1.1/> .
  @prefix owl: <http://www.w3.org/2002/07/owl#> .
  @prefix schema: <https://schema.org/> .
  <>
    dc:title "Test title" ;
    dc:creator <#xyz>, <#abc>, <#123> .
  <#xyz> owl:sameAs <http://example.com/author/Quinn>; schema:Order 1 .
  <#abc> owl:sameAs <http://example.com/author/Alice>; schema:Order 2 .
  <#123> owl:sameAs <http://example.com/author/Bob>  ; schema:Order 3 .

If you prefer, you could go with a PCDM-style proxy ordering approach. This generates the most triples of any approach we've considered, but for some tool chains it makes good sense.

  @prefix dc: <http://purl.org/dc/elements/1.1/> .
  @prefix iana: <http://www.iana.org/assignments/relation/> .
  @prefix ore: <http://www.openarchives.org/ore/1.0/datamodel#> .
  <>
    dc:title "Test title" ;
    dc:creator <#creators> .
  <#creators> a ore:Aggregation;
              iana:first <#xyz>;
              iana:last <#123> .
  <#xyz> ore:proxyFor <http://example.com/author/Quinn>; 
         ore:proxyIn <#creators>;
         iana:next <#abc> .
  <#abc> ore:proxyFor <http://example.com/author/Alice>; 
         ore:proxyIn <#creators>;
         iana:prev <#xyz> ;
         iana:next <#123> .
  <#123> ore:proxyFor <http://example.com/author/Bob>; 
         ore:proxyIn <#creators>;
         iana:prev <#abc> .