Thanks to visit codestin.com
Credit goes to github.com

Skip to content

withanage/doi2jats

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Citation Generator

CLI for generating JATS XML citations from DOIs using multiple academic data providers.

CI/CD Pipeline

Basic Usage (Single DOI)

php doi2jats.php <DOI>

Example:

php doi2jats.php 10.30430/gjae.2023.0350

Multiple DOIs

php doi2jats.php <DOI1> <DOI2> <DOI3> ...

Example:

php doi2jats.php 10.30430/gjae.2023.0350 10.52825/bis.v1i.42

Advanced Options

# Verbose output with processing details
php doi2jats.php -v 10.30430/gjae.2023.0350 10.52825/bis.v1i.42

# Ref-List format (all citations in ref-list)
php doi2jats.php -f reflist 10.30430/gjae.2023.0350 10.52825/bis.v1i.42

# Back  format with numbering
php doi2jats.php --format back 10.30430/gjae.2023.0350 10.52825/bis.v1i.42

# Verbose + reflist format
php doi2jats.php -v -f reflist 10.30430/gjae.2023.0350 10.52825/bis.v1i.42

Installation

Using Composer (Recommended)

composer require citation-generator/doi2jats

php vendor/citation-generator/doi2jats/doi2jats.php -h

Using github

git clone https://github.com/withanage/doi2jats/
cd doi2jats
composer install

Using github without Composer

The application includes a fallback PSR-4 autoloader, so it works without Composer.

Usage

Command-Line Options

Option Description
-v, --verbose Show detailed processing information
-f, --format FORMAT Output format: individual, reflist, back
-h, --help Show help message

Output Formats

Individual (Default)

Each citation as separate XML documents:

<!-- DOI: 10.30430/gjae.2023.0350 -->
<?xml version="1.0" encoding="UTF-8"?>
<element-citation publication-type="journal">
  ...
</element-citation>

<!-- DOI: 10.52825/bis.v1i.42 -->
<?xml version="1.0" encoding="UTF-8"?>
<element-citation publication-type="journal">
  ...
</element-citation>

Reflist

All citations wrapped in a reference list:

<?xml version="1.0" encoding="UTF-8"?>
<ref-list>
  <ref id="ref1">
    <element-citation publication-type="journal">
      ...
    </element-citation>
  </ref>
  <ref id="ref2">
    <element-citation publication-type="journal">
      ...
    </element-citation>
  </ref>
</ref-list>

Back

Full back format with labels:

<?xml version="1.0" encoding="UTF-8"?>
<back>
  <ref-list>
    <title>References</title>
    <ref id="bib1">
      <label>1.</label>
      <element-citation publication-type="journal">
        ...
      </element-citation>
    </ref>
    <ref id="bib2">
      <label>2.</label>
      <element-citation publication-type="journal">
        ...
      </element-citation>
    </ref>
  </ref-list>
</back>

Error Handling

The application handles various error scenarios:

  • Invalid DOI format: Shows specific error for malformed DOIs
  • Network failures: handles API timeouts and connection issues

Example with Errors

$ php doi2jats.php -v 10.30430/gjae.2023.0350 invalid-doi 10.52825/bis.v1i.42
Processing 3 DOI(s) in 'individual' format...
Processing DOI 1/3: 10.30430/gjae.2023.0350
Processing DOI 2/3: invalid-doi
  Error: Invalid DOI format: invalid-doi
Processing DOI 3/3: 10.52825/bis.v1i.42

<!-- DOI: 10.30430/gjae.2023.0350 -->
<?xml version="1.0" encoding="UTF-8"?>
<element-citation publication-type="journal">
  ...
</element-citation>

<!-- ERROR for DOI: invalid-doi - Invalid DOI format: invalid-doi -->

<!-- DOI: 10.52825/bis.v1i.42 -->
<?xml version="1.0" encoding="UTF-8"?>
<element-citation publication-type="journal">
  ...
</element-citation>

=== SUMMARY ===
Total DOIs processed: 3
Successful: 2
Failed: 1

Failed DOIs:
  - invalid-doi: Invalid DOI format: invalid-doi

Development

  • PKP advanced knowledge for code reading and writing required.
  • Please note that the tool doesn't include method documentation.

Testing

composer test

Adding New Providers

  1. Create a new class implementing CitationProviderInterface
  2. Extend AbstractCitationProvider for common functionality
  3. Add it to the providers array in Application

Requirements

  • PHP 8.1 or higher
  • ext-dom
  • ext-json

Contribution