...
*Note when using online xpath testers, ensure that laves are expressed as xml attributes and not like other xml elements like json-to-xml convertors will do.
Incorrect | Correct | Bookstore XML extract for testing xPath Queries online | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
Queries
Scope of queries
- The assumes scope for all below Queries is one Dataspace and oen Anchor.
- It will be relatively easy to extend the scope to multiple anchors in a later user story.
- There is no need to extend the scope beyond one Dataspace
xpath functions
Slogan | cpsPath | Jira | Notes | Priority / When do we need this? | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | get (list element) by xpath | /bookstore/categories[@code='01'] |
| This is not really a query as code is the key attributes and this xpath is stored with the target fragment | Already implemented | ||||||||
2 | get list element by other attribute | /bookstore/categories[@name='SciFi'] |
| Compare to #1, notice how from a cpsPath perspective it is not clear which is a get and which is a query. The customer might not know either! See issue #1 | Required for E2E Slicing see CPS-200 study | ||||||||
3 | //categories [@name='SciFi'] | Client ignore/does not care/does not know the preceding xpath | Investigate if needed for E2E Slicing. | ||||||||||
4 | //*[@name='Chapters'] | This will return anything with that name, might be useful when working with small models | |||||||||||
5 | /bookstore/categories/books/book[@name='Chapters'] | Not obvious but since /categories is not indexed (no key defined using [@...] notation) it will return a book from any categories | |||||||||||
6 | /bookstore/categories//book[@name=' SciFi']Chapters'] | using // in the middle of a path is like a wildcard for any containers or lists between /categories and /book | |||||||||||
7 | [@id1 = x and @id2 = y] | just for illustration purposes | |||||||||||
8 | [contains()] | just for illustration purposes |
Note 1Note. All cpsPath queries can be fulfilled by just 1 REST endpoint and Java API method (as agreed earlier). We just need to document the capabilities (xpath functions) support by our cpsPath...
Note 2. At the start the cpsPath can probably be examined using regular expression to distinguish between the queries. But at some stage we might need to write a more advanced parsing using tools like Antlr. There might also be existing utilities breaking down xpaths?
Updates
Slogan | Jira | Notes | Priority / When do we need this? | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Replace DataNode(tree) |
| This is powerful update method that can fulfill all below scenarios too. However it is a crude and inefficient for scenario with children. Ada a child at the top of the tree will required the client to re-submit all existing data of the siblings and their descendants. replacing all of them in the DB layer which of course could lead to very lengthy update operations. | Already being implemented. Need to investigate if E2E Slicing requires the 'with descendants' option | ||||||||||
2 | Update Single attribute on single DataNode | Probably required for E2E Slicing | ||||||||||||
3 | Update Multiple attributes on single DataNode | This could a simple extension of the previous method (#2) by instead of providing one key-value pair it could be map of many. Question remains if we ant to Java-API methods, or one. And if just it could be handled by one user story instead, depending on team preference | ||||||||||||
4 | Add Child DataNode | Investigate if needed for E2E Slicing. But seems likely this is needed soon and to address the technical debt of the solution in #1 | ||||||||||||
5 | Add DataNode to List | Investigate if needed for E2E Slicing. But seems likely this is needed soon and to address the technical debt of the solution in #1 | ||||||||||||
6 | Remove DataNode | Assume this will also cover removing DataNode from a list | Investigate if needed for E2E Slicing. But seems likely this is needed soon and to address the technical debt of the solution in #1 | |||||||||||
7 | Add element to Leaf-List | Nice-to-have. From experience in similar project this use-case never was prioritized. It can always be done using #3 or #4 instead. My recommendation is to not consider this until a client specially requests it and argues the need for it. | ||||||||||||
8 | Remove Element from Leaf-List | Nice-to-have. From experience in similar project this use-case never was prioritized. It can always be done using #3 or #4 instead. My recommendation is to not consider this until a client specially requests it and argues the need for it. |
...