+
+
+### Tutorial
+
+Tutorials to write different parts and a full NeXus application or base class
+
+- [Tutorials to write NeXus definition in YAML](tutorials.md)
+
+
+
+
+### How-to guides
+
+How-to install and use the nyaml tool
+
+- [How-to guide for NYAML tools](how_to_guide.md)
+
+
+
+
+
+### Learn
+
+An introduction to NeXus and its design principles.
+
+- [An introduction to NeXus](https://manual.nexusformat.org/index.html)
+- [Motivation for NYAML tool](explanations.md)
+
+
+
+
+### Reference
+Relavent references that supported to develop this tool:
+- [NYAML GitHub repository](https://github.com/FAIRmat-NFDI/nyaml)
+- [FAIRmat-NeXus website](https://fairmat-experimental.github.io/nexus-fairmat-proposal/)
+- [FAIRmat-NeXus GitHub repository](https://github.com/FAIRmat-NFDI/nexus_definitions)
+- [Official werbsite for NeXus](https://manual.nexusformat.org/index.html)
+
+- [NYAML developed under project FAIRmat-NFDI](https://github.com/FAIRmat-NFDI)
+- [National Research Data Infrastructure (NFDI) funded FAIRmat-NFDI](https://www.nfdi.de/?lang=en)
+
+
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
new file mode 100644
index 0000000..c27ed91
--- /dev/null
+++ b/docs/stylesheets/extra.css
@@ -0,0 +1,69 @@
+
+.md-header__button.md-logo :where(img,svg) {
+ width: 100%;
+ height: 30px;
+}
+
+.md-header, .md-header__inner {
+ background-color: #fff;
+ color: #2A4CDF;
+}
+
+.md-header[data-md-state=shadow] {
+ box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);
+ transition: box-shadow 200ms linear;
+}
+
+.md-header__inner {
+ height: 80px;
+}
+
+.md-header__topic {
+ font-size: 24px;
+}
+
+.md-footer {
+ background-color: #2A4CDF;
+}
+
+.md-search__form:hover {
+ background-color: rgba(0,0,0,.13);
+}
+
+.md-typeset h1 {
+ color: black;
+ font-weight: 700;
+}
+
+.youtube {
+ position: relative;
+ width: 100%;
+ height: 0;
+ padding-bottom: 56.25%;
+}
+
+.youtube iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.home-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-column-gap: 24px;
+ row-gap: 24px;
+}
+
+.home-grid div {
+ border-radius: 4px;
+ padding: 24px;
+ background-color: #f3e9d9;
+}
+
+.home-grid h3 {
+ margin-top: 0;
+ font-weight: 700;
+}
\ No newline at end of file
diff --git a/docs/tutorials.md b/docs/tutorials.md
new file mode 100644
index 0000000..b52a004
--- /dev/null
+++ b/docs/tutorials.md
@@ -0,0 +1,185 @@
+# Tutorials
+This tutorial will explain different keywords, terms and rules from the prespective of YAML format of the NeXus schema.
+
+## Design of NeXus Ontology and Terms in YAML
+
+Within the YAML format, the root section denotes the top-level description of the application definition or base class schema, comprising the `category`, `type`, `doc`, `symbols` block, and the name of the schema (e.g. `NXmpes(NXobject)`). Correspondingly, the root section refers to the XML element `definition`, encompassing the first `doc` child of the `definition` and `symbols`. The definition element encapsulates essential XML attributes such as the schema's `name` (and xml attribute), the object it `extends` (an xml attribute), and the schema `type` (an xml attribute), with additional XML attributes (e.i. `xmlns:xsi`) handled by the nyaml converter. The accurate designation of category as either `base` or `application` distinguishes between an `application definition` and a `base class`. The schema name (e.i. `NXmpes(NXobject)`) with paranthesis indicates the extension of the current application definition, noting that base classes must `extends` NXobject, whereas application definitions may `extends` either `NXobject` or another `application definition` (excluding base classes). Schemas may incorporate one or multiple symbols, each imbued with specialized physical meanings beyond their literal interpretation, which are utilised over the application definition.
+Within the YAML format, the root section denotes the top-level description of the application definition or base class schema, comprising the `category`, `type`, `doc`, `symbols` block, and the name of the schema (e.g. `NXmpes(NXobject)`). Correspondingly, the root section refers to the XML element `definition`, encompassing the first `doc` child of the `definition` and `symbols`. The definition element encapsulates essential xml attributes such as the schema's `name` (and xml attribute), the object it `extends` (an xml attribute), and the schema `type` (an xml attribute), with additional XML attributes (e.i. `xmlns:xsi`) handled by the nyaml converter. The accurate designation of category as either `base` or `application` distinguishes between an `application definition` and a `base class`. The schema name (e.i. `NXmpes(NXobject)`) with paranthesis indicates the extension of the current application definition, noting that base classes must `extends` NXobject, whereas application definitions may `extends` either `NXobject` or another `application definition` (excluding base classes). Schemas may incorporate one or multiple symbols, each imbued with specialized physical meanings beyond their literal interpretation, which are utilised over the application definition.
+
+**A typical root section for the application definition `NXmpes` outlined**
+
+```yaml
+category: application
+type: group
+doc: |
+ This is the most general application definition for multidimensional photoelectron spectroscopy.
+
+ .. _ISO 18115-1:2023: https://www.iso.org/standard/74811.html
+ .. _IUPAC Recommendations 2020: https://doi.org/10.1515/pac-2019-0404
+symbols:
+ doc: |
+ The symbols used in the schema to specify e.g. dimensions of arrays
+ n_transmission_function: |
+ Number of data points in the transmission function.
+NXmpes(NXobject):
+```
+
+### NeXus Group
+[NeXus groups](https://manual.nexusformat.org/design.html#design-groups), as instances of NeXus base classes, embody the compositional structure of application definitions. These groups can be initialized dynamically or statically, each approach offering distinct advantages.
+
+Dynamic initialization allows for the instantiation of groups while implementing the NeXus definition to store data (in HDF5 file format called NeXus file). This method provides flexibility for multiple instances at the same level within the NeXus file. For instance, the group `(NXmanipulator)` can initialize multiple groups such as `manipulator1` and `manipulator2` of the base class `NXmanipulator` during data writing.
+
+
+Descriptive information about NeXus groups is encapsulated within the `doc` child of the respective group. It is important to note that the group annotation of `source_TYPE(NXsource)` or `(NXsource)source_TYPE` signifies the encapsulation of the group's `name` as `source_TYPE` and its type as `NXsource` base class. Notably, the order between `name` and `type` within the XML element must be inverted such two different syntax.
+
+Furthermore, the uppercase part of the group's name can be dynamically overwritten, allowing for the instantiation of multiple instances. For example, `source_electric` and `source_magnetic` can coexist from `NXsource`. It is essential to adhere to the uppercase dynamic rules for NeXus groups, fields, and attributes.
+
+
+**NeXus Groups in YAML format**
+```yaml
+# NeXus groups in YAML format
+source_TYPE(NXsource):
+ exists: recommended
+ doc: |
+ A source used to generate a beam.
+(NXmanipulator):
+ exists: optional
+ doc: |
+ Manipulator for positioning of the sample.
+ value_log(NXlog):
+ exists: optional
+```
+
+### NeXus Field and NeXus Attrubute
+A NeXus group may contain NeXus fields, NeXus attributes, and NeXus groups. A field, that does not have preceding `NX`, and a attribute, preceded by `\@`, must have a [NeXus type](https://manual.nexusformat.org/nxdl-types.html#index-0) (e.g.`NX_FLOAT`, `NX_CHAR`). In the YAML notation, each NeXus field or NeXus attribute has a implicit type `NX_CHAR`; otherwise its type must be denoted inside the parenthesis (e.g. `end_time(NX_DATE_TIME)`). Other XML attributes of the NeXus `field` and NeXus `attribute` comes as children of the field and attribute (the special keywords will be discussed on next section). The introductory text of the NeXus fields or attributes goes under `doc` child.
+
+A NeXus group may encompass multiple `field`, `attribute`, and subgroup, each serving distinct purposes within the data structure. The [`field`](https://manual.nexusformat.org/design.html#design-fields), denoted without the prefix NX, and the [`attribute`](https://manual.nexusformat.org/design.html#design-attributes), indicated by `\@`, must be associated with a NeXus type (e.g., `NX_FLOAT`, `NX_CHAR`). In YAML format, each field or attribute (NeXus attribute) implicitly assumes the type `NX_CHAR`, unless explicitly specified within parentheses (e.g., `end_time(NX_DATE_TIME)`).
+
+Additionally, `XML` attributes specific to NeXus field and attribute are represented as children of the corresponding `field` or `attribute` elements (further details on special keywords will be discussed in the following section). Descriptive information pertaining to NeXus `field`s or `attribute`s is encapsulated within the `doc` child element.
+
+**NeXus field and attribute in YAML format**
+```yaml
+(NXentry):
+ exsits: required
+ definition: # Field type: NX_CHAR
+ \@version: # Attribute type: NX_CHAR
+ enumeration: [NXmpes]
+ title:
+ start_time(NX_DATE_TIME): # Field type: NX_DATE_TIME
+ doc: Datetime of the start of the measurement.
+ end_time(NX_DATE_TIME): # Field type: NX_DATE_TIME
+ exists: recommended
+ doc: Datetime of the end of the measurement.
+```
+
+### NeXus Link
+The NeXus `link` concept reduces duplication of the data since several concepts of the same kind (e.g., NeXus field or NeXus attribute) can refer to a single copy of a data element . In YAML format, NeXus `link` is defined denoting the link in side parenthesis. At the same time, the concept containing the data must be mentioned under the `target` child.
+
+
+**NeXus link in YAML format**
+```yaml
+reference_measurement(link):
+ target: /NXentry
+ doc: A link to a full data collection.
+```
+
+In the provided YAML example, `reference_measurement` is defined as a link refering the `NXentry` group with its target specified as `/NXentry`. This structure ensures that the concept referencing the data is effectively linked to the designated target, thereby reducing redundancy and maintaining data integrity within the NeXus framework.
+
+### NeXus Choice
+NeXus `choice` concept is designed to choose a concept from a number of concepts of the same kind (e.g., a NeXus field). The `choice` options allows for defining a scientific concept in several modes for different situations (e.g., for different instrument configurations or measurement modes).
+
+**NeXus choice in YAML format**
+```yaml
+pixel_shape(choice):
+ (NXoff_geometry):
+ doc: Shape description of each pixel. Use only if all pixels in the detector
+ are of uniform shape.
+ (NXcylindrical_geometry):
+ doc: Shape description of each pixel. Use only if all pixels in the detector
+ are of uniform shape and require being described by cylinders.
+```
+
+In this `choice` example, `pixes_shape` could be any of the groups `(NXoff_geometry)` and `(NXcylindrical_geometry)`, depending on the geometry of the pixelx.
+
+## Special Keywords in YAML
+To explain the context of NeXus, certain keywords hold significance beyond their literal interpretations. These special keywords are utilized to elucidate and denote various NeXus terms like attributes, fields, links, and groups, thereby enhancing the clarity and specificity of the data representation.
+
+### Keyword `exists`
+The `exists` keyword plays a pivotal role in delineating the optionality of NeXus concepts `attribute`, `field`, `choice` `link`, and `group`, during the implementation of NeXus definitions in NeXus files. It provides crucial insights into the expected presence or absence of these concepts within the NeXus data structure. By default, all the concepts of a base class are optional, while in an application definition, all concepts are required.
+
+Presently, the accepted values for the `exists` keyword encompass:
+
+`optional`: Denotes that the NeXus concept is not mandatory and may be absent.
+`recommended`: Suggests that the NeXus concept is advisable, but not mandatory.
+`required`: Indicates that the NeXus concept must be present within the structure. Any validation of a NeXus file will fail if required concepts (for a given application definition) are not available.
+`[min,