A JATS namespace interoperability check.

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.

The path is not the namespace.

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

  1. 01
    Root identity

    Confirm the expanded root name and intended JATS namespace policy.

  2. 02
    Ordinary XPath

    Verify that the receiving workflow can match /article and core metadata paths.

  3. 03
    Selected schema

    Validate the serialized output, not only the in-memory element tree.

  4. 04
    Package 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.

Start free diagnostic