Adding and removing attributes and entities with APPEND and DELETE in updateContext

We have seen how to use updateContext with APPEND action type to create new entities. In addition, APPEND can be used to add a new attribute after entity creation. Let's illustrate this with an example.

We start creating a simple entity 'E1' with one attribute named 'A':

  (curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF

Now, in order to append a new attribute (let's name it 'B') we use updateContext APPEND with an entityId matching 'E1':

  (curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
  {
  "contextElements": [
      {
      "type": "T",
      "isPattern": "false",
      "id": "E1",
      "attributes": [
          {
          "name": "A",
          "type": "TA",
          "value": "1"
          }
      ]
      }
  ],
  "updateAction": "APPEND"
  }
  EOF

Now we can check with a query to that entity that both attributes A and B are there:

 curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' | python -mjson.tool
  {
  "contextElement": {
      "attributes": [
      {
          "name": "B",
          "type": "TB",
          "value": "2"
      },
      {
          "name": "A",
          "type": "TA",
          "value": "1"
      }
      ],
      "id": "E1",
      "isPattern": "false",
      "type": ""
  },
  "statusCode": {
      "code": "200",
      "reasonPhrase": "OK"
  }
  }

We can also remove attributes in a similar way, using the DELETE action type. For example, to remove attribute 'A' we will use (note the empty contextValue element):

 (curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
  {
  "contextElements": [
      {
      "type": "T",
      "isPattern": "false",
      "id": "E1",
      "attributes": [
          {
          "name": "A",
          "type": "TA",
          "value": ""
          }
      ]
      }
  ],
  "updateAction": "DELETE"
  }
  EOF

Now, a query to the entity shows attribute B:

  curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' | python -mjson.tool
  {
  "contextElement": {
      "attributes": [
      {
          "name": "B",
          "type": "TB",
          "value": "2"
      }
      ],
      "id": "E1",
      "isPattern": "false",
      "type": ""
  },
  "statusCode": {
      "code": "200",
      "reasonPhrase": "OK"
  }
  }

You can also use convenience operations with POST and DELETE verbs to add and delete attributes. Try the following:

Add a new attribute 'C' and 'D':

 (curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
  {
  "attributes": [
      {
      "name": "C",
      "type": "TC",
      "value": "3"
      },
      {
      "name": "D",
      "type": "TD",
      "value": "4"
      }
  ]
  }
  EOF

Remove attribute 'B':

  curl localhost:1026/v1/contextEntities/E1/attribute/B -s -S --header 'Content-Type: application/json' -X DELETE --header 'Accept: application/json' | python -mjson.tool

Query entity (should see 'C' and 'D', but not 'B'):

  curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' | python -mjson.tool
  {
  "contextElement": {
      "attributes": [
      {
          "name": "C",
          "type": "TC",
          "value": "3"
      },
      {
          "name": "D",
          "type": "TD",
          "value": "4"
      }
      ],
      "id": "E1",
      "isPattern": "false",
      "type": ""
  },
  "statusCode": {
      "code": "200",
      "reasonPhrase": "OK"
  }
  }

Deleting entities

Apart from deleting individual attributes from a given entity (see previous section on that topic), you can also delete an entire entity, including all its attributes with their corresponding metadata. In order to do so, the updateContext operation is used, with DELETE as actionType and with an empty attributeList, as in the following example:

  (curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF
  {
  "contextElements": [
      {
      "type": "T",
      "isPattern": "false",
      "id": "E1"
      }
  ],
  "updateAction": "DELETE"
  }
  EOF

You can also use the following equivalent convenience operation:

  curl localhost:1026/v1/contextEntities/E1 -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' -X DELETE