PL5 Searching doesn't work properly for all keywords in an hierarchy - only for "Selected" keywords

Does this mean that the selection UI behaviour will change?

The tree view

At the moment, selecting a leaf node, in the tree view, automatically selects the full hierarchy, but you can still deselect any of the parent nodes.

The keywords text field

At the moment, typing in a hierarchy such as Animal > Mammal > Bear > Black Bear only selects the Black Bear leaf node.

Are you planning on unifying that behaviour, so that both inputs do the same?

This cannot be a “preference” as, to omit all keywords mentioned in the hierarchies effectively disables searching in any other software that relies on the dc:subject tag.

This might sound fine but it limits which other DAMs can interact with images keyworded in PL.

Agreed they are not “up to date” but, still they form a strong, well-defined basis for universally communicable metadata.

Whether we use lr:HierarchicalSubject or mwg-kw:Keywords, which is a structure that contains any hierarchies, is irrelevant. The principle is that all keywords mentioned in any hierarchies (in either of those tags) should be flattened into dc:subject.

Not doing so means that it excludes any other DAM, that doesn’t use the lr:hierarchicalSubject tag as a basis for searching, can never be compatible with PL.

Please don’t do that. Several of us have spent a great deal of time and effort trying to work out why PL doesn’t play nicely with other software, going right back to the beta for PL5. So far it seems that the DxO stance is “we don’t care about compatibility, as long as it works within PL5”. If this really is the attitude, it is going to put off an awful lot of people from using the PL DAM if they already use an alternative. I, for one, will not be either using or recommending the PL5 DAM, as my own software is 100% reliable and compatible and I really don’t want PL5 messing up any of my metadata.

Speaking of not wanting PL5 to alter my keywords, even as a side effect of writing other metadata, Can we please have a means of totally disabling any PL5 influence on how keywords get written out to both original and exported files?

2 Likes

This is one of the strangest statements I have received on the subject of DAM since the PL5 beta. Many here have pointed out all the bugs and non-standard implementations very often over the last year.
I haven’t posted anything about it since the end of the beta, as I felt the topic was in good hands with Joanna and all the other contributors.
In the press, the introduction of the DAM was generally seen positively, even if some of the editors only tested superficially. But if nothing is improved, I can already predict that this will not reflect well on DXO.

Special thanks to all the members are spending a lot of time in testing, writing long articles and so on :kissing_heart:

1 Like

The following is an attempt to Pseudo-Code the logic for creating the ‘dc’ and ‘hr’ keywords from the entries in the DxPL database @Joanna. It is pesudo Pseudo code, i.e. a made up version so that I can try to understand the logic behind using the database and populating the various fields.

The sad thing is how easy it is to vary the logic to accommodate the options rather than implementing a “one size fits all” that risks being a “one size that pleases no-one”!

Such a wasted opportunity @Musashi!

There is also at least one error in my comparison table for Capture One so I will attempt to check the entries but my Wife has Covid after a coach holiday last week and I am likely to go down with it sooner rather than later and increased brain fade will result (comments like “it can’t fade much more are not welcome” true or not)!?

This post should be allowed to continue, I think it has almost run its course but does not need to be closed @Musashi

Access 'Items'
*
** Locate any keywords for an 'Items' entry via the 'ItemsKeyword' structure
*
** A keyword can fall into one of the following categories:-
** A keyword found from 'ItemsKeywords', i.e. an assigned keyword
** which may be:-
**   A  simple keyword, designated by a 'ParentId' of NULL
**   An hierarchical keyword, the "leaf" of an hierarchical keyword (which may be an element of a larger hierarchical keyword)
** and then via the 'Keywords' Table accessed using the 'KeywordId' from 'ItemsKeywords'
**   An hierarchical keyword found by a 'ParentId' pointer from another keyword and containing a 'ParentId'
**   An hierarchical keyword found by a 'ParentId' pointer from another keyword and containing a 'ParentId' = NULL - i.e. the head of the hierachical keyword

* 
ACCESS 'ItemsKeywords' VIA the 'ItemId' value from 'Items'
*
** Start reconstructing any hierarchical keywords and populating the 'dc' and 'hr' fields appropriately
*
*
** P R O C E S S   E A C H   A S S I G N E D   K E Y W O R D 
*
*
FOR EACH entry in 'ItemsKeyword' associated with the 'ItemId' THEN
*
** Taking each ASSIGNED keyword in turn (currently EVERY item in 'ItemsKeywords')
*
** Locate the entry in the 'Keywords' Table
*
  ACCESS 'Keywords' using the 'KeywordId' value from 'ItemsKeywords' (NOTFOUND = 'Unexpected ERROR')
*
** Determine keyword type by it's context, i.e. by the 'ParentId' setting etc.
*
  IF  'ParentId' = 'NULL' THEN
*
**  P R O C E S S   A   S I M P L E   K E Y W O R D 
*
    ADD 'Value' from 'Keywords' TO 'dc Keywords'
*
**  Consider whether it is correct to include that keyword in the 'hr' fields as DxPL and others do currently?
*
    (Unconditional):
      ADD 'Value' from 'Keywords' TO 'hr Keywords'   <--------------------@Joanna
    (end Unconditional)
   
  ELSE
*
**  'ParentId' Not NULL so part of an hierarchical keyword (in this case the "leaf" keyword
*
**  P R O C E S S   A   L E A F   H I E R A R C H I C A L   K E Y W O R D   E L E M E N T 
*
**  Start a new hierarchical keyword reconstruction from last to first, e.g.                 |D
*
    SET 'Hierachical Keyword' = 'Value' from 'Keywords'
    ADD |           TO front of 'Hierarchical keyword' 

**  This is the "leaf" keyword in the hierarchy, e.g. D in A|B|C|D (A>B>C>D) or an assigned sub-element hierarchy
**  The leaf will arguably ALWAYS be considered for the 'dc' keywords even for DxO PL5.2.0 option
*
    (Unconditional):
      ADD 'Value' from 'Keywords' TO 'dc Keywords'
    (end Unconditional)
[*
**  Optionally add 'Value' from 'Keywords' to 'hr' Keywords'!?  <------@Joanna
*
   (Conditional):
      ADD ''Value' from 'Keywords' TO 'hr Keywords'
   (End-Conditional)]

*
**  Using the 'ParentId' access the linked keyword in the 'Keywords' Table 
*
    FOR each entry in 'Keywords' Table found using the 'ParentId' from a 'Keywords' Table entry
    
      ACCESS 'Keywords' VIA 'ParentId' of 'Keywords' Table entry
      
      IF 'ParentId' = NULL Then
*
**      This is the head keyword of the hierarchical keyword
*
**      P R O C E S S   H E A D   O F   A N   H I E R A C H I C A L    K E Y W O R D 
*
**      Add keyword to the front of a reconstruction of the hierarchical keyword from leaf to top, i.e. in front of the previous keyword
*
        ADD 'Value' from 'Keywords' TO front of 'Hierarchical keyword'
*
**      Reconstruction of hierarchical keyword is now complete and the head node should be added to the 'hr' keywords <-----@Joanna
*
        (Unconditional):
          ADD 'Hierarchical keyword' TO 'hr Keywords'
        (end Unconditional)
*
*       Optionally add the keyword to the 'dc' keys this is different between pre PL5.2.0 & post PL5.2.0
*
        (Conditional):
           ADD 'Value' from 'Keywords' TO 'dc Keywords'
        (End Conditional)
*
**      Add Keyword to 'hr Keywords', typically done with the head of an hierarchical keyword  <------@Joanna
*
        (Unconditional):
          ADD 'Value' from 'Keywords' TO 'hr Keywords'
        (end Unconditional)
      ELSE
*
**      This is an itermediate hierarchical keyword
*
**      P R O C E S S   I N T E R M E D I A T E   H I E R A R C H I C A L   K E Y W O R D 
*
        ADD 'Value' from 'Keywords' TO front of 'Hierarchical keyword'
        ADD |                       TO front of 'Hierarchical keyword'        
*
*       Optionally add the keyword to the 'dc' keys - this is different between pre PL5.2.0 & post PL5.2.0
*
        (Conditional):
           ADD 'Value' from 'Keywords' TO 'dc Keys'
        (End Conditional)
[*
**      Add 'Value' from 'Keywords' to 'hr' Keywords', typically done with the head of an hierarchical keyword
**      but not necessarily with other keywords
*
        (Conditional):
          ADD 'Value' from 'Keywords' TO 'hr Keywords'                                                           <------@Joanna
        (end Conditional)]
      END-IF
    REPEAT-FOR UNTIL 'ParentId = NULL'
  END-IF
REPEAT-FOR UNTIL 'NOTFOUND' IN 'ItemsKeywords'
*
** Arguably the 'dc' keywords & 'hr' keywords need duplicate entries resolved (de-duping), I believe             <-------@Joanna
*

Wrong :- Pseudo code V02.txt (5.0 KB)

Hopefully better!?:- Pseudo code V03.txt (5.1 KB)

The [ ] are me being “over-enthusiastic” and including simple keyword elements where they are not required, i.e. keyword elements from an ‘hr’ keyword in the ‘hr’ fields when only the head of the hierarchy should be included but I included the places where that could be done and then enclosed the items with the […].

The biggest issue is all the packages (except Photo mechanic and non-hr aware products) include simple keywords in the ‘hr’ fields.

However, not doing that would mean that my Scenario 4 test, i.e. “animal”, “mammal”, “bear”, “animal|mammal|bear” input, would have the same keyword assignments as a simple "animal|mammal|bear’ input! @Joanna ?

The problem with the current DxPL handling of simple keywords, i.e. putting them into the ‘hr’ fields, is the result if the ‘dc’ entries are deleted by a non-hierarchical product (Zoner, ExifPro, ACDSee etc.) which will leave the (orphaned) ‘hr’ entries intact.

PL5 treats the remaining (orphaned) ‘hr’ entries as acceptable and will simply repopulate the ‘dc’ fields on output.

Now you see it, now you don’t, now you do again!

PS:-

The (Conditional): would be an IF <option - x > SET THEN … or IF <option - x > SET THEN …ELSE …END-IF but I wanted to keep the Pseudo code a little cleaner for review purposes.

The (Unconditional): could all be made (Conditional): but use internal option settings to control the behaviour!?

Errata: There was an error throughput V02, I used ‘KeywordId’ instead of ‘Value’ from ‘Keywords’ on every occasion - sorry!

Dear testers,

Thank you again for your deep involvement and feedback on this topic which is indeed a rare and valuable thing.

All these information has given us a deep insight into how this feature can be used and some specific and (let’s say “advanced”) needs.

We’re sorry that we cannot give an answer to all your questions for now and implement the suggested adaptations, but we’ll keep track of this and be assured they’ll serve as a strong basis for future improvements.

Currently, our main efforts are bent toward more problematic technical debts and issues, besides all the new features that we’re preparing and anticipating for major versions to come.

It’s always a difficult tradeoff between what we want to achieve, and what can humanly and technically be done.
We know that some implementations and decisions made in the past years can seem off to you now, but there were reasons for such tracks at that time, whether good or bad (and you also know that what becomes bad ideas at the end, always start as good and enthusiastic ones).
That’s also where the discussion with all of you are of great value and challenge us to make better product, improving the product part by part.

It’s a long process, that’s also why some features are not evolving as fast as we’d all like, and we’re already pleased to have answered a big chunk of your initial needs.

We’ll keep on working in that direction, so let’s keep the adventure going! :slight_smile:

Best regards,
Captain PO