Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The following details were used to compare and analyze the current CPS core output to NCMP passthrough operation output

Model

 bookstore.yang
Databookstore.json
CPS core endpoint/v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/node
NCMP Passthrough operation/v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running


Scenario 1: XPath is pointing to root i.e. '/'

CPS = '/'


NCMP Passthrough operation outputCPS Core output
Response


Code Block
collapsetrue
{
    "stores:bookstore": {
        "bookstore-name": "Chapters",
        "categories": [
            {
                "code": "02",
                "books": [
                    {
                        "title": "The Golden Compass",
                        "price": "699",
                        "pub_year": 1995,
                        "lang": "en",
                        "authors": [
                            "Philip Pullman"
                        ]
                    }
                ],
                "name": "kids"
            },
            {
                "code": "01",
                "books": [
                    {
                        "title": "Feersum Endjinn",
                        "price": "895",
                        "pub_year": 1994,
                        "lang": "en",
                        "authors": [
                            "Iain M. Banks"
                        ]
                    },
                    {
                        "title": "Far Horizons",
                        "price": "1099",
                        "pub_year": 1999,
                        "lang": "en",
                        "authors": [
                            "david Brin",
                            "Ursula K. Le Guin",
                            "Rober Silverberg",
                            "Orson Scott Card",
                            "Greg Bear",
                            "Joe Haldeman",
                            "Dan Simmons"
                        ]
                    }
                ],
                "name": "SciFi"
            }
        ]
    }
}



Code Block
collapsetrue
{
  "bookstore": {
    "bookstore-name": "Chapters",
    "categories": [
      {
        "code": "01",
        "name": "SciFi",
        "books": [
          {
            "lang": "en",
            "price": 895,
            "title": "Feersum Endjinn",
            "authors": [
              "Iain M. Banks"
            ],
            "pub_year": 1994
          },
          {
            "lang": "en",
            "price": 1099,
            "title": "Far Horizons",
            "authors": [
              "david Brin",
              "Ursula K. Le Guin",
              "Rober Silverberg",
              "Orson Scott Card",
              "Greg Bear",
              "Joe Haldeman",
              "Dan Simmons"
            ],
            "pub_year": 1999
          }
        ]
      },
      {
        "code": "02",
        "name": "kids",
        "books": [
          {
            "lang": "en",
            "price": 699,
            "title": "The Golden Compass",
            "authors": [
              "Philip Pullman"
            ],
            "pub_year": 1995
          }
        ]
      }
    ]
  }
}


Scenario 2: Container XPath i.e '/bookstore'

CPS = '/bookstore'

NCMP = '/ncmp/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore'


NCMP Passthrough operation outputCPS Core output
Response


Code Block
collapsetrue



Code Block
collapsetrue
{
  "bookstore": {
    "bookstore-name": "Chapters",
    "categories": [
      {
        "code": "01",
        "name": "SciFi",
        "books": [
          {
            "lang": "en",
            "price": 1099,
            "title": "Far Horizons",
            "authors": [
              "david Brin",
              "Ursula K. Le Guin",
              "Rober Silverberg",
              "Orson Scott Card",
              "Greg Bear",
              "Joe Haldeman",
              "Dan Simmons"
            ],
            "pub_year": 1999
          },
          {
            "lang": "en",
            "price": 895,
            "title": "Feersum Endjinn",
            "authors": [
              "Iain M. Banks"
            ],
            "pub_year": 1994
          }
        ]
      },
      {
        "code": "02",
        "name": "kids",
        "books": [
          {
            "lang": "en",
            "price": 699,
            "title": "The Golden Compass",
            "authors": [
              "Philip Pullman"
            ],
            "pub_year": 1995
          }
        ]
      }
    ]
  }
}


Scenario 3: List attributes XPath

CPS = '/bookstore/categories[@code='02']'

NCMP = '/ncmp/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=02'


NCMP Passthrough outputCPS Core output
Response


Code Block
collapsetrue
{
    "stores:categories": [
        {
            "code": "02",
            "books": [
                {
                    "title": "The Golden Compass",
                    "price": "699",
                    "pub_year": 1995,
                    "lang": "en",
                    "authors": [
                        "Philip Pullman"
                    ]
                }
            ],
            "name": "kids"
        }
    ]
}



Code Block
collapsetrue
{
  "categories": {
    "code": "02",
    "name": "kids",
    "books": [
      {
        "lang": "en",
        "price": 699,
        "title": "The Golden Compass",
        "authors": [
          "Philip Pullman"
        ],
        "pub_year": 1995
      }
    ]
  }
}



Modifying CPS Core output

...

DataNodeBuilder class was modified to add the method 'withModuleNamewithModuleNamePrefix()' which adds a module name attribute to the DataNode object being built.

When the buildFromAttributes() method is called it then calls the added method addModulePrefixToXpath(moduleName). 

 addModulePrefixToXpath(moduleName) contains the following logic

...

collapsetrue

...

it sets the DataNode attribute 'moduleNamePrefix'.

When the response is being made from methods such as GetDataNode and QueryNodes it calls DataMapUtils class method toDataMapWithIdentifier().

toDataMapIdentifier() method calls on getNodeIdentifierWithPrefix() method to ensure that the prefix is only added to the top node being requested.


Results of modifying cps core output through DataNodeBuilder and DataMapUtils

XpathResponse
/


Code Block
collapsetrue
{
  "stores:bookstore": {
    "bookstore-name": "Chapters",
    "categories": [
      {
        "code": "02",
        "name": "kids",
        "books": [
          {
            "lang": "en",
            "price": 699,
            "title": "The Golden Compass",
            "authors": [
              "Philip Pullman"
            ],
            "pub_year": 1995
          }
        ]
      },
      {
        "code": "01",
        "name": "SciFi",
        "books": [
          {
            "lang": "en",
            "price": 1099,
            "title": "Far Horizons",
            "authors": [
              "david Brin",
              "Ursula K. Le Guin",
              "Rober Silverberg",
              "Orson Scott Card",
              "Greg Bear",
              "Joe Haldeman",
              "Dan Simmons"
            ],
            "pub_year": 1999
          },
          {
            "lang": "en",
            "price": 895,
            "title": "Feersum Endjinn",
            "authors": [
              "Iain M. Banks"
            ],
            "pub_year": 1994
          }
        ]
      }
    ]
  }
}


/bookstore/categories[@code='02']


Code Block
collapsetrue
{
  "stores:categories": {
    "code": "02",
    "name": "kids",
    "books": [
      {
        "lang": "en",
        "price": 699,
        "title": "The Golden Compass",
        "authors": [
          "Philip Pullman"
        ],
        "pub_year": 1995
      }
    ]
  }
}



The DataNode built for the above tests will now contain a modified xPath containing the module name just like as follows:


Example module namestores
Xpath parameterExpected modified
XPath set as data node XPath attribute
node identifier
/bookstore
/
'stores:bookstore'
/bookstore/categories[@code='02']
/bookstore/
'stores:categories
[@code='02
'
]


Open Issues

IssueDescriptionResolution
Child The child is in a different module

If the child is in a different module should it have a prefix


Output The output starts with the non-root element

If the output starts with a non-root element should it have a prefix?


Backward incompatibility

Discuss backward incompatibility with stakeholders

    1. WiPro (E2E Slicing)
    2. Ericsson
    3. Bell (Bruno has confirmed that they are not impacted ?)

Can YangTools parse it?

  • if YangTools can parse it then this is not incompatible
As tested , yang tools currently used are able to parse the data
Is this LEGAL YANG data