Note that the X-definition in the example below has the attributes "name" and "root" (see line 1). The attribute "root" specifies which model (or models) from the X-definition can be used as the root elements of the input data. The attribute "name" contains the name of X-definition (it is required if the project is composed from more X-definitions). Note also that the element "xd:declaration" has the attribute scope="global", which specifies that the contents of the declaration are "visible" from all X-definitions (the attribute is optional and the default value is "local" - i.e. the declaration is visibble only from the this X-definition).
<xd:def xmlns:xd="http://www.xdef.org/xdef/4.2" name="Example" root="Inventory" >
<xd:declaration scope="global">
void message(String s) {
outln(s);
}
int count = 0;
type isbn int(10000000, 999999999);
</xd:declaration>
<Inventory xd:script="init message('Created ' + now()); finally message('Processed ' + count + ' books');">
<Book xd:script="occurs +; onAbsence error('No books!'); finally {count++; outln('ISBN code: " ' + @ISBN)};"
ISBN="isbn;"
published="optional gYear();" >
<Author xd:script="occurs *" >
string()
</Author>
<Title>
string();
</Title>
</Book>
</Inventory>
</xd:def>
You can try it HERE