Practical guide / XML namespaces
Why a JATS file can look right and still break every ordinary XPath.
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.
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.3 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 0.1.1 reports the incompatible form as xml.namespace.unexpected. The same check is available in the hosted diagnostic, local CLI, and GitHub Action.
Use the free diagnostic on an existing package, or add the open-source release gate after your generator.
Check the serialized package
Catch the namespace error before a receiver does.
Check one existing JATS package free. No account, card, or sales call.