This document describes the different aspects of accessing a Tamino database with the Natural data manipulation language (DML).
The following topics are covered:
For information about how to configure Natural to work with Tamino, see Natural for Tamino in the Database Management System Interfaces documentation.
Tamino stores structured data-oriented XML documents in containers called doctypes. The doctypes are grouped logically together in so-called collections. Collections are stored in a Tamino database, which is the physical container of data.
The kind of data that can be stored in Tamino and that is to be accessed by Natural for Tamino must be defined in a Tamino XML Schema.
This section describes the basic concepts of the Tamino XML schema language, Natural DDMs and view definitions and how they interact with Natural for Tamino.
The following topics are covered:
The Tamino XML schema language is used to define a data type-oriented description of the structure of XML documents. In Tamino, a doctype represents a container for XML documents with the same root element and the same structure within a collection.
In Tamino, a collection is a container for a set of varying doctypes, so that a collection can be seen as the logical grouping of doctypes that belong together.
In a Tamino XML schema definition, a doctype is defined together with the collection in which it is contained. One Tamino XML schema can define more than one doctype and it can also define doctypes for more than one collection.
For more information on the Tamino XML schema language, refer to the Tamino documentation.
For Natural to be able to access a Tamino database, a logical connection between a Tamino doctype and the Natural data structures must be provided. Such a logical connection is called a DDM (data definition module).

A Natural DDM generated from a Tamino database is a representation of one doctype defined in one schema. The DDM contains information about the type of each data field and all the necessary structural information as defined in the corresponding Tamino XML schema. To generate a new DDM, the doctype must be selected from a list of all doctypes available in a given collection. Since one collection is bound to one Natural database ID (DBID), it is necessary to use a second DBID if a doctype from another collection is to be accessed.
A Tamino XML schema describes data and data structures in a very different way than with Natural data definitions. Therefore, specific mappings are introduced to derive a Natural data format from a Tamino XML schema data type.
You define DDMs with Natural DDM Services. For more information about Tamino XML schema mapping, refer to Data Conversion for Tamino in the DDM Services section of the Editors documentation.
For the field attributes defined in a DDM, refer to the DDM editorDDM Editor, Using the DDM EditorDDM Services, Using the DDM Editor section in the Editors documentation.
If you define an XML element with a
                  				maxOccurs value greater than one in the Tamino
                  				XML Schema, then this element can occur as often as this value indicates. Such
                  				a construction is mapped either on a Natural static array definition or on a
                  				Natural X-Array definition. Depending on the type of the XML element you are
                  				dealing with, the following situations may occur:
               
If the XML element is a complexType with
                        					 complexContent (i.e. it is an element containing other elements)
                        					 then the generated corresponding Natural group will be an indexed group.
                     
If the XML element is a simpleType (i.e. the
                        					 element is holding data only) or a complexType with
                        					 simpleContent (i.e. the element has only data and attributes but
                        					 no other elements) then the generated Natural data field will be an array.
                     
For further information about mapping
                  				  maxOccurs definitions onto Natural arrays, see
                  				  Data
                     				  Conversion for Tamino in the DDM
                     				  Services section of the Editors
                  				  documentation. The array boundaries or the kind of the array (static array or
                  				  X-Array) can be adapted in a corresponding view definition as
                  				  usual.
               
This is an example of an EMPLOYEES DDM generated from
                  				a Tamino XML Schema definition.
               
The schema can, for example, be defined with the Natural demo
                  				application SYSEXDB:
               
DB: 00250 FILE: 00001  - EMPLOYEES-XML
TYPE: XML
COLLECTION: NATDemoData
SCHEMA: Employee
DOCTYPE: Employee
NAMESPACE-PREFIX: xs
NAMESPACE-URI: http://www.w3.org/2001/XMLSchema
T L  Name                             F Leng       D Remark
- -- -------------------------------- - ---------- - -----------
G  1 EMPLOYEE     
     FLAGS=MULT_REQUIRED,MULT_ONCE     
     TAG=Employee     
     XPATH=/Employee
G  2 GROUP$1
     FLAGS=GROUP_ATTRIBUTES
   3 PERSONNEL-ID                     A          8 D xs:string
     FLAGS=ATTR_REQUIRED
     TAG=@Personnel-ID
     XPATH=/Employee/@Personnel-ID
G  2 GROUP$2
     FLAGS=GROUP_SEQUENCE,MULT_REQUIRED,MULT_ONCE
G  3 FULL-NAME
     FLAGS=MULT_OPTIONAL
     TAG=Full-Name
     XPATH=/Employee/Full-Name
G  4 GROUP$3
     FLAGS=GROUP_SEQUENCE,MULT_REQUIRED,MULT_ONCE
   5 FIRST-NAME                       A         20 D xs:string
     FLAGS=MULT_OPTIONAL
     TAG=First-Name
     XPATH=/Employee/Full-Name/First-Name
   5 MIDDLE-NAME                      A         20 D xs:string
     FLAGS=MULT_OPTIONAL
     TAG=Middle-Name
     XPATH=/Employee/Full-Name/Middle-Name
   5 MIDDLE-I                         A         20 D xs:string
     FLAGS=MULT_OPTIONAL
     TAG=Middle-I
     XPATH=/Employee/Full-Name/Middle-I
   5 NAME                             A         20 D xs:string
     FLAGS=MULT_OPTIONAL
     TAG=Name
     XPATH=/Employee/Full-Name/Name
       . . .
   3 LANG                             A          3   xs:string
     FLAGS=ARRAY,MULT_OPTIONAL
     OCC=1:4
     TAG=Lang
     XPATH=/Employee/Lang    
               		   
               		 
               		 
               		  
               In order to work with Tamino database fields in a Natural program,
                  				you must specify the required fields of the DDM in a Natural
                  				view-definition (see the
                  				DEFINE DATA
                  				statement). Normally, a view is a special subset of the complete data structure
                  				as defined in the DDM.
               
Tamino XML Schema->Natural for Tamino DDM->Natural view-definition
If the view is used to store XML objects, it has to contain all fields that are required to a generate documents that are valid according to the corresponding Tamino XML schema definition.
A view for the EMPLOYEES-XML DDM, where one of the
                  				view fields is a static array, might look like this:
               
DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-XML 02 NAME 02 CITY 02 LANG (1:4) END-DEFINE
The Natural DML statements which are provided for Tamino access can be subdivided into two categories:
pure retrieval statements;
database modification statements.
The Natural system variable *ISN is
                  			 mapped on the Tamino ino:id.
               
The following Natural statements can be used for database retrieval:
This statement is used to select those records from a database which meet a specified search criterion.
This statement is used to select one special record with its unique id from the database.
This statement is used to select a range of records from a database in a specified sequence.
Not all of the possible options and all of the possible clauses of the retrieval statements can be used for Tamino access. Please read the appropriate section in the Statements documentation for a detailed description.
All statements are internally realized with the Tamino
                  				_xquery command verb. Statement clauses are mapped to
                  				corresponding Tamino XQuery expressions, e.g. search criteria are mapped to
                  				Tamino XQuery comparison expressions, sequence specifications are mapped to
                  				Tamino XQuery ordering expressions with sort direction.
               
The result set for the FIND and READ
                  				statements is determined at start of the loop and remains unchanged throughout
                  				the loop.
               
The following is an example of reading a set of employee records from a Tamino database where one view field is an array:
* READ 5 RECORDS DESCENDING CONTAINING A * STATIC ARRAY IN THE VIEW DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-TAMINO 02 NAME 02 CITY 02 LANG (1:4) END-DEFINE * READ(5) VW DESCENDING BY NAME = 'MAYER' DISPLAY NAME CITY LANG(*) END-READ * END
The following database modification statements are provided for use with Natural for Tamino:
This statement is used for inserting a new XML document into the database.
This statement is used for deleting a document from the
                        					 database. The DELETE statement implements a positioned delete.
                     
For a detailed description of the statements, see the appropriate sections of the Statements documentation.
The DELETE statement is internally realized with the
                  				Tamino _delete command verb using the current ino:id,
                  				and the STORE statement is implemented with the
                  				_process command verb.
               
The following example program stores a new employee record with some data in the database:
* STORE NEW EMPLOYEE DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-TAMINO 02 PERSONNEL-ID 02 NAME 02 CITY 02 LANG (1:3) END-DEFINE * * FILL VIEW PERSONNEL-ID := '1230815' NAME := 'KENT' CITY := 'ROME' LANG(1) := 'ENG' LANG(2) := 'GER' LANG(3) := 'SPA' * * STORE VIEW STORE RECORD IN VW * COMMIT * END
If the Tamino XML Schema defines data structures for a doctype as
                  				being mandatory, then these data structures must also be filled in the view
                  				before a STORE statement is issued, otherwise this will result in
                  				a Tamino error.
               
Natural performs database modification operations based on transactions, which means that all database modification requests are processed in logical transaction units. A logical transaction is the smallest unit of work (as defined by you) which must be performed in its entirety to ensure that the information contained in the database is logically consistent.
A logical transaction may consist of one or more modification
                  				statements (DELETE,
                  				STORE) involving one or
                  				more doctypes in the database. A logical transaction may also span multiple
                  				Natural programs.
               
A logical transaction begins when a database modification
                  				statement is issued. Natural does this automatically. For example, if a
                  				FIND loop contains a DELETE statement. The end of a
                  				logical transaction is determined by an END TRANSACTION statement
                  				in the program. This statement ensures that all modifications within the
                  				transaction have been successfully applied.
               
In addition to Natural's standard error messages there are two special error codes which provide additional information via a sub-error code.
NAT8400 Tamino error ... occurred
For this special error an additional sub-code number is shown. This number refers to a Tamino error message. Please see the Tamino Messages and Codes documentation. The user exit USR6007 in library SYSEXT is provided for obtaining diagnostic information in case a NAT8400 error occurs.
Here is an example of usage:
DEFINE DATA LOCAL 01 VW VIEW OF EMPLOYEES-TAMINO 02 NAME 02 CITY 01 TAMINO_PARMS 02 TAMINO_ERROR_NUM (I4) /* Error number of Tamino error 02 TAMINO_ERROR_TEXT (A70) /* Tamino error text 02 TAMINO_ERROR_LINE (A253) /* Tamino error message line END-DEFINE * NAME := 'MEYER' CITY := 'BOSTON' STORE VW * ON ERROR IF *ERROR EQ 8400 /* in case of error 8400 obtain diagnostic information CALLNAT 'USR6007N' TAMINO_PARMS PRINT 'Error 8400 occurred:' PRINT 'Error Number:' TAMINO_ERROR_NUM PRINT 'Error Text :' TAMINO_ERROR_TEXT PRINT 'Error Line :' TAMINO_ERROR_LINE END-IF END-ERROR * END
NAT8411 HTTP request failed with response code...
The error code from the HTTP server is delivered as additional
                  				information. See also the REQUEST
                        				DOCUMENT statement,
                  				HTTP Responses
                     				Redirected and Denied.
               
This is a more sophisticated example of Natural for Tamino interacting with an SQL database; it retrieves data from a Tamino database and inserts or updates the corresponding row in an appropriate table in a SQL database.
*
* TAMINO DB --> SQL RDBMS EXAMPLE
*
DEFINE DATA LOCAL
* DEFINE VIEW FOR TAMINO
01 VW-TAMINO VIEW OF EMPLOYEES-TAMINO
02 PERSONNEL-ID
02 NAME
02 CITY
* DEFINE VIEW FOR SQL DATABASE
01 VW-SQL VIEW OF EMPLOYEES-SQL
02 PERSONNEL_ID
02 NAME
02 CITY
END-DEFINE
*
* OPEN A TAMINO LOGICAL READ LOOP
*
TAMINO. READ VW-TAMINO BY NAME
*
* SEARCH RECORD IN SQL DATABASE AND
* INSERT A NEW RECORD IF NOT FOUND OR
* UPDATE THE EXISTING ONE WITH THE DATA
* FROM TAMINO DB
SQL. FIND(1) VW-SQL WITH PERSONNEL_ID = PERSONNEL-ID (TAMINO.)
       IF NO RECORDS FOUND
         PERSONNEL_ID := PERSONNEL-ID (TAMINO.)
         NAME         := NAME         (TAMINO.)
         CITY         := CITY         (TAMINO.)
         STORE VW-SQL
         ESCAPE BOTTOM
       END-NOREC
       PERSONNEL_ID := PERSONNEL-ID (TAMINO.)
       NAME         := NAME         (TAMINO.)
       CITY         := CITY         (TAMINO.)
       UPDATE
     END-FIND
*
END-READ
*
END TRANSACTION
*
END 
               		   
               		 
               	 
               	  
               		
               There are restrictions concerning the scope of the Tamino XML Schema language that can be used for creating schemas for Natural for Tamino DDM generation:
Only Tamino XML Schema language constructors and attributes
                        				  (as mentioned in
                        				  Tamino XML Schema Constructors in
                        				  the DDM Services section of the
                        				  Editors documentation) are supported by Natural
                        				  for Tamino. Other constructors such as xs:any,
                        				  xs:anyAttribute cannot be applied in Tamino XML Schemas if you
                        				  wish to use them together with Natural for Tamino.
                     
The functionality of xs:import is not supported by
                        				  Natural for Tamino. This means that external schema components must not be
                        				  referenced in a Tamino XML Schema suitable for usage together with Natural. In
                        				  other words, a doctype definition in a Tamino XML Schema must resolve all
                        				  references within this Tamino XML Schema itself if you are planning to use it
                        				  together with Natural for Tamino.
                     
The attribute mixed of the
                        				  constructor xs:complexType is only supported with its default
                        				  value false. Natural for Tamino does not support mixed-content
                        				  document definitions (as set with the specification mixed="true").
                        				  Using mixed="true" will result in an error during DDM
                        				  generation.
                     
The level of nested structures in a Natural for Tamino DDM is limited to 99. A new DDM level is generated whenever one of the following constructors occurs in the Tamino XML Schema:
 
                        				   xs:element
 
                        				  xs:attribute
 
                        				  xs:choice
 
                        				  xs:all
 
                        				  xs:sequence 
                        				
                     
Recursively defined structures in a Tamino XML Schema cannot be used together with Natural for Tamino.
The Tamino XML Schema language constructor
                        				  xs:choice is mapped on a Natural group containing all alternatives
                        				  of the choice. To restrict processing to one particular choice, an appropriate
                        				  view with the required choice has to be created.
                     
Natural for Tamino only supports "closed content validation mode". Tamino XML Schemas with "open content validation mode" cannot be used together with Natural for Tamino.
For the Tamino XML Schema language constructors
                        				  xs:choice, xs:sequence and xs:all, a
                        				  value greater than 1 of the attribute maxOccurs
                        				  cannot be handled in the Natural data structures. Hence a value greater than 1
                        				  will always lead to an error during DDM generation.
                     
Natural for Tamino can handle only Tamino objects that are
                        				  defined with a Tamino XML Schema as a subset of the W3C schema. Especially
                        				  Natural for Tamino does not support non-XML (tsd:nonXML) data or
                        				  instances without a defined schema (ino:etc).