From 74a47154f3bce495d9f58a300a860d750ae309f1 Mon Sep 17 00:00:00 2001 From: danielhanrahan Date: Wed, 28 Jun 2023 12:55:20 +0100 Subject: Apostrophe handling in CpsPathParser Apostrophe is not currently handled correctly, and having apostrophe in the xpath will lead to various errors. For example, normalizing this xpath works: /path[@name="I'm quoted"] -> /path[@name='I\'m quoted'] However the resulting xpath will throw a PathParsingException if parsed! (Thus path normalization is not idempotent.) - Use '' for escaping apostrophe in single quoted leaf value, to comply with XPath standard (and use "" for escaping in "). - Use Liquibase to make existing data comply with new rules. - Leaf values in data leaves are now unescaped, e.g. "I'm quoted" - Quoting is now consistent for leaf/text/contains conditions. Issue-ID: CPS-1769 Signed-off-by: danielhanrahan Change-Id: Iafc287f738254d7f99706c6bc548091c0ecd5aa0 --- docs/cps-path.rst | 3 +-- docs/release-notes.rst | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'docs') diff --git a/docs/cps-path.rst b/docs/cps-path.rst index 796eb7f429..6611789544 100644 --- a/docs/cps-path.rst +++ b/docs/cps-path.rst @@ -177,6 +177,7 @@ General Notes ============= - String values must be wrapped in quotation marks ``"`` (U+0022) or apostrophes ``'`` (U+0027). +- Quotations marks and apostrophes can be escaped by doubling them in their respective quotes, for example ``'CPS ''Path'' Query' -> CPS 'Path' Query`` - String comparisons are case sensitive. Query Syntax @@ -247,7 +248,6 @@ leaf-conditions - The key should be supplied with correct data type for it to be queried from DB. In the last example above the attribute code is of type Integer so the cps query will not work if the value is passed as string. eg: ``//categories[@code="1"]`` or ``//categories[@code='1']`` will not work because the key attribute code is treated a string. - - Having '[' token in any index in any list will have a negative impact on this function. **Notes** - For performance reasons it does not make sense to query using key leaf as attribute. If the key value is known it is better to execute a get request with the complete xpath. @@ -272,7 +272,6 @@ The text()-condition can be added to any CPS path query. - Only string and integer values are supported, boolean and float values are not supported. - Since CPS cannot return individual leaves it will always return the container with all its leaves. Ancestor-axis can be used to specify a parent higher up the tree. - When querying a leaf value (instead of leaf-list) it is better, more performant to use a text value condition use @ as described above. - - Having '[' token in any index in any list will have a negative impact on this function. contains()-condition -------------------- diff --git a/docs/release-notes.rst b/docs/release-notes.rst index f56b34a9f5..25f6d22ac0 100755 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -42,6 +42,7 @@ Bug Fixes Features -------- + - `CPS-1760 `_ Improve handling of special characters in Cps Paths Version: 3.3.4 ============== -- cgit 1.2.3-korg