def isBaseClassNXDL(nxdl):
    """
    Is the given NXDL intended for use as a base class?

    The situation is obvious for base classes and application definitions.
    For contributed definitions, deeper analysis is necessary.
    Application definitions define this additional substructure::

      entry/
       definition = nxdl name (such as NXspecdata)

    If any of that structure is missing, report it as a base class.
    """
    if nxdl.category == "base_classes":
        return True
    elif nxdl.category == "applications":
        return False
    elif nxdl.category == "contributed_definitions":
        nxentry = nxdl.groups.get("entry")
        if nxentry is None:
            return True
        definition = nxentry.fields.get("definition")
        return definition is None
    return False