README updated for new communication with libyang
diff --git a/src/README b/src/README
index 7e3c45a..fb5d8d9 100644
--- a/src/README
+++ b/src/README
@@ -1,192 +1,1063 @@
-How To Setup Apache Server
---------------------------
-- mod_netconf compilation requires apache2-devel and libjson-devel packages.
+# How To Setup Service
+
+- netopeerguid compilation requires libjson-devel, libnetconf-devel, and libyang packages.
 
 - run following commands in this directory
+```
 $ make
-# make install
+$ make install
+```
+- netopeerguid runs as a service daemon. It listens on the UNIX socket (/var/run/netopeerguid.sock) for communication with frontend and on TCP socket 8080 for notifications over WebSocket. Start the service by
 
-- Apache module should be installed by now, the following line is added into
-server's configuration:
-LoadModule netconf_module                 /usr/lib64/apache2/mod_netconf.so
-
-- Start Apache
-
-- mod_netconf runs as the same user as Apache. It listens on the UNIX socket
-(/var/run/mod_netconf.sock) for communication with frontend and on TCP socket 8080
-for notifications over WebSocket.
+```
+$ service netopeerguid.rc start
+```
 
 If there is any problem with connection to the UNIX socket, please check file permissions.
 
-Alternatively, there is a possibility to run binary 'webgui-backend'. It is a standalone
-program independent on Apache. However, it still uses libapr1 etc.
-
-List of dependencies
---------------------
+## List of dependencies
 
 * json-c
-* libapr-1
-* libapr-util-1
 * libnetconf
-* libxml-2.0
-* httpd
+* libyang
 
 (with development packages)
 
 Optionally: libwebsockets
 
+# netopeerguid Message Format
 
-mod_netconf Message Format
---------------------------
+UNIX socket (with default path /tmp/netopeerguid.sock) is used for communication with netopeerguid. Messages are formated using JSON and encoded using
 
-UNIX socket (with default path /tmp/mod_netconf.sock) is used for communication
-with mod_netconf daemon. Messages are formated using JSON and encoded using
-Chunked Framing Mechanism described in RFC6242 (http://tools.ietf.org/html/rfc6242#section-4.2)
-with the following content.
-Client is free to send multiple requests when the communication socket
-to the mod_netconf daemon is opened.
+Chunked Framing Mechanism described in RFC6242 (http://tools.ietf.org/html/rfc6242#section-4.2) with the following content.
 
-Replies
-~~~~~~~
-1) OK
-key: type (int), value: 0
+Client is free to send multiple requests when the communication socket to the netopeerguid is opened.
 
-Optional (for request type 3 - create NETCONF connection):
-key: session (string), value: 40 unique characters of session identifier
+## Data types:
 
-2) DATA
-key: type (int), value: 1
-key: data (string)
+sJSON: string representation of a JSON object
 
-3) ERROR
-key: type (int), value: 2
-key: error-message (string)
+SID: generated unique session identifier (unsigned integer starting with 1)
+
+### Replies
+
+Replies are in the format:
+```
+{
+    "<SID#1>": {
+        <reply>
+    },
+    "<SID#2>": {
+        <reply>
+    },
+    …
+    "<SID#last>": {
+        <reply>
+    }
+}
+```
+Reply format is defined below.
+
+#### Reply
+
+##### 1) OK
+* key: type (int), value: 0
+
+##### 2) DATA
+
+* key: type (int), value: 1
+* key: data (sJSON)
+
+##### 3) ERROR
+
+* key: type (int), value: 2
+* key: error-message (string)
 
 Optional:
-key: error-tag (string)
-key: error-type (string)
-key: error-severity (string)
-key: error-app-tag (string)
-key: error-path (string)
-key: bad-attribute (string)
-key: bad-element (string)
-key: bad-namespace (string)
-key: session-id (string)
 
-4) INFO
-key: type (int), value: 3
-key: sid (string), value: session ID
-key: version (string), value: NETCONF protocol version
-key: host (string), value: hostname of the NETCONF server
-key: port (string), value: port of the NETCONF server
-key: user (string), value: username of the user holding the NETCONF session
-key: capabilities (array of strings), value: list of supported capabilities
+* key: error-tag (string)
+* key: error-type (string)
+* key: error-severity (string)
+* key: error-app-tag (string)
+* key: error-path (string)
+* key: bad-attribute (string)
+* key: bad-element (string)
+* key: bad-namespace (string)
+* key: session-id (int)
 
-Requests
-~~~~~~~~
-1) Request to create NETCONF session (connect)
-key: type (int), value: 4
-key: user (string)
-key: pass (string), value: plain text password
+##### 4) INFO
+
+* key: type (int), value: 3
+* key: sid (int), value: session ID
+* key: version (string), value: NETCONF protocol version
+* key: host (string), value: hostname of the NETCONF server
+* key: port (string), value: port of the NETCONF server
+* key: user (string), value: username of the user holding the NETCONF session
+* key: capabilities (array of strings), value: list of supported capabilities
+
+Example reply to connect:
+
+```
+{
+    "<new-SID>": {
+        "type": 0
+    }
+}
+```
+
+#### Requests
+
+##### 1) Request to create NETCONF session (connect)
+
+* key: type (int), value: 4
+* key: user (string)
 
 Optional:
-key: host (string), "localhost" if not specified
-key: port (string), "830" if not specified
 
-2) Request to close NETCONF session (disconnect)
-key: type (int), value: 5
-key: session (string), value: unique session identifier
+* key: host (string), "localhost" if not specified
+* key: port (string), "830" if not specified
+* key: pass (string), value: plain text password, mandatory if "privatekey" is not set
+* key: privatekey (string), value: filesystem path to the private key, if set, "pass" parameter s optional and changes into the pass for this private key
 
-3) NETCONF <get>
-key: type (int), value: 6
-key: session (string), value: unique session identifier
+##### 2) Request to close NETCONF session (disconnect)
+
+* key: type (int), value: 5
+* key: sessions (array of ints), value: array of SIDs
+
+##### 3) NETCONF <get> (returns merged data)
+
+* key: type (int), value: 6
+* key: sessions (array of ints), value: array of SIDs
+* key: strict (bool), value: whether return error on unknown data
 
 Optional:
-key: filter (string), value: xml subtree filter
 
-4) NETCONF <get-config>
-key: type (int), value: 7
-key: session (string), value: unique session identifier
-key: source (string), value: running|startup|candidate
+* key: filter (string), value: xml subtree filter
+
+##### 4) NETCONF <get-config> (returns array of responses merged with schema)
+
+* key: type (int), value: 7
+* key: sessions (array of ints), value: array of SIDs
+* key: source (string), value: running|startup|candidate
+* key: strict (bool), value: whether return error on unknown data
 
 Optional:
-key: filter (string), value: xml subtree filter
 
-5) NETCONF <edit-config>
-key: type (int), value: 8
-key: session (string), value: unique session identifier
-key: target (string), value: running|startup|candidate
-key: config (string), value: editing configuration data according to NETCONF RFC
+* key: filter (string), value: xml subtree filter
+
+##### 5) NETCONF <edit-config>
+
+* key: type (int), value: 8
+* key: sessions (array of ints), value: array of SIDs
+* key: target (string), value: running|startup|candidate
+* key: configs (array of sJSON, with the same order as sessions), value: array of edit onfiguration data according to NETCONF RFC for each session
 
 Optional:
-key: source (string), value: config|url, default value: config
-key: default-operation (string), value: merge|replace|none
-key: error-option (string), value: stop-on-error|continue-on-error|rollback-on-error 
-key: uri-source (string), required when "source" is "url", value: uri
-key: test-option (string), value: notset|testset|set|test, default value: testset
 
-6) NETCONF <copy-config>
-key: type (int), value: 9
-key: session (string), value: unique session identifier
-key: source (string), value: running|startup|candidate|url
-key: target (string), value: running|startup|candidate|url
-Optional, required when "url" is used:
-key: uri-source (string), required when "source" is "url", value: uri
-key: uri-target (string), required when "target" is "url", value: uri
+* key: source (string), value: config|url, default value: config
+* key: default-operation (string), value: merge|replace|none
+* key: error-option (string), value: stop-on-error|continue-on-error|rollback-on-error 
+* key: uri-source (string), required when "source" is "url", value: uri
+* key: test-option (string), value: notset|testset|set|test, default value: testset
 
+##### 6) NETCONF <copy-config>
 
-Alternating:
-key: source (string), value: running|startup|candidate
-key: config (string), value: new complete configuration data, if source not specified
+* key: type (int), value: 9
+* key: sessions (array of ints), value: array of SIDs
+* key: source (string), value: running|startup|candidate|url|config
+* key: target (string), value: running|startup|candidate|url
 
-7) NETCONF <delete-config>
-key: type (int), value: 10
-key: session (string), value: unique session identifier
-key: target (string), value: running|startup|candidate
+Optional:
 
-8) NETCONF <lock>
-key: type (int), value: 11
-key: session (string), value: unique session identifier
-key: target (string), value: running|startup|candidate
+* key: uri-source (string), required when "source" is "url", value: uri
+* key: uri-target (string), required when "target" is "url", value: uri
+* key: configs (array of sJSON, with the same order as sessions), required when "source" is config”, value: array of new complete configuration data for each session,
 
-9) NETCONF <unlock>
-key: type (int), value: 12
-key: session (string), value: unique session identifier
-key: target (string), value: running|startup|candidate
+##### 7) NETCONF <delete-config>
 
-10) NETCONF <kill-session>
-key: type (int), value: 13
-key: session (string), value: unique session identifier
-key: session-id (string), value: ID of the session to kill
+* key: type (int), value: 10
+* key: sessions (array of ints), value: array of SIDs
+* key: target (string), value: running|startup|candidate|url
 
-11) Provide information about NETCONF session
-key: type (int), value: 14
-key: session (string), value: unique session identifier
+Optional:
 
-12) Perform generic operation not included in base NETCONF
-key: type (int), value: 15
-key: session (string), value: unique session identifier
-key: content (string), value: XML data as content of the NETCONF's <rpc> envelope
+* key: url (string), value: target URL
 
-13) get-schema
-key: type (int), value: 16
-key: session (string), value: unique session identifier
-key: identifier (string), value: identifier of schema
+##### 8) NETCONF <lock>
 
-14) reloadhello Update hello message of NETCONF session
-key: type (int), value: 17
-key: session (string), value: unique session identifier
+* key: type (int), value: 11
+* key: sessions (array of ints), value: array of SIDs
+* key: target (string), value: running|startup|candidate
 
-15) notif_history Provide list of notifications from past.
-key: type (int), value: 18
-key: session (string), value: unique session identifier
-key: from (int64), value: start time in history
-key: to (int64), value: end time
+##### 9) NETCONF <unlock>
 
-16) validate Validate datastore or url
-key: type (int), value: 19
-key: session (string), value: unique session identifier
-key: target (string), value: running|startup|candidate|url
+* key: type (int), value: 12
+* key: sessions (array of ints), value: array of SIDs
+* key: target (string), value: running|startup|candidate
+
+##### 10) NETCONF <kill-session>
+
+* key: type (int), value: 13
+* key: sessions (array of ints), value: array of SIDs
+* key: session-id (int), value: SID of the session to kill
+
+##### 11) Provide information about NETCONF session
+
+* key: type (int), value: 14
+* key: sessions (array of ints), value: array of SIDs
+
+##### 12) Perform generic operation not included in base NETCONF
+
+* key: type (int), value: 15
+* key: sessions (array of ints), value: array of SIDs
+* key: contents (array of sJSON with same index order as sessions array), value: array of sJSON ata as content of the NETCONF's <rpc> envelope
+
+##### 13) get-schema
+
+* key: type (int), value: 16
+* key: sessions (array of ints), value: array of SIDs
+* key: identifiers (array of strings with same index order as sessions array), value: array of chema identifiers
+
+Optional:
+
+* key: format (string), value: format of the schema (yin or yang)
+
+##### 14) reloadhello Update hello message of NETCONF session
+
+* key: type (int), value: 17
+* key: sessions (array of ints), value: array of SIDs
+
+##### 15) notif_history Provide list of notifications from past.
+
+* key: type (int), value: 18
+* key: sessions (array of ints), value: array of SIDs
+* key: from (int64), value: start time in history
+* key: to (int64), value: end time
+
+##### 16) validate Validate datastore or url
+
+* key: type (int), value: 19
+* key: sessions (array of ints), value: array of SIDs
+* key: target (string), value: running|startup|candidate|url
+
 Required when target is "url":
-key: url (string), value: URL of datastore to validate
+
+* key: url (string), value: URL of datastore to validate
+
+#### Enumeration of Message type (libnetconf)
+
+```
+	/* Enumeration of Message type (taken from mod_netconf.c) */
+
+	const REPLY_OK				= 0;
+	const REPLY_DATA			= 1;
+	const REPLY_ERROR			= 2;
+	const REPLY_INFO			= 3;
+	const MSG_CONNECT			= 4;
+	const MSG_DISCONNECT		= 5;
+	const MSG_GET 				= 6;
+	const MSG_GETCONFIG			= 7;
+	const MSG_EDITCONFIG		= 8;
+	const MSG_COPYCONFIG		= 9;
+	const MSG_DELETECONFIG		= 10;
+	const MSG_LOCK 				= 11;
+	const MSG_UNLOCK			= 12;
+	const MSG_KILL				= 13;
+	const MSG_INFO				= 14;
+	const MSG_GENERIC			= 15;
+	const MSG_GETSCHEMA			= 16;
+	const MSG_RELOADHELLO		= 17;
+	const MSG_NTF_GETHISTORY	= 18;
+	const MSG_VALIDATE			= 19;
+	
+	/* Enumeration of Message type - New for libyang */
+	const SCH_QUERY				= 100;
+	const SCH_MERGE				= 101;
+```
+
+#### 1) Query schema node by XPATH
+
+* key: type (int), value: 100
+* key: sessions (array of ints), value: array of SIDs
+* key: filters (array of strings with same index order as sessions), value: array of XPath (with "prefix" = module name) values of target node in schema (start with ‘/’) or module names
+
+Optional:
+
+* key: load_children(boolean, default = false), value: if set to true, children schema information will be loaded too (blue part in example 1). Otherwise only value "$@name": {'children': [...]} will be loaded.
+
+##### 1. Example response for "/ietf-interfaces:interfaces":
+
+(partialy based on https://tools.ietf.org/html/draft-ietf-netmod-yang-json-05#appendix-A)
+```
+{
+	"$@ietf-interfaces:interfaces": {
+		"eltype": "leaf",
+		"config": "false",
+		"type": "enumeration",
+		"enumval": [int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, string],
+		"description": "The data type of the parameters argument.,
+		"mandatory": "false",
+		"iskey": "false",
+		"children": [interface, interface-state]
+	},
+
+"ietf-interfaces:interfaces": {
+		"$@interface": {
+			"eltype": "list",
+			"config": "true",
+			"type": "enumeration",
+			"iskey": "false"
+		},
+		"$@interface-state": { ... }
+	}
+}
+```
+
+##### 2. Example response for "/ietf-interfaces:interfaces/interface":
+```
+{
+	"$@interface": {
+		"eltype": "list",
+		"config": "true",
+		"type": "enumeration",
+		"iskey": "false"
+	}
+}
+```
+
+##### 3. Example response for "ietf-interfaces" without load_children:
+```
+{
+	"$@@ietf-interfaces": {
+		"yang-version": “1.0”,
+		"namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces",
+		"prefix": “if”,
+		"imports": [
+			{
+				"name": “ietf-yang-types”,
+				"prefix": “yang”
+			}
+		],
+		"organization": "IETF NETMOD (NETCONF Data Modeling Language) …”,
+		"contact": “WG Web:   <http://tools.ietf.org/wg/netmod/>...”,
+		"description": "This module contains a collection of YANG definitions…”,
+		"revision": "2014-05-08"
+	}
+}
+```
+
+#### 2) Merge given XML configuration with schema
+
+* key: type (int), value: 101
+* key: sessions (array of ints), value: array of SIDs
+* key: configurations (array of sJSON with same index order as sessions array), value: array of clean sJSON configurations without schema information
+
+## Merged format for schema
+
+Each node of <get> or <get-config> request will be "merged" with schema in following scenario:
+
+##### 1) each information from schema will be added as sibling of node as an attribute defined by **$@node_name**:
+
+Example:
+```
+{
+	"$@node_name": {
+		"eltype": "list",
+		"config": true,
+		"type": "enumeration",
+		"iskey": false
+	}
+}
+```
+
+##### 2) if node has some children defined in schema, these children will be defined as children array:
+
+Example:
+```
+{
+	"$@node_name": {
+		"children": ["interface", "interface-state"]
+	}
+}
+```
+
+##### 3) if some attribute is reference to some user defined type, referenced value should be added too as JSON object - same result as defined in SCH_QUERY:
+
+Example:
+```
+{
+	"$@interface": {
+		"eltype": "list",
+		"config": "true",
+		"type": "enumeration",
+		"iskey": "false",
+	},
+
+	"interface": [
+		{
+		"$@type": {
+			"typedef": {
+				// same result as SCH_QUERY for this typedef
+				"type": "uint8",
+				"range": "0 .. 100",
+				"description": "Percentage"
+			}
+		},
+		"type": "iana-if-type:ethernetCsmacd"
+		}
+	]
+}
+```
+
+##### 4) if some node is enumeration, available values will be defined as array
+
+Example:
+```
+{
+	"$@node_name": {
+		"enumval": [int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, string]
+	}	
+}
+```
+
+##### 5) choice - case 
+
+	Example based on https://tools.ietf.org/html/rfc6020#section-7.9
+```
+{
+	"$@transfer": {
+		"eltype": "container",
+		"config": "true",
+		"choice": ["how"]
+	},
+	"transfer": {
+		"$@how": {
+			"eltype": "choice",
+			"default": "interval",
+			"cases": ["interval", "daily", "manual"]
+		},
+		"how": {
+			"$@interval": {
+				"eltype": "case",
+				"children": ["interval"]
+			},
+			"$@daily": {
+				"eltype": "case",
+				"children": ["daily", "time-of-day"]
+			}
+			"$@manual": {
+				"eltype": "case",
+				"children": ["manual"]
+			}
+		},
+		"$@interval": {
+			"eltype": "leaf",
+			"type": "uint16",
+			"default": "30",
+			"units": "minutes"
+		},
+		"$@daily": {
+			"eltype": "leaf",
+			"type": "empty"
+		},
+		"$@time-of-day": {
+			"eltype": "leaf",
+			"type": "string",
+			"default": "1am",
+			"units": "24-hour-clock"
+		},
+		"$@manual": {
+			"eltype": "leaf",
+			"type": "string"
+		}
+	}
+}
+```
+
+## Complete merged JSON example:
+```
+{
+	"$@ietf-interfaces:interfaces": {
+		"eltype": "leaf",
+		"config": "false",
+		"type": "enumeration",
+		"enumval": [int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, string],
+		"description": "The data type of the parameters argument.,
+		"mandatory": "false",
+		"iskey": "false",
+		"children": ["interface", "interface-state"]
+	},
+	"ietf-interfaces:interfaces": {	
+		"$@interface": {
+			"eltype": "list",
+			"config": "true",
+			"type": "enumeration",
+			"iskey": "false",
+		},
+		"interface": [
+			{
+				"$@name": {
+					"eltype": “leaf”,
+					"config": "true",
+					"type": "string"
+				},
+				"name": "eth0",
+				"$@type": {
+					"eltype": “leaf”,
+					"config": “true”,
+					"type": “link-load”,
+					"typedef": { // just an example, this differs in the model
+						"type": "uint8",
+						"range": "0 .. 100",
+						description "Percentage"
+					}
+				},
+				"type": "iana-if-type:ethernetCsmacd",
+				"$@enabled": {
+					"eltype": “leaf”,
+					"config": “true”,
+					"type": "boolean"
+				},
+				"enabled": false
+			},
+			{
+				"$@name": { ... }
+				"name": "eth1",
+				"$@type": { ... }
+				"type": "iana-if-type:ethernetCsmacd",
+				"$@enabled": { ... }
+				"enabled": true,
+				"$@ex-vlan:vlan-tagging": { ... }
+				"ex-vlan:vlan-tagging": true
+			}
+		]
+	},
+	"$@ietf-interfaces:interfaces-state": {
+			"eltype": "leaf",
+			"config": "false",
+			"type": "enumeration",
+			"enumval": [int8, int16, int32, int64, uint8, uint16, uint32, uint64, float, string],
+			"description": "The data type of the parameters argument.,
+			"mandatory": "false",
+			"iskey": "false"
+		}
+	"ietf-interfaces:interfaces-state": {
+		...
+	}
+}
+```
+
+## Substatements definitions
+
+**anyxml** - XML string which should be converted info JSON in mod_netconf (if it is possible) or in NetopeerGUI backend
+```
+{
+	"$@data": {
+		"eltype": “anyxml”
+	},
+	"data": {
+		"root": {
+			"node": "value"
+		}
+	}
+}
+```
+
+---
+
+**augment** - applied automatically in result
+
+---
+
+**bit**- type
+```
+{
+	"bits": [
+		{
+			"name": “first-bit”,
+			"position": 0
+		},
+		{
+			"name": “second-bit”,
+			"position": 1
+		},
+		...
+	]
+}
+```
+
+---
+
+**case**
+```
+{
+	"children": [“child1”, “child2”, …],
+	"choice": [“choice1”, “choice2”, …]
+}
+```
+
+---
+
+**choice** - defined in example 5
+
+---
+
+**config**
+```
+{
+	"config": true/false
+}
+```
+
+---
+
+**container** - defined in "eltype"
+```
+{
+	"$@interface": {
+		"eltype": "container"
+	}
+}
+```
+
+---
+
+**default**
+```
+{
+	"default": "default value of node"
+}
+```
+
+---
+
+**description**
+```
+{
+	"description": "The text of description of node"	
+}
+```
+
+---
+
+**enum** - values are transformed into "enumval"
+```
+{
+	"$@ietf-interfaces:interfaces-state": {
+		"type": "enumeration",
+		"enumval": [int8, int16, int32, int64, uint8, uint16, uint32, uint64, float]
+	}
+}
+```
+
+---
+
+**fraction-digits**
+```
+{
+	"fraction-digits": 2
+}
+```
+
+---
+
+**grouping** - rendered in "uses" statement directly
+
+---
+
+**key**
+```
+{
+	"$@list-name": {
+		"eltype": "list"
+		"keys": [“key-element-name”]
+	}
+}
+```
+
+---
+
+**leaf**
+```
+{
+	"$@leaf-name": {
+		"eltype": "leaf",
+		"iskey": true/false
+	}
+}
+```
+
+---
+
+**leaf-list**
+```
+{
+	"$@leaf-name": {
+		"eltype": "leaf-list"
+	}
+}
+```
+
+---
+
+**length** - renders same value as defined in schema
+```
+{
+	"length": "1..255"
+}
+```
+
+---
+
+**list**
+```
+{
+	"$@list-name": {
+		"eltype": "list"
+	},
+	"list-name": {
+		"$@leaf-name": {
+			"eltype": “leaf”,
+			...
+		}	
+	}
+}
+```
+
+---
+
+**mandatory**
+```
+{
+	"mandatory": "true/false"
+}
+```
+
+---
+
+**max-elements**
+```
+{
+	"max-elements": number
+}
+```
+
+---
+
+**min-elements**
+```
+{
+	"min-elements": number
+}
+```
+
+---
+
+**ordered-by**
+```
+{
+	"order-by": “user/system”
+}
+```
+
+---
+
+**path** - if defined, target schema informations must be defined, even if data does not exists
+```
+{
+	"$@target": { … },
+	"$@node": {
+		"eltype": “leafref”,
+		"path": “path/to/target”
+	}
+}
+```
+
+---
+
+**pattern**
+```
+{
+	"pattern": ["[0-9a-fA-F]*"]
+}
+```
+
+---
+
+**position** - no semantical informations, see "bits" statement
+
+---
+
+**presence**
+```
+{
+	"presence": “the meaning of presence in container”
+}
+```
+
+---
+
+**range**
+```
+{
+	"range": "11..max"
+}
+```
+
+---
+
+**reference**
+```
+{
+	"reference": "[RFC 3986](https://tools.ietf.org/html/rfc3986): Uniform Resource Identifier (URI): Generic Syntax"
+}
+```
+
+---
+
+**refine** - renders target automatically
+
+---
+
+**rpc** - rendered as any other data information with schema. In NetopeerGUI is rendered as a standalone tree. Output substatement is not needed in GUI.
+
+```
+{
+	"$@rock-the-house": {
+		"eltype": "rpc"
+	},
+	"rock-the-house": {
+		"input": {
+			"$@zip-code": {
+				"eltype": “leaf”,
+				"type": “string”
+			}
+			"zip-code": { … }
+		}
+	}
+}
+```
+
+---
+
+**status**
+```
+{
+	"status": “current/deprecated/obsolete”
+}
+```
+
+---
+
+**type** - same value as defined in schema
+```
+{
+	"type": “string”
+}
+```
+
+---
+
+**typedef** - defined in example 3
+
+---
+
+**union**
+```
+{
+	"type": “union”,
+	"types": [
+		{
+			(type1)
+		},
+		{
+			(type2)
+		},
+		...
+	]
+}
+```
+
+**unique**
+```
+{
+	"$@list-name": {
+		"eltype": “list”,
+		"unique": [“ip”, “port”]
+	}	
+}
+```
+
+---
+
+**units**
+```
+{
+	"units": “string of the units”
+}
+```
+
+---
+
+**uses** - renders content of "grouping" statement directly
+
+---
+
+**must**
+```
+{
+	"must": [“must-condition-1”, “must-condition-2”, …]
+}
+```
+
+---
+
+**when**
+```
+{
+	"when": “when-condition”
+}
+```
+
+---
+
+**require-instance**
+```
+{
+	"require-instance": true/false
+}
+```
+
+---
+
+**identity** - all values are transformed into "identityval"
+```
+{
+	"ietf-interfaces:interfaces": {
+		"interface": {
+			"$@type": {
+			"type": "identityref",
+					"identityval": [interface-type, iana-if-type:iana-interface-type, iana-if-type:other, iana-if-type:regular1822, ...]
+				}
+			}
+		}
+	}
+}
+```
+
+---
+
+******extension****** - support for NACM extensions only
+```
+{
+	"ext": “default-deny-write”/”default-deny-all”
+}
+```
+
+---
+
+Only a part of module information:
+
+---
+
+**contact**
+```
+{
+	"contact": “contact information”
+}
+```
+
+---
+
+**organization**
+```
+{
+	"organization": “organization information”
+}
+```
+
+---
+
+**namespace**
+```
+{
+	"namespace": “model namespace”
+}
+```
+
+---
+
+**prefix**
+```
+{
+	"prefix": “model prefix”
+}
+```
+
+---
+
+**revision**
+```
+{
+	"revision": “last model revision date”
+}
+```
+
+---
+
+**revision-date** - part of import and include output
+
+---
+
+**yang-version**
+```
+{
+	"yang-version": “1.0/1.1”
+}
+```
+
+---
+
+**import**
+```
+{
+	"imports": [
+		{
+			"name": “import name”,
+			"prefix": “import prefix”,
+			"revision": “import revision date”
+		}
+	]
+}
+```
+
+---
+
+**include**
+```
+{
+	"includes": [
+		{
+			"name": “include name”,
+			"revision": “include revision date”
+		}
+	]
+}
+```
+
+---
+
+Not used (we don't need this information):
+
+* "belongs-to"
+* "deviate"
+* "deviation"
+* "error-app-tag"
+* "error-message"
+* "if-feature"
+* "notification"
+* "yin-element"
+* "argument"
+
+