Tridion Docs 15: Find Topics not being referenced (orphan) using Web Services API

We need to create a report of all Topics that are not referenced in any other DocumentObject.

Is there a DocumentObject's metadata field that keeps track of references to itself?

Is there a way to use API25.Search.PerformSearch to query for such metadata field?

Thanks for your assistance.

emoji
  • Hi Efrén and anybody else that might read this.

    The system is build up on "logical linking" which most of you see through the LogicalId - typically a GUID. An xml file - which is attached to some LogicalId, Version and Language hierarchy - contains link statements to the LogicalId level of other objects.

    When you submit/save/checkin an xml file, the language level will have some system metadata updated to identity to which other objects this xml file links. You can find them under Xml Settings > IWrite Plugin configuration. The important link fields for you are

    • FISHLINKS is trully about incorporating content. So if an OASIS DITA Map holds <topicref href="GUID-A"> then this metadata field will hold GUID-A. Where GUID-A is typically about Maps, Topics, Library Topics or Other/Template type
    • FISHIMAGELINKS is simiar but this one holds GUIDs of Image object types.

    So to answer your question, per logical identifier (like GUID-A) you need to query if it exists in any FISHLINKS or FISHIMAGELINKS entries. If that returns nothing, than it is an orphan.

    If you want more object type and field type information, please try ISHRemote cmdlet: Get-IshTypeFieldDefinition | Out-GridView ... what you can also derive here under header CRUST (Create-Read-Update-Search-Tagging) is that all LINK fields are not part of Search, so they are not part of the FullTextIndex and can hence not be queried under API25.Search. So you'll have to go over API25.DocumentObj.Find (or ISHRemote Find-ISHDocumentObj)
    Screenshot of Trados Studio's Get-IshTypeFieldDefinition Out-GridView showing a list of LINKS with fields such as ISHType, Level, Name, DataType, DataSource, and CRUST with descriptions for each.

    Hope this gets you going,
    Dave

    emoji


    Generated Image Alt-Text
    [edited by: Trados AI at 6:53 AM (GMT 0) on 5 Mar 2024]
  • Hey Dave, thanks for your answer. For each topic, we want to know if it is used by any other object in the repository. Does the FISHLINKS Field give us the GUIDs of objects that reference the topic?

    If not, is there a metadata field that contains the backreferences of a given Topic? I want something like the "Where used > Used by" menu in Organized Space.

    emoji
  • Every object has system metadata (FISHLINKS...) on who it references. There is no reverse arrow where every object knows where it is being referenced. Hence why I wrote the below, and why the WhereUsed report works per-object (for a selected GUID you see who uses it).

    So to answer your question, per logical identifier (like GUID-A) you need to query if it exists in any FISHLINKS or FISHIMAGELINKS entries. If that returns nothing, than it is an orphan.

    emoji
  • Hey Efrén,

    I would like to add one remark regarding the not referenced statement / orphan indication from Dave.

    Currently you are interested in Topics which are not referenced by any other DocumentObject (eg. Ditamap). This will be checked by a FIND operation using an xmlMetadataFilter using the fields proposed by Dave.

    However this will not give you a valid list of orphan topics as some of you topics might be used (only) as library topics for Conreffing and/or Publication resources.

    So in order to be sure that it is really not reference by any other object you would need to check the 'FISHFRAGMENTLINKS' field for the GUID as well and you would need to check the Publication objects for existance of the GUID in the FISHRESOURCES field.

    If all of these queries are returning empty results, you clearly have an orphaned object.

    my two cents,

    Raf

    emoji
  • Thanks Raf, good additions! And thinking about it, if two "orphans" link to each other, are they then still "orphans"? :) 

    emoji