validacion
Common JATS XML Errors and How to Fix Them
- jats
- errors
- validation
JATS validation reveals error patterns that repeat across journals of all sizes and disciplines. Knowing these patterns speeds correction and prevents the same problems from reappearing issue after issue. This guide collects the most frequent errors we detect when validating thousands of articles, with concrete examples and immediately applicable solutions.
For detailed diagnostics of each error type, see our error guides library.
1. Element in disallowed position
Symptom: The validator reports "element not allowed" or "invalid content model".
Cause: A child element appears where the JATS schema does not permit it. Classic example: placing <table-wrap> directly inside <abstract> or a loose <p> outside any <sec> in the body.
Incorrect:
<body>
<p>Paragraph without a containing section.</p>
</body>
Correct:
<body>
<sec sec-type="intro">
<title>Introduction</title>
<p>Paragraph inside a valid section.</p>
</sec>
</body>
See the dedicated guide on element not allowed for more cases.
2. Missing required attribute
Symptom: "Required attribute missing" on elements such as <article>, <contrib>, or <ref>.
Cause: JATS requires specific attributes. The most forgotten is article-type on <article> and id on references, figures, and tables.
Incorrect:
<article dtd-version="1.3">
Correct:
<article article-type="research-article" dtd-version="1.3">
Consult missing required attribute for a full checklist.
3. Duplicate IDs
Symptom: Broken cross-references or uniqueness errors in advanced validators.
Cause: Two elements share the same id value. This frequently occurs when copying reference or figure blocks from a previous article.
Solution: Implement an ID convention (ref1, ref2, fig1, tbl1) and verify uniqueness before final validation.
4. Unlinked affiliations
Symptom: Authors with <aff> defined but no <xref ref-type="aff"> in the contrib.
Cause: Separation between affiliation declaration in <aff id="aff1"> and linking in each author. SciELO and PMC reject articles with "orphan" authors.
<contrib contrib-type="author">
<name><surname>Perez</surname><given-names>Luis</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
</contrib>
5. Unstructured free-text references
Symptom: <mixed-citation> with incomplete data or no parseable elements.
Cause: Automatic conversion from Word that does not separate author, title, and source.
Solution: Migrate to <element-citation> with all subelements. For bulk conversion, use reference parsing tools and manually review ambiguous cases. See malformed references.
6. Malformed DOI
Symptom: The DOI includes the https://doi.org/ prefix inside the element value, or contains spaces.
Incorrect:
<article-id pub-id-type="doi">https://doi.org/10.1234/example</article-id>
Correct:
<article-id pub-id-type="doi">10.1234/example</article-id>
7. Unescaped special characters
Symptom: Malformed XML or corrupted characters in names and titles.
Cause: Incorrect encoding (Latin-1 instead of UTF-8) or unescaped &, <, > characters.
Solution: Save all files in UTF-8. Escape & as & in text that is not markup.
8. Invalid xlink links
Symptom: Figures without images, inaccessible supplementary material.
Cause: Incorrect relative paths in <graphic xlink:href="..."> or xlink namespace not declared.
Verify the namespace is on the root element:
<article xmlns:xlink="http://www.w3.org/1999/xlink" ...>
9. Abstract without language attribute
Symptom: Warning or error in SciELO SPS validators.
Cause: <abstract> without xml:lang when the article has multilingual metadata.
<abstract xml:lang="en">
<p>Abstract in English...</p>
</abstract>
<trans-abstract xml:lang="es">
<p>Resumen en español...</p>
</trans-abstract>
10. Inconsistent dates
Symptom: Rejection in SciELO quality control.
Cause: Acceptance date before receipt, or publication date before acceptance.
Review editorial cycle logic before tagging <history>.
11. article-type incompatible with content
Symptom: Article marked as research-article without methods and results sections.
Cause: Using a generic type for all articles regardless of nature.
Use precise types: review-article, case-report, editorial, letter.
12. Tables without semantic structure
Symptom: Tables that do not render correctly in derived HTML.
Cause: Using HTML <table> without JATS <table-wrap> wrapper, or cells without <th> in headers.
<table-wrap id="tbl1">
<label>Table 1</label>
<caption><title>Table description</title></caption>
<table>
<thead>
<tr><th>Column A</th><th>Column B</th></tr>
</thead>
<tbody>
<tr><td>Data 1</td><td>Data 2</td></tr>
</tbody>
</table>
</table-wrap>
13. Missing or incorrect license
Symptom: Error in SciELO validation for open access journals.
Cause: Omitted <permissions> block or Creative Commons URI that does not match journal policy.
14. ORCID with incorrect format
Symptom: ORCID not recognized by harvesters.
Cause: ORCID stored without full URL or with incorrect hyphens.
Correct:
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0001-2345-6789</contrib-id>
15. Validation only at the end of the process
Symptom: Accumulation of errors in complete batches.
Cause: Validating the entire issue once, days before SciELO delivery.
Solution: Validate each article as it enters production. Use the JATS validator continuously, not as a final emergency step.
Systematic correction strategy
- Classify errors by type (structure, metadata, references, multimedia).
- Prioritize blocking errors over warnings.
- Fix in template errors that repeat to prevent recurrence.
- Document internal tagging conventions for your journal.
- Revalidate after each correction round.
Additional resources
- Detailed error guides — diagnosis and solution by error type
- JATS validator — free online validation
- Editorial validation service — expert review beyond schema checks
- NISO JATS 1.3 — official standard reference
Conclusion
JATS errors are not a sign of technical incompetence: they are the predictable result of converting documents designed for human reading (Word, PDF) into structured data for machines. The difference between journals that publish without friction and those facing recurring returns lies in detecting and correcting these patterns early and systematically.
Start by validating your next article in the JATS validator and explore the error guides to deepen each category.
Related articles
- How to Validate a JATS Article Before Submitting to SciELO
Practical steps to validate JATS XML against SciELO SPS rules, fix common errors, and avoid rejections during the indexing process.
- What Is JATS XML and Why It Matters for Scholarly Journals
An introductory guide to the JATS XML standard: structure, metadata, indexing benefits, and editorial production for academic articles.