.. auto-generated by dev_tools.docs.xsd -- DO NOT EDIT ============================= NXDL Elements and Field Types ============================= The documentation in this section has been obtained directly from the NXDL Schema file: *nxdl.xsd*. First, the basic elements are defined in alphabetical order. Attributes to an element are indicated immediately following the element and are preceded with an "@" symbol, such as **@attribute**. Then, the common data types used within the NXDL specification are defined. Pay particular attention to the rules for *validItemName* and *validNXClassName*. .. 2010-11-29,PRJ: This contains a lot of special case code to lay out the NXDL chapter. It could be cleaner but that would also involve some cooperation on anyone who edits nxdl.xsd which is sure to break. The special case ensures the parts come out in the chosen order. BUT, it is possible that new items in nxdl.xsd will not automatically go in the manual. Can this be streamlined with some common methods? Also, there is probably too much documentation in nxdl.xsd. Obscures the function. .. index:: see:attribute; NXDL attribute ! single: NXDL elements .. _NXDL.elements: NXDL Elements ============= .. index:: ! attribute (NXDL element) .. _attribute: attribute --------- An ``attribute`` element can *only* be a child of a ``field`` or ``group`` element. It is used to define *attribute* elements to be used and their data types and possibly an enumeration of allowed values. For more details, see: :ref:`NXDL.data.type.attributeType` .. compound:: .. _fig.nxdl_attribute: .. figure:: img/nxdl/nxdl_attribute.png :alt: fig.nxdl/nxdl_attribute :width: 80% Graphical representation of the NXDL ``attribute`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_attribute.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! choice (NXDL element) .. _choice: choice ------ A ``choice`` element is used when a named group might take one of several possible NeXus base classes. Logically, it must have at least two group children. For more details, see: :ref:`NXDL.data.type.choiceType` .. index:: ! definition (NXDL element) .. _definition: definition ---------- A ``definition`` element can *only* be used at the root level of an NXDL specification. Note: Due to the large number of attributes of the ``definition`` element, they have been omitted from the figure below. For more details, see: :ref:`NXDL.data.type.definition`, :ref:`NXDL.data.type.definitionType`, and :ref:`NXDL.data.type.definitionTypeAttr` .. compound:: .. _fig.nxdl_definition: .. figure:: img/nxdl/nxdl_definition.png :alt: fig.nxdl/nxdl_definition :width: 80% Graphical representation of the NXDL ``definition`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_definition.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! dimensions (NXDL element) .. _dimensions: dimensions ---------- The ``dimensions`` element describes the *shape* of an array. It is used *only* as a child of a ``field`` element. For more details, see: :ref:`NXDL.data.type.dimensionsType` .. compound:: .. _fig.nxdl_dimensions: .. figure:: img/nxdl/nxdl_dimensions.png :alt: fig.nxdl/nxdl_dimensions :width: 80% Graphical representation of the NXDL ``dimensions`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_dimensions.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! doc (NXDL element) .. _doc: doc --- A ``doc`` element can be a child of most NXDL elements. In most cases, the content of the ``doc`` element will also become part of the NeXus manual. :element: {any}: In documentation, it may be useful to use an element that is not directly specified by the NXDL language. The *any* element here says that one can use any element at all in a ``doc`` element and NXDL will not process it but pass it through. For more details, see: :ref:`NXDL.data.type.docType` .. compound:: .. _fig.nxdl_doc: .. figure:: img/nxdl/nxdl_doc.png :alt: fig.nxdl/nxdl_doc :width: 80% Graphical representation of the NXDL ``doc`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_doc.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! enumeration (NXDL element) .. _enumeration: enumeration ----------- An ``enumeration`` element can *only* be a child of a ``field`` or ``attribute`` element. It is used to restrict the available choices to a predefined list, such as to control varieties in spelling of a controversial word (such as *metre* vs. *meter*). For more details, see: :ref:`NXDL.data.type.enumerationType` .. compound:: .. _fig.nxdl_enumeration: .. figure:: img/nxdl/nxdl_enumeration.png :alt: fig.nxdl/nxdl_enumeration :width: 80% Graphical representation of the NXDL ``enumeration`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_enumeration.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! field (NXDL element) .. _field: field ----- The ``field`` element provides the value of a named item. Many different attributes are available to further define the ``field``. Some of the attributes are not allowed to be used together (such as ``axes`` and ``axis``); see the documentation of each for details. It is used *only* as a child of a ``group`` element. For more details, see: :ref:`NXDL.data.type.fieldType` .. compound:: .. _fig.nxdl_field: .. figure:: img/nxdl/nxdl_field.png :alt: fig.nxdl/nxdl_field :width: 80% Graphical representation of the NXDL ``field`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_field.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! group (NXDL element) .. _group: group ----- A ``group`` element can *only* be a child of a ``definition`` or ``group`` element. It describes a common level of organization in a NeXus data file, similar to a subdirectory in a file directory tree. For more details, see: :ref:`NXDL.data.type.groupType` .. compound:: .. _fig.nxdl_group: .. figure:: img/nxdl/nxdl_group.png :alt: fig.nxdl/nxdl_group :width: 80% Graphical representation of the NXDL ``group`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_group.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! link (NXDL element) .. _link: link ---- .. index:: single: link target A ``link`` element can *only* be a child of a ``definition``, ``field``, or ``group`` element. It describes the path to the original source of the parent ``definition``, ``field``, or ``group``. For more details, see: :ref:`NXDL.data.type.linkType` .. compound:: .. _fig.nxdl_link: .. figure:: img/nxdl/nxdl_link.png :alt: fig.nxdl/nxdl_link :width: 80% Graphical representation of the NXDL ``link`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_link.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. index:: ! symbols (NXDL element) .. _symbols: symbols ------- A ``symbols`` element can *only* be a child of a ``definition`` element. It defines the array index symbols to be used when defining arrays as ``field`` elements with common dimensions and lengths. For more details, see: :ref:`NXDL.data.type.symbolsType` .. compound:: .. _fig.nxdl_symbols: .. figure:: img/nxdl/nxdl_symbols.png :alt: fig.nxdl/nxdl_symbols :width: 80% Graphical representation of the NXDL ``symbols`` element .. Images of NXDL structure are generated from nxdl.xsd source using the Eclipse XML Schema Editor (Web Tools Platform). Open the nxdl.xsd file and choose the "Design" tab. Identify the structure to be documented and double-click to expand as needed to show the detail. Use the XSD > "Export Diagram as Image ..." menu item (also available as button in top toolbar). Set the name: "nxdl_symbols.png" and move the file into the correct location using your operating system's commands. Commit the revision to version control. .. _NXDL.data.types.internal: NXDL Field Types (internal) =========================== Field types that define the NXDL language are described here. These data types are defined in the XSD Schema (``nxdl.xsd``) and are used in various parts of the Schema to define common structures or to simplify a complicated entry. While the data types are not intended for use in NXDL specifications, they define structures that may be used in NXDL specifications. .. Xpath = /xs:schema/xs:complexType[@name='attributeType'] .. index:: ! attributeType (NXDL data type) .. _NXDL.data.type.attributeType: attributeType ------------- Any new group or field may expect or require some common attributes. .. Could contain these elements: * ``doc`` * ``enumeration`` (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) Attributes of attributeType +++++++++++++++++++++++++++ @name +++++ Name of the attribute (unique within the enclosing group). @optional +++++++++ Is this attribute *optional* (if **true**) or *required* (if **false**)? @recommended ++++++++++++ A synonym for optional, but with the recommendation that this attribute be specified. @type +++++ Type of the attribute. For ``group`` specifications, the class name. For ``field`` or ``attribute`` specifications, the NXDL field type. Elements of attributeType +++++++++++++++++++++++++ dimensions ++++++++++ dimensions of an attribute with data value(s) in a NeXus file doc +++ Description of this ``attribute``. This documentation will go into the manual. enumeration +++++++++++ An enumeration specifies the values to be used. .. Xpath = /xs:schema/xs:element[@name='definition'] .. index:: ! definition (NXDL data type) .. _NXDL.data.type.definition: definition ---------- A ``definition`` element is the ``group`` at the root of every NXDL specification. It may *only* appear at the root of an NXDL file and must only appear **once** for the NXDL to be *well-formed*. .. Xpath = /xs:schema/xs:complexType[@name='definitionType'] .. index:: ! definitionType (NXDL data type) .. _NXDL.data.type.definitionType: definitionType -------------- A ``definition`` is the root element of every NXDL definition. It may *only* appear at the root of an NXDL file and must only appear **once** for the NXDL to be *well-formed*. The ``definitionType`` defines the documentation, attributes, fields, and groups that will be used as children of the ``definition`` element. Could contain these elements: * ``attribute`` * ``doc`` * ``field`` * ``group`` * ``link`` Note that a ``definition`` element also includes the definitions of the ``basicComponent`` data type. (The ``definitionType`` data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) Note that the first line of text in a ``doc`` element in a ``definition`` is used as a summary in the manual. Follow the pattern as shown in the base class NXDL files. Attributes of definitionType ++++++++++++++++++++++++++++ @category +++++++++ NXDL ``base`` definitions define the dictionary of terms to use for these components. All terms in a ``base`` definition are optional. NXDL ``application`` definitions define what is required for a scientific interest. All terms in an ``application`` definition are required. NXDL ``contributed`` definitions may be considered either base or applications. Contributed definitions must indicate their intended use, either as a base class or as an application definition. @extends ++++++++ The ``extends`` attribute allows this definition to *subclass* from another NXDL, otherwise ``extends="NXobject"`` should be used. @ignoreExtraAttributes ++++++++++++++++++++++ Only validate known attributes; do not not warn about unknowns. The ``ignoreExtraAttributes`` attribute is a flag to the process of validating NeXus data files. By setting ``ignoreExtraAttributes="true"``, presence of any undefined attributes in this class will not generate warnings during validation. Normally, validation will check all the attributes against their definition in the NeXus base classes and application definitions. Any items found that do not match the definition in the NXDL will generate a warning message. The ``ignoreExtraAttributes`` attribute should be used sparingly! @ignoreExtraFields ++++++++++++++++++ Only validate known fields; do not not warn about unknowns. The ``ignoreExtraFields`` attribute is a flag to the process of validating NeXus data files. By setting ``ignoreExtraFields="true"``, presence of any undefined fields in this class will not generate warnings during validation. Normally, validation will check all the fields against their definition in the NeXus base classes and application definitions. Any items found that do not match the definition in the NXDL will generate a warning message. The ``ignoreExtraFields`` attribute should be used sparingly! @ignoreExtraGroups ++++++++++++++++++ Only validate known groups; do not not warn about unknowns. The ``ignoreExtraGroups`` attribute is a flag to the process of validating NeXus data files. By setting ``ignoreExtraGroups="true"``, presence of any undefined groups in this class will not generate warnings during validation. Normally, validation will check all the groups against their definition in the NeXus base classes and application definitions. Any items found that do not match the definition in the NXDL will generate a warning message. The ``ignoreExtraGroups`` attribute should be used sparingly! @name +++++ The ``name`` of this NXDL file (case sensitive without the file extension). The name must be unique amongst all the NeXus base class, application, and contributed definitions. For the class to be adopted by the NIAC, the first two letters must be "``NX``" (in uppercase). Any other use must *not* begin with "``NX``" in any combination of upper or lower case. @restricts ++++++++++ The ``restricts`` attribute is a flag to the data validation. When ``restricts="1"``, any non-standard component found (and checked for validity against this NXDL specification) in a NeXus data file will be flagged as an error. If the ``restricts`` attribute is not present, any such situations will produce a warning. @svnid ++++++ (2014-08-19: deprecated since switch to GitHub version control) The identifier string from the subversion revision control system. This reports the time stamp and the revision number of this file. @type +++++ Must be ``type="group"`` Elements of definitionType ++++++++++++++++++++++++++ symbols +++++++ Use a ``symbols`` list to define each of the mnemonics that represent the length of each dimension in a vector or array. Groups under definitionType +++++++++++++++++++++++++++ In addition to an optional ``symbols`` list, a ``definition`` may contain any of the items allowed in a ``group``. .. Xpath = /xs:schema/xs:simpleType[@name='definitionTypeAttr'] .. index:: ! definitionTypeAttr (NXDL data type) .. _NXDL.data.type.definitionTypeAttr: definitionTypeAttr ------------------ Prescribes the allowed values for ``definition`` ``type`` attribute. (This data type is used internally in the NXDL schema to define a data type.) The value may be any one from this list only: * ``group`` * ``definition`` .. Xpath = /xs:schema/xs:complexType[@name='dimensionsType'] .. index:: ! dimensionsType (NXDL data type) .. _NXDL.data.type.dimensionsType: dimensionsType -------------- dimensions of a data element in a NeXus file (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) Attributes of dimensionsType ++++++++++++++++++++++++++++ @rank +++++ Rank (number of dimensions) of the data structure. Value could be either an unsigned integer or a symbol as defined in the *symbol* table of the NXDL file. For example: ``a[5]`` has ``rank="1"`` while ``b[8,5,6,4]`` has ``rank="4"``. See https://en.wikipedia.org/wiki/Rank_%28computer_programming%29 for more details. Elements of dimensionsType ++++++++++++++++++++++++++ dim +++ Specify the parameters for each index of the ``dimensions`` element with a ``dim`` element. The number of ``dim`` entries should be equal to the ``rank`` of the array. For example, these terms describe a 2-D array with lengths (``nsurf``, ``nwl``): .. code-block:: xml :linenos: The ``value`` attribute is used by NXDL and also by the NeXus data file validation tools to associate and coordinate the same array length across multiple fields in a group. @incr ~~~~~ Deprecated: 2016-11-23 telco (https://github.com/nexusformat/definitions/issues/330) The dimension specification is related to the ``refindex`` axis within the ``ref`` field by an offset of ``incr``. Requires ``ref`` and ``refindex`` attributes to be present. @index ~~~~~~ Number or symbol indicating which axis (subscript) is being described, ranging from 1 up to ``rank`` (rank of the data structure). For example, given an array ``A[i,j,k]``, ``index="1"`` would refer to the ``i`` axis (subscript). @ref ~~~~ Deprecated: 2016-11-23 telco (https://github.com/nexusformat/definitions/issues/330) The dimension specification is the same as that in the ``ref`` field, specified either by a relative path, such as ``polar_angle`` or ``../Qvec`` or absolute path, such as ``/entry/path/to/follow/to/ref/field``. @refindex ~~~~~~~~~ Deprecated: 2016-11-23 telco (https://github.com/nexusformat/definitions/issues/330) The dimension specification is the same as the ``refindex`` axis within the ``ref`` field. Requires ``ref`` attribute to be present. @required ~~~~~~~~~ This dimension is required (true: default) or not required (false). The default value is ``true``. When ``required="false"`` is specified, all subsequent ````. Could contain these elements: * ``doc`` * ``item`` (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) :: source operating mode for storage rings for storage rings Elements of enumerationType +++++++++++++++++++++++++++ item ++++ One of the prescribed values. Use the ``value`` attribute. Defines the value of one selection for an ``enumeration`` list. Each enumerated item must have a value (it cannot have an empty text node). @value ~~~~~~ The value of ``value`` of an ``enumItem`` is defined as an attribute rather than a name. doc ~~~ Individual items can be documented but this documentation might not be printed in the *NeXus Reference Guide*. .. Xpath = /xs:schema/xs:complexType[@name='fieldType'] .. index:: ! fieldType (NXDL data type) .. _NXDL.data.type.fieldType: fieldType --------- A ``field`` declares a new element in the component being defined. A ``field`` is synonymous with the HDF4 SDS (Scientific Data Set) and the HDF5 *dataset* terms. Could contain these elements: * ``attribute`` * ``dimensions`` * ``doc`` * ``enumeration`` Note that a ``field`` element also includes the definitions of the ``basicComponent`` data type. (The ``fieldType`` data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) @axes +++++ NOTE: Use of the ``axes`` attribute for a *field* is discouraged. It is for legacy support. You should use the ``axes`` group attribute (such as in NXdata) instead. This attribute contains a string array that defines the independent data fields used in the default plot for all of the dimensions of the *signal* field (the *signal* field is the field in this group that is named by the ``signal`` attribute of this group). When there is only one item in the string array, it is acceptable to set the value to the one string. In such case, it is not necessary to make it an array of one string. Presence of the ``axes`` attribute means this field is an ordinate. @axis +++++ NOTE: Use of this attribute is discouraged. It is for legacy support. You should use the ``axes`` group attribute (such as in NXdata) instead. Presence of the ``axis`` attribute means this field is an abscissa. The attribute value is an integer indicating this field as an axis that is part of the data set. The data set is a field with the attribute ``signal=1`` in the same group. The value can range from 1 up to the number of independent axes (abscissae) in the data set. A value of ``axis=1``" indicates that this field contains the data for the first independent axis. For example, the X axis in an XY data set. A value of ``axis=2`` indicates that this field contains the data for the second independent axis. For example, the Y axis in a 2-D data set. A value of ``axis=3`` indicates that this field contains the data for the third independent axis. For example, the Z axis in a 3-D data set. A field with an ``axis`` attribute should not have a ``signal`` attribute. @data_offset ++++++++++++ The ``stride`` and ``data_offset`` attributes are used together to index the array of data items in a multi-dimensional array. They may be used as an alternative method to address a data array that is not stored in the standard NeXus method of "C" order. The ``data_offset`` attribute determines the starting coordinates of the data array for each dimension. See https://support.hdfgroup.org/HDF5/Tutor/phypereg.html or *4. Dataspace Selection Operations* in https://portal.hdfgroup.org/display/HDF5/Dataspaces The ``data_offset`` attribute contains a comma-separated list of integers. (In addition to the required comma delimiter, whitespace is also allowed to improve readability.) The number of items in the list is equal to the rank of the data being stored. The value of each item is the offset in the array of the first data item of that subscript of the array. @interpretation +++++++++++++++ This instructs the consumer of the data what the last dimensions of the data are. It allows plotting software to work out the natural way of displaying the data. For example a single-element, energy-resolving, fluorescence detector with 512 bins should have ``interpretation="spectrum"``. If the detector is scanned over a 512 x 512 spatial grid, the data reported will be of dimensions: 512 x 512 x 512. In this example, the initial plotting representation should default to data of the same dimensions of a 512 x 512 pixel ``image`` detector where the images where taken at 512 different pressure values. In simple terms, the allowed values mean: * ``scalar`` = 0-D data to be plotted * ``scaler`` = DEPRECATED, use ``scalar`` * ``spectrum`` = 1-D data to be plotted * ``image`` = 2-D data to be plotted * ``rgb-image`` = 3-D data to be plotted * ``rgba-image`` = 3-D data to be plotted * ``hsl-image`` = 3-D data to be plotted * ``hsla-image`` = 3-D data to be plotted * ``cmyk-image`` = 3-D data to be plotted * ``vertex`` = 3-D data to be plotted @long_name ++++++++++ Descriptive name for this field (may include whitespace and engineering units). Often, the long_name (when defined) will be used as the axis label on a plot. @maxOccurs ++++++++++ Defines the maximum number of times this element may be used. Its value is confined to zero or greater. Must be greater than or equal to the value for the "minOccurs" attribute. A value of "unbounded" is allowed. @minOccurs ++++++++++ Defines the minimum number of times this ``field`` may be used. Its value is confined to zero or greater. Must be less than or equal to the value for the "maxOccurs" attribute. @nameType +++++++++ This interprets the name attribute as: * ``specified`` = use as specified * ``any`` = can be any name not already used in group @optional +++++++++ A synonym for minOccurs=0. @primary ++++++++ Integer indicating the priority of selection of this field for plotting (or visualization) as an axis. Presence of the ``primary`` attribute means this field is an abscissa. @recommended ++++++++++++ A synonym for optional, but with the recommendation that this ``field`` be specified. @signal +++++++ Presence of the ``signal`` attribute means this field is an ordinate. Integer marking this field as plottable data (ordinates). The value indicates the priority of selection or interest. Some facilities only use ``signal=1`` while others use ``signal=2`` to indicate plottable data of secondary interest. Higher numbers are possible but not common and interpretation is not standard. A field with a ``signal`` attribute should not have an ``axis`` attribute. @stride +++++++ The ``stride`` and ``data_offset`` attributes are used together to index the array of data items in a multi-dimensional array. They may be used as an alternative method to address a data array that is not stored in the standard NeXus method of "C" order. The ``stride`` list chooses array locations from the data array with each value in the ``stride`` list determining how many elements to move in each dimension. Setting a value in the ``stride`` array to 1 moves to each element in that dimension of the data array, while setting a value of 2 in a location in the ``stride`` array moves to every other element in that dimension of the data array. A value in the ``stride`` list may be positive to move forward or negative to step backward. A value of zero will not step (and is of no particular use). See https://support.hdfgroup.org/HDF5/Tutor/phypereg.html or *4. Dataspace Selection Operations* in https://portal.hdfgroup.org/display/HDF5/Dataspaces The ``stride`` attribute contains a comma-separated list of integers. (In addition to the required comma delimiter, whitespace is also allowed to improve readability.) The number of items in the list is equal to the rank of the data being stored. The value of each item is the spacing of the data items in that subscript of the array. @type +++++ Defines the type of the element as allowed by NeXus. See :ref:`here` and :ref:`elsewhere` for the complete list of allowed types. @units ++++++ String describing the engineering units. The string should be appropriate for the value and should conform to the NeXus rules for units. Conformance is not validated at this time. attribute +++++++++ attributes to be used with this field dimensions ++++++++++ dimensions of a data element in a NeXus file enumeration +++++++++++ A field can specify which values are to be used .. Xpath = /xs:schema/xs:complexType[@name='choiceType'] .. index:: ! choiceType (NXDL data type) .. _NXDL.data.type.choiceType: choiceType ---------- A ``choice`` element is used when a named group might take one of several possible NeXus base classes. Logically, it must have at least two group children. Attributes of choiceType ++++++++++++++++++++++++ @name +++++ The name to be applied to the selected child group. None of the child groups should define a ``@name`` attribute. Elements of choiceType ++++++++++++++++++++++ group +++++ NeXus base class that could be used here. The group will take the ``@name`` attribute defined by the parent ``choice`` element so do not specify the ``@name`` attribute of the group here. .. Xpath = /xs:schema/xs:complexType[@name='groupType'] .. index:: ! groupType (NXDL data type) .. _NXDL.data.type.groupType: groupType --------- A group element refers to the definition of an existing NX object or a locally-defined component. Could contain these elements: * ``attribute`` * ``doc`` * ``field`` * ``group`` * ``link`` Note that a ``group`` element also includes the definitions of the ``basicComponent`` data type. (The ``groupType`` data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) Attributes of groupType +++++++++++++++++++++++ @maxOccurs ++++++++++ Maximum number of times this ``group`` is allowed to be present within its parent ``group``. Note each ``group`` must have a ``name`` attribute that is unique among all ``group`` and ``field`` declarations within a common parent ``group``. @minOccurs ++++++++++ Minimum number of times this ``group`` is allowed to be present within its parent group. Note each ``group`` must have a ``name`` attribute that is unique among all ``group`` and ``field`` declarations within a common parent group. @name +++++ A particular scientific application may expect a name of a ``group`` element. It is helpful but not required to specify the ``name`` attribute in the NXDL file. It is suggested to always specify a ``name`` to avoid ambiguity. It is also suggested to derive the ``name`` from the type, using an additional number suffix as necessary. For example, consider a data file with only one ``NXentry``. The suggested default ``name`` would be ``entry``. For a data file with two or more ``NXentry`` groups, the suggested names would be ``entry1``, ``entry2``, ... Alternatively, a scientific application such as small-angle scattering might require a different naming procedure; two different ``NXaperture`` groups might be given the names ``beam_defining_slit`` and ``scatter_slit``. @optional +++++++++ A synonym for minOccurs=0. @recommended ++++++++++++ A synonym for optional, but with the recommendation that this ``group`` be specified. @type +++++ The ``type`` attribute *must* contain the name of a NeXus base class, application definition, or contributed definition. .. Xpath = /xs:schema/xs:complexType[@name='linkType'] .. index:: ! linkType (NXDL data type) .. _NXDL.data.type.linkType: linkType -------- A link to another item. Use a link to avoid needless repetition of information. (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) @napimount ++++++++++ Group attribute that provides a URL to a group in another file. More information is described in the *NeXus Programmers Reference*. http://manual.nexusformat.org/_static/NeXusIntern.pdf @target +++++++ Declares the absolute HDF5 address of an existing field or group. The target attribute is added for NeXus to distinguish the HDF5 path to the original dataset. Could contain these elements: * ``doc`` Matching regular expression:: (/[a-zA-Z_][\w_]*(:[a-zA-Z_][\w_]*)?)+ For example, given a ``/entry/instrument/detector/polar_angle`` field, link it into the ``NXdata`` group (at ``/entry/data/polar_angle``). This would be the NeXus data file structure:: /: NeXus/HDF5 data file /entry:NXentry /data:NXdata /polar_angle:NX_NUMBER @target="/entry/instrument/detector/polar_angle" /instrument:NXinstrument /detector:NXdetector /polar_angle:NX_NUMBER @target="/entry/instrument/detector/polar_angle" .. Xpath = /xs:schema/xs:complexType[@name='symbolsType'] .. index:: ! symbolsType (NXDL data type) .. _NXDL.data.type.symbolsType: symbolsType ----------- Each ``symbol`` has a ``name`` and optional documentation. Please provide documentation that indicates what each symbol represents. For example:: number of reflecting surfaces number of wavelengths Elements of symbolsType +++++++++++++++++++++++ doc +++ Describe the purpose of this list of ``symbols``. This documentation will go into the manual. symbol ++++++ When multiple ``field`` elements share the same dimensions, such as the dimension scales associated with plottable data in an ``NXdata`` group, the length of each dimension written in a NeXus data file should be something that can be tested by the data file validation process. @name ~~~~~ Mnemonic variable name for this array index symbol. doc ~~~ Describe the purpose of the parent ``symbol``. This documentation will go into the manual. .. Xpath = /xs:schema/xs:complexType[@name='basicComponent'] .. index:: ! basicComponent (NXDL data type) .. _NXDL.data.type.basicComponent: basicComponent -------------- A ``basicComponent`` defines the allowed name format and attributes common to all ``field`` and ``group`` specifications. (This data type is used internally in the NXDL schema to define elements and attributes to be used by users in NXDL specifications.) Attributes of basicComponent ++++++++++++++++++++++++++++ @name +++++ The ``name`` attribute is the identifier string for this entity. It is required that ``name`` must be unique within the enclosing ``group``. The name must match the regular expression defined by ``validItemName``. (Historical note: Originally, the rule (``validItemName``) was defined to allow only names that can be represented as valid variable names in most computer languages. ) Elements of basicComponent ++++++++++++++++++++++++++ doc +++ Describe this ``basicComponent`` and its use. This documentation will go into the manual. .. Xpath = /xs:schema/xs:simpleType[@name='validItemName'] .. index:: ! validItemName (NXDL data type) .. _NXDL.data.type.validItemName: validItemName ------------- Used for allowed names of elements and attributes. Note: No ``-`` characters (among others) are allowed and you cannot start or end with a period (``.``). HDF4 had a 64 character limit on names (possibly including NULL) and the NAPI enforces this via the ``NX_MAXNAMELEN`` variable with a **64** character limit (which may be 63 on a practical basis if one considers a NULL terminating byte). (This data type is used internally in the NXDL schema to define a data type.) NOTE: In some languages, it may be necessary to add a ``^`` at the start and a ``$`` at the end of the regular expression to constrain the match to an entire line. The value may be any ``xs:token`` that *also* matches the regular expression:: [a-zA-Z0-9_]([a-zA-Z0-9_.]*[a-zA-Z0-9_])? .. Xpath = /xs:schema/xs:simpleType[@name='validNXClassName'] .. index:: ! validNXClassName (NXDL data type) .. _NXDL.data.type.validNXClassName: validNXClassName ---------------- Used for allowed names of NX class types (e.g. NXdetector). Note this is *not* the instance name (e.g. ``bank1``) which is covered by ``validItemName``. (This data type is used internally in the NXDL schema to define a data type.) The value may be any ``nx:validItemName`` that *also* matches the regular expression:: NX.+ .. Xpath = /xs:schema/xs:simpleType[@name='validTargetName'] .. index:: ! validTargetName (NXDL data type) .. _NXDL.data.type.validTargetName: validTargetName --------------- This is a valid link target - currently it must be an absolute path made up of valid names with the ``/`` character delimiter. But we may want to consider allowing "``..``" (parent of directory) at some point. If the ``name`` attribute is helpful, then use it in the path with the syntax of *name:type* as in these examples:: /NXentry/NXinstrument/analyzer:NXcrystal/ef /NXentry/NXinstrument/monochromator:NXcrystal/ei /NX_other Must also consider use of ``name`` attribute in resolving ``link`` targets. (This data type is used internally in the NXDL schema to define a data type.) From the HDF5 documentation: *Note that relative path names in HDF5 do not employ the ``../`` notation, the UNIX notation indicating a parent directory, to indicate a parent group.* Thus, if we only consider the case of ``[name:]type``, the matching regular expression syntax is written: ``/[a-zA-Z_][\w_]*(:[a-zA-Z_][\w_]*)?)+``. Note that HDF5 also permits relative path names, such as: ``GroupA/GroupB/Dataset1`` but this is not permitted in the matching regular expression and not supported in NAPI. The value may be any ``xs:token`` that *also* matches the regular expression:: (/[a-zA-Z_][\w_]*(:[a-zA-Z_][\w_]*)?)+ .. Xpath = /xs:schema/xs:simpleType[@name='nonNegativeUnbounded'] .. index:: ! nonNegativeUnbounded (NXDL data type) .. _NXDL.data.type.nonNegativeUnbounded: nonNegativeUnbounded -------------------- A ``nonNegativeUnbounded`` allows values including all positive integers, zero, and the string ``unbounded``. (This data type is used internally in the NXDL schema to define a data type.) **The** ``xs:string`` **data type** The ``xs:string`` data type can contain characters, line feeds, carriage returns, and tab characters. See https://www.w3schools.com/xml/schema_dtypes_string.asp for more details. **The** ``xs:token`` **data type** The ``xs:string`` data type is derived from the ``xs:string`` data type. The ``xs:token`` data type also contains characters, but the XML processor will remove line feeds, carriage returns, tabs, leading and trailing spaces, and multiple spaces. See https://www.w3schools.com/xml/schema_dtypes_string.asp for more details.