Practical guide / XML namespaces
JATS XML namespace errors: why /article returns nothing
A wrong default namespace silently changes the identity of every unprefixed element. The XML remains well formed, but common JATS consumers no longer see article, front, body, or back where they expect them.
By JATS Verify Editorial. Published: 16 August 2026. Updated: 20 August 2026. Sources reviewed: 20 August 2026. Standard reviewed: NISO JATS Version 1.4 (ANSI/NISO Z39.96-2024).
Version documentation URLs such as https://jats.nlm.nih.gov/archiving/1.3/ are not JATS namespace identifiers.
The failure pattern
This root puts all unprefixed descendants in the wrong namespace:
<article xmlns="https://jats.nlm.nih.gov/archiving/1.3/">
<front>...</front>
</article>
A namespace-aware parser reads the root as {https://jats.nlm.nih.gov/archiving/1.3/}article. An XPath such as /article/front returns no match.
What official JATS guidance says
JATS 1.4 does not require a default namespace. If a project intentionally applies a JATS namespace, the official URI is http://jats.nlm.nih.gov.
The safest interchange fix
For an ordinary JATS delivery, remove the default xmlns from article. Keep the namespaces for vocabularies that JATS embeds, including XLink and MathML:
<article
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:mml="http://www.w3.org/1998/Math/MathML">
If your receiving system explicitly requires namespaced JATS, use http://jats.nlm.nih.gov and test every XPath, stylesheet, schema, and API consumer against that choice.
What to test before release
- 01Root identity
Confirm the expanded root name and intended JATS namespace policy.
- 02Ordinary XPath
Verify that the receiving workflow can match
/articleand core metadata paths. - 03Selected schema
Validate the serialized output, not only the in-memory element tree.
- 04Package layer
Check linked assets, cross-references, identifiers, journal rules, and release changes.
JATS Verify finding
JATS Verify checks for incompatible namespace forms as part of its package preflight. The same public check is available through the hosted diagnostic and paid API.
Use the free diagnostic on an existing package, then add the paid API after your generator when you need repeatable release checks.
Check the serialized package
Catch the namespace error before a receiver does.
Check one existing JATS package free. No account, card, or sales call.