CSL processor ignores URL field if DOI field exists, regardless of content
In the current behavior of the CSL processor (as used in Zotero and citeproc-js), the presence of a DOI field in an item completely suppresses the output of the URL field — even if the DOI field is empty and only URL is populated.
This means:
* As soon as the DOI variable exists for a given item type, the processor will never access the URL field, even if the CSL style explicitly checks for URL, and even if DOI is unset or blank.
* This happens regardless of how the CSL is written; the logic is overridden by the processor's internal preference for DOI over URL based solely on field presence, not content.
This behavior breaks the principle of style-defined logic in CSL, and makes it impossible for users or style authors to use URL reliably in types that also happen to include a DOI field in Zotero.
In my view, this is not a style error, but a design flaw in the processor: CSL styles should be able to decide when and how to output DOI and URL based on actual field content, not just schema structure.
Would it be possible to change this behavior so that the presence of the DOI field does not automatically suppress URL, unless DOI is actually populated?
This means:
* As soon as the DOI variable exists for a given item type, the processor will never access the URL field, even if the CSL style explicitly checks for URL, and even if DOI is unset or blank.
* This happens regardless of how the CSL is written; the logic is overridden by the processor's internal preference for DOI over URL based solely on field presence, not content.
This behavior breaks the principle of style-defined logic in CSL, and makes it impossible for users or style authors to use URL reliably in types that also happen to include a DOI field in Zotero.
In my view, this is not a style error, but a design flaw in the processor: CSL styles should be able to decide when and how to output DOI and URL based on actual field content, not just schema structure.
Would it be possible to change this behavior so that the presence of the DOI field does not automatically suppress URL, unless DOI is actually populated?