XMP metadata support in JabRef

Bib(la)TeX information into the PDF metadata

XMP is a standard created by Adobe Systems for storing metadata (data about data) in files. A well known example for metadata are MP3 tags, which can be used to describe artist, album and song name of a MP3 file. Adding metadata to MP3 helps other people to identify the songs correctly independent of file-name and can provide means for software (MP3 players for instance) to sort and group songs.

With XMP support the JabRef team tries to bring the advantages of metadata to the world of reference managers. You can now choose to "Write XMP metadata to PDFs" in the Tools menu of JabRef, which will put all the Bib(la)TeX information into the PDFs. If you then email a PDF to a colleague, they can just drag the file into JabRef and all information that you entered will be available to them.

Usage

To use the XMP-feature in JabRef you can do the following:

  • To import a single annotated PDF-file that contains XMP, select File → Import into... and then choose the filter "XMP-annotated PDF", or drag the file into the main view.

  • To annotate all the PDFs in a given database, select Tools → Write XMP metadata to PDFs.

  • To verify if it worked, you can open the PDF in Adobe Acrobat and select File → Document Properties → Additional Metadata → Advanced. In the tree to the right you should see an entry called "http://purl.org/net/bibteXMP". Note: this works only with Adobe Acrobat, not with Adobe Reader. If you do not have Adobe Acrobat, you can use pdfinfo instead in order to see the XMP metadata. pdfinfo is part of Xpdf tools and Poppler.

BibTeXMP Fileformat

JabRef builds on Dublin Core to encode bibliographic information. That information us embedded in the PDF using the XMP format. Dublin Core itself i) builds on RDF and ii) can be extended with own information. In case BibTeX data cannot be stored using native Dublin Core fields, new fields are used. Basically, all fields and values are turned into nodes of an XML document. Only authors and editors are stored as rdf:Seq-structures, so users of the data can skip the splitting on ands. All strings and crossrefs will be resolved in the data.

The following easy minimal schema is used:

  • The citation key is stored as citationkey.

  • The type of the BibTeX entry is stored as entrytype.

  • author and editor are encoding as rdf:Seqs where the individual authors are represented as rdf:lis.

  • All other fields are saved using their field-name as is.

The following is an example of the mapping

@INPROCEEDINGS{CroAnnHow05,
  author = {Crowston, K. and Annabi, H. and Howison, J. and Masango, C.},
  title = {Effective work practices for floss development: A model and propositions},
  booktitle = {Hawaii International Conference On System Sciences (HICSS)},
  year = {2005},
  owner = {oezbek},
  timestamp = {2006.05.29},
  url = {http://james.howison.name/publications}
}

will be transformed into

<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?><x:xmpmeta xmlns:x="adobe:ns:meta/">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
      <dc:creator>
        <rdf:Seq>
          <rdf:li>K. Crowston</rdf:li>
          <rdf:li>H. Annabi</rdf:li>
          <rdf:li>J. Howison</rdf:li>
          <rdf:li>C. Masango</rdf:li>
        </rdf:Seq>
      </dc:creator>
      <dc:relation>
        <rdf:Bag>
          <rdf:li>bibtex/booktitle/Hawaii International Conference On System Sciences (HICSS)</rdf:li>
          <rdf:li>bibtex/citationkey/CroAnnHow05</rdf:li>
          <rdf:li>bibtex/file/:CroAnnHow05.pdf:PDF</rdf:li>
          <rdf:li>bibtex/owner/fdarboux</rdf:li>
          <rdf:li>bibtex/timestamp/2020-11-22</rdf:li>
          <rdf:li>bibtex/url/http://james.howison.name/publications</rdf:li>
        </rdf:Bag>
      </dc:relation>
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">Effective work practices for floss development: A model and propositions</rdf:li>
        </rdf:Alt>
      </dc:title>
      <dc:date>
        <rdf:Seq>
          <rdf:li>2005</rdf:li>
        </rdf:Seq>
      </dc:date>
      <dc:format>application/pdf</dc:format>
      <dc:type>
        <rdf:Bag>
          <rdf:li>InProceedings</rdf:li>
        </rdf:Bag>
      </dc:type>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta><?xpacket end="w"?>

Be aware of the following caveats if you are trying to parse BibTeXMP:

  • In RDF attribute-value pairs can also be expressed as nodes and vice versa.

Some links about XMP and annotating PDFs