update on RDF schema, contributors

Just a quick FYI:

The most difficult thing to model in citaiton metadata are
contributions (author, editor, etc). Both RDF and RDBMSes are really
good at these sort of relations in general, but because of a
particular quirk of citations – namely that they are typically
ordered lists – this actually becomes somewhat difficult. You cannot
simply link a person record directly to a reference source, but you
need to model – through a table or class – the relation.

So after a fair bit of discussion with some RDF experrts, I settled on
a solution that is very similar to a solution I was using in a Rail
prototype I was playing with. Basically, visually:

Reference [author] --> Contribution [agent] --> Person|Organization

To wit, the “long” form in RDF:

<author>
  <Contribution>
    <agent>
      <Person>
        <givenname>John</givenname>
        <familyname>Doe</familyname>
      </Person>
    </agent>
    <position>1</position>
  </Contribution>
</author>
<author>
  <Contribution>
    <agent>
      <Person>
        <givenname>Jane</givenname>
        <familyname>Smith</familyname>
      </Person>
    </agent>
    <position>2</position>
  </Contribution>
</author>

… and the “short” (RDF-normalized) form:

<author>
  <Contribution>
    <agent rdf:resource="tag:person:x"/>
    <position>1</position>
  </Contribution>
</author>
<author>
  <Contribution>
    <agent rdf:resource="tag:person:y"/>
    <position>2</position>
  </Contribution>
</author>

I realize it’s a little verbose, but a) it’s about the same as MS’s
new schema, and b) it’s really the only way to do it in a relational
way. It’s also easier to convert to/from MODS as well.

Note, this isn’t a standard RDF way to do it, but most people I’ve
talked to (including Ben Lund at Nature) think it’s the best way.

I just updated the RELAX NG schema to reflect this.

Bruce