From 574e4d346f22c89c92aa13720a70f4c154ccc0d2 Mon Sep 17 00:00:00 2001 From: sb <sb> Date: Tue, 12 Jan 2010 14:29:09 +0000 Subject: [PATCH] bug 3343 : Added entity 'order' as a possible child of 'list' --- schemas/adl-1.4.dtd | 616 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 616 insertions(+) create mode 100755 schemas/adl-1.4.dtd diff --git a/schemas/adl-1.4.dtd b/schemas/adl-1.4.dtd new file mode 100755 index 0000000..3602c78 --- /dev/null +++ b/schemas/adl-1.4.dtd @@ -0,0 +1,616 @@ + <!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> + <!-- --> + <!-- adl-1.3.dtd --> + <!-- --> + <!-- Purpose: --> + <!-- Document Type Description for Application Description --> + <!-- Language. Normative for now; will be replaced by a schema. ` --> + <!-- --> + <!-- Author: Simon Brooke <simon@cygnets.co.uk> --> + <!-- Created: 24th January 2006 --> + <!-- Copyright: (c) 2007 Cygnet Solutions --> + <!-- --> + <!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> + + <!-- + $Revision: 1.1 $ + --> + +<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> +<!-- Before we start: import XHTML for use in documentation sections --> +<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> +<!-- doesn't work yet --> +<!-- ENTITY % XHTML PUBLIC + "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +%XHTML; --> + +<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> +<!-- Before we start: some useful definitions --> +<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> + +<!-- some basic character entities inherited from HTML. Actually we probably ought to +import all the HTML4 character entity files, and possibly the HTML4 Strict DTD (so +that we can allow HTML block level entities within content elements --> +<!ENTITY nbsp " "> +<!ENTITY pound "£"> +<!ENTITY copy "©"> + + +<!-- boolean means true or false --> +<!ENTITY % Boolean "(true|false)" > + +<!-- + Locale is a string comprising an ISO 639 language code followed by a space + followed by an ISO 3166 country code, or else the string 'default'. See: + <URL:http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt> + <URL:http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html> +--> +<!ENTITY % Locale "CDATA" > + +<!-- + permissions a group may have on an entity, list, page, form or field + permissions are deemed to increase as you go right. A group cannot + have greater permission on a field than on the form it is in, or + greater permission on form than the entity it belongs to + + none: none + read: select + insert: insert + noedit: select, insert + edit: select, insert, update + all: select, insert, update, delete +--> +<!ENTITY % Permissions "none|read|insert|noedit|edit|all" > + + +<!-- + actions which should be cascaded to dependent objects. All these values except + 'manual' are taken from Hibernate and should be passed through the adl2hibernate + mapping transparently. Relevent only for properties with type='entity', type='link' + and type='list' + + all : cascade delete, save and update + all-delete-orphan : see hibernate documentation; relates to transient objects only + delete : cascade delete actions, but not save and update + manual : cascading will be handled in manually managed code, code to + handle cascading should not be generated + save-update : cascade save and update actions, but not delete. +--> +<!ENTITY % CascadeActions "all|all-delete-orphan|delete|manual|save-update"> + +<!-- + data types which can be used in a typedef to provide validation - + e.g. a string can be used with a regexp or a scalar can be used with + min and max values + string: varchar java.sql.Types.VARCHAR + integer: int java.sql.Types.INTEGER + real: double java.sql.Types.DOUBLE + money: money java.sql.Types.INTEGER + date: date java.sql.Types.DATE + time: time java.sql.Types.TIME + timestamp: timestamp java.sql.Types.TIMESTAMP + uploadable: varchar java.sql.Types.VARCHAR + image: varchar java.sql.Types.VARCHAR + + uploadable is as string but points to an uploaded file; image is as + uploadable but points to an uploadable graphical image file +--> +<!ENTITY % DefinableDataTypes "string|integer|real|money|date|time|timestamp|uploadable" > + +<!-- + data types which are fairly straightforward translations of JDBC data types + boolean: boolean or java.sql.Types.BIT + char(1) java.sql.Types.CHAR + text: text or java.sql.Types.LONGVARCHAR + memo java.sql.Types.CLOB +--> +<!ENTITY % SimpleDataTypes "%DefinableDataTypes;|boolean|text" > + +<!-- + data types which are more complex than SimpleDataTypes... + entity : a foreign key link to another entity (i.e. the 'many' end of a + one-to-many link); + list : a list of some other entity that links to me (i.e. the 'one' end of + a one-to-many link); + link : a many to many link (via a link table); + defined : a type defined by a typedef. +--> +<!ENTITY % ComplexDataTypes "entity|link|list|defined" > + +<!-- + data types which require special handling - which don't simply map onto + common SQL data types + geopos : a latitude/longitude pair (experimental and not yet implemented) + image : a raster image file, in jpeg|gif|png format (experimental, not yet implemented) + message : an internationalised message, having different translations for different locales +--> +<!ENTITY % SpecialDataTypes "geopos|image|message" > + +<!-- all data types --> +<!ENTITY % AllDataTypes "%ComplexDataTypes;|%SimpleDataTypes;|%SpecialDataTypes;" > + +<!-- content, for things like pages (i.e. forms, lists, pages) --> +<!ENTITY % Content "head|top|foot" > + +<!ENTITY % FieldStuff "field|fieldgroup|auxlist|verb"> + +<!ENTITY % PageContent "%Content;|%FieldStuff;" > + +<!ENTITY % PageStuff "%PageContent;|permission|pragma" > + +<!-- Properties for pages: + name: obviously, the name (URL stub) of the page + properties: the properties of the entity the page describes to be shown + as fields on the page + all: obviously, all properties (except the abstract primary key, if + present) + user-distinct: all properties which are user-distinct (NOTE: Not yet implemented) + listed: only those properties for which fields are explicitly listed +--> +<!ENTITY % PageAttrs + "name CDATA #REQUIRED + properties (all|user-distinct|listed) #REQUIRED" > + +<!-- Actions for generators (mainly for keyfields - see entity 'generator', below + assigned: In manually-maintained code, you contract to assign a value + to this property before it is persisted. + guid: The system will supply a unique GUid value to this field + before it is persisted. + mannual: You contract to supply a generatos class in manually maintained + code. + native: The database will supply a unique value to this field when it + is persisted; the value will be an integer. RECOMMENDED! +--> +<!ENTITY % GeneratorActions "assigned|guid|manual|native"> + +<!-- sequences for orderings of lists - see entity 'order' + canonical: Whatever the normal canonical ordering for this datatype is - + typically alpha-numeric, except for dates, etc. + reverse-canonical: The reverse of the above + + possibly there should be some further values but I have no idea what these are +--> +<!ENTITY % Sequences "canonical|reverse-canonical"> + +<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> +<!-- Elements --> +<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: --> + +<!-- + the application that the document describes: required top level element + + name: the name of this application + version: the version number of this application + revision: the revision of the ADL document + currency: the base monetary currency, in the form of an ISO 4217 three-letter code + xmlns: XML namespace, in case required +--> +<!ELEMENT application ( specification*, documentation?, content?, typedef*, group*, entity*)> +<!ATTLIST application + name CDATA #REQUIRED + version CDATA #IMPLIED + revision CDATA #IMPLIED + currency CDATA #IMPLIED + xmlns CDATA #IMPLIED> + +<!-- + the definition of a defined type. At this stage a defined type is either + a string in which case it must have size and pattern, or + a scalar in which case it must have minimum and/or maximum + pattern must be a regular expression as interpreted by org.apache.regexp.RE + minimum and maximum must be of appropriate format for the datatype specified. + Validation may be done client-side and/or server-side at application layer + and/or server side at database layer. + + name: the name of this typedef + type: the simple type on which this defined type is based; must be + present unless in-implementation children are supplied + size: the data size of this defined type + pattern: a regular expression which values for this type must match + minimum: the minimum value for this type (if base type is scalar) + maximum: the maximum value for this type (if base type is scalar) + --> +<!ELEMENT typedef (documentation?, in-implementation*, help*) > + +<!ATTLIST typedef + name CDATA #REQUIRED + type (%DefinableDataTypes;) #IMPLIED + size CDATA #IMPLIED + pattern CDATA #IMPLIED + minimum CDATA #IMPLIED + maximum CDATA #IMPLIED> + +<!-- + information about how to translate a type into types known to different target + languages. TODO: Once again I'm not wholly comfortable with the name; I'm not + really comfortable that this belongs in ADL at all. + + target: the target language + value: the type to use in that target language + kind: OK, I confess I don't understand this, but Andrew needs it... +--> +<!ELEMENT in-implementation (documentation?)> + +<!ATTLIST in-implementation + target CDATA #REQUIRED + value CDATA #REQUIRED + kind CDATA #IMPLIED> + +<!-- + a group of people with similar permissions to one another + + name: the name of this group + parent: the name of a group of which this group is subset + --> +<!ELEMENT group (documentation?)> + +<!ATTLIST group + name CDATA #REQUIRED + parent CDATA #IMPLIED> + + + +<!-- + an entity which has properties and relationships; maps onto a database + table or a Java serialisable class - or, of course, various other things + + name: obviously, the name of this entity + natural-key: if present, the name of a property of this entity which forms + a natural primary key [NOTE: Only partly implemented. NOTE: much of + the present implementation assumes all primary keys will be + integers. This needs to be fixed!] DEPRECATED: remove; replace with the + 'key' element, below. + table: the name of the table in which this entity is stored. Defaults to same + as name of entity. Strongly recommend this is not used unless it needs + to be different from the name of the entity + foreign: this entity is part of some other system; no code will be generated + for it, although code which links to it will be generated +--> +<!ELEMENT entity ( documentation?, prompt*, content?, key?, + property*, permission*, (form | page | list)*)> +<!ATTLIST entity + name CDATA #REQUIRED + natural-key CDATA #IMPLIED + table CDATA #IMPLIED + foreign %Boolean; #IMPLIED> + +<!-- + contains documentation on the element which immediately contains it. TODO: + should HTML markup within a documentation element be allowed? If so, are + there restrictions? +--> +<!ELEMENT documentation ( #PCDATA|reference)*> +<!ATTLIST documentation + xmlns CDATA #IMPLIED> + + +<!-- an explicit primary key, possibly compound --> +<!ELEMENT key (property*)> + + +<!-- + a property (field) of an entity (table) + + name: the name of this property. + type: the type of this property. + default: the default value of this property. There will probably be + magic values of this! + typedef: name of the typedef to use, it type = 'defined'. + distinct: distinct='system' required that every value in the system + will be distinct (i.e. natural primary key); + distinct='user' implies that the value may be used by users + in distinguishing entities even if values are not formally + unique; + distinct='all' implies that the values are formally unique + /and/ are user friendly (NOTE: not implemented). + entity: if type='entity', the name of the entity this property is + a foreign key link to. + if type='list', the name of the entity that has a foreign + key link to this entity + farkey: if type='list', the name of farside key in the listed + entity; if type='entity' and the farside field to join to + is not the farside primary key, then the name of that + farside field + required: whether this propery is required (i.e. 'not null'). + immutable: if true, once a value has been set it cannot be changed. + size: fieldwidth of the property if specified. + concrete: if set to 'false', this property is not stored in the + database but must be computed (manually written code must + be provided to support this) + cascade: what action(s) on the parent entity should be cascaded to + entitie(s) linked on this property. Valid only if type='entity', + type='link' or type='list'. + column: name of the column in a SQL database table in which this property + is stored. TODO: Think about this. + unsaved-value: + of a property whose persistent value is set on first being + committed to persistent store, the value which it holds before + it has been committed +--> +<!ELEMENT property ( documentation?, generator?, (permission|option|prompt|help|ifmissing)*)> + +<!ATTLIST property + name CDATA #REQUIRED + type (%AllDataTypes;) #REQUIRED + default CDATA #IMPLIED + typedef CDATA #IMPLIED + distinct (none|all|user|system) #IMPLIED + entity CDATA #IMPLIED + farkey CDATA #IMPLIED + required %Boolean; #IMPLIED + immutable %Boolean; #IMPLIED + size CDATA #IMPLIED + column CDATA #IMPLIED + concrete %Boolean; #IMPLIED + cascade (%CascadeActions;) #IMPLIED> + + +<!-- + marks a property which is auto-generated by some part of the system. + This is based on the Hibernate construct, except that the Hibernate + implementation folds both its internal generators and custom generators + onto the same attribute. This separates them onto two attributes so we + can police values for Hibernate's 'builtin' generators. + + action: one of the supported Hibernate builtin generators, or + 'manual'. 'native' is strongly recommended in most instances + class: if action is 'manual', the name of a manually maintained + class conforming to the Hibernate IdentifierGenerator + interface, or its equivalent in other languages +--> +<!ELEMENT generator (documentation?, param*)> +<!ATTLIST generator + action (%GeneratorActions;) #REQUIRED + class CDATA #IMPLIED> + +<!-- + A parameter passed to the generator. Again, based on the Hibernate + implementation. TODO: #PCDATA is wrong as the content model, as embedded + markup is definitely not allowed! + + name: the name of this parameter + + TODO: This needs to be renamed or removed because it conflicts with the + XHTML element of the same name. In fact it could be simply removed since + our usage is compatible with the XHTML usage, but it might be less + ambiguous to rename it. +--> +<!ELEMENT param (#PCDATA)> +<!ATTLIST param + name CDATA #REQUIRED> + + + +<!-- + one of an explicit list of optional values a property may have + NOTE: whether options get encoded at application layer or at database layer + is UNDEFINED; either behaviour is correct. If at database layer it's also + UNDEFINED whether they're encoded as a single reference data table or as + separate reference data tables for each property. + + value: the value of this option + + TODO: This needs to be renamed or removed because it conflicts with the + XHTML element of the same name. In fact it could be simply removed since + our usage is compatible with the XHTML usage, but it might be less + ambiguous to rename it. +--> +<!ELEMENT option (documentation?, prompt*)> +<!-- if the value is different from the prompt the user sees, specify it --> +<!ATTLIST option + value CDATA #IMPLIED> + + +<!-- + permissions policy on an entity, a page, form, list or field + + group: the group to which permission is granted + permission: the permission which is granted to that group +--> +<!ELEMENT permission (documentation?)> +<!ATTLIST permission + group CDATA #REQUIRED + permission (%Permissions;) #REQUIRED> + + +<!-- + pragmatic advice to generators of lists and forms, in the form of + name/value pairs which may contain anything. Over time some pragmas + will become 'well known', but the whole point of having a pragma + architecture is that it is extensible. +--> +<!ELEMENT pragma (documentation?)> +<!ATTLIST pragma + name CDATA #REQUIRED + value CDATA #REQUIRED> + +<!-- + a prompt for a property or field; used as the prompt text for a widget + which edits it. Typically there will be only one of these per property + per locale; if there are more than one all those matching the locale may + be concatenated, or just one may be used. + + prompt: the prompt to use + locale: the locale in which to prefer this prompt +--> +<!ELEMENT prompt (documentation?)> +<!ATTLIST prompt + prompt CDATA #REQUIRED + locale %Locale; #REQUIRED > + +<!-- + helptext about a property of an entity, or a field of a page, form or + list, or a typedef. Typically there will be only one of these per property + per locale; if there are more than one all those matching the locale may + be concatenated, or just one may be used. + + locale: the locale in which to prefer this prompt +--> +<!ELEMENT help (#PCDATA)> +<!ATTLIST help + locale %Locale; #REQUIRED + xmlns CDATA #IMPLIED > + +<!-- + helpful text to be shown if a property value is missing, typically when + a form is submitted. Typically there will be only one of these per property + per locale; if there are more than one all those matching the locale may + be concatenated, or just one may be used. Later there may be more sophisticated + behaviour here. +--> +<!ELEMENT ifmissing (#PCDATA)> +<!ATTLIST ifmissing + locale %Locale; #REQUIRED + xmlns CDATA #IMPLIED> + +<!-- a form through which an entity may be added or edited + + TODO: This needs to be renamed because it conflicts with the + XHTML element of the same name. +--> +<!ELEMENT form (documentation?, ( %PageStuff;)*)> +<!ATTLIST form %PageAttrs;> + + +<!-- a page on which an entity may be displayed --> +<!ELEMENT page (documentation?, ( %PageStuff;)*)> +<!ATTLIST page %PageAttrs;> + +<!ELEMENT order (documentation)> +<!ATTLIST order + property CDATA #REQUIRED + sequence %Sequences; #IMPLIED> + +<!-- + a list on which entities of a given type are listed + + onselect: name of form/page/list to go to when + a selection is made from the list +--> +<!ELEMENT list (documentation?, ( %PageStuff;|order)*)> +<!ATTLIST list %PageAttrs; + onselect CDATA #IMPLIED > + + +<!-- + a subsidiary list, on which entities related to primary + entities in the enclosing page or list are listed + + property: the property of the enclosing entity that this + list displays (obviously, must be of type='list') + onselect: the form or page of the listed entity to call + when an item from the list is selected + canadd: true if the user should be able to add records + to this list + --> +<!ELEMENT auxlist (documentation?, (prompt|%FieldStuff;)*)> +<!ATTLIST auxlist %PageAttrs; + property CDATA #REQUIRED + onselect CDATA #IMPLIED + canadd %Boolean; #IMPLIED> + +<!-- + a group of fields and other controls within a form or list, which the + renderer might render as a single pane in a tabbed display, for example. + --> +<!ELEMENT fieldgroup (documentation?, (prompt|permission|%FieldStuff;)*)> +<!ATTLIST fieldgroup + name CDATA #REQUIRED> + + +<!-- a field in a form or page + + property: the property which this field displays/edits + --> +<!ELEMENT field (documentation?, (prompt|help|permission)*) > +<!ATTLIST field + property CDATA #REQUIRED > + +<!-- a verb is something that may be done through a form. Probably the verbs 'store' + and 'delete' are implied, but maybe they need to be explicitly declared. The 'verb' + attribute of the verb is what gets returned to the controller --> +<!ELEMENT verb (documentation?, (prompt|help|permission)*) > +<!ATTLIST verb + verb CDATA #REQUIRED + dangerous %Boolean; #REQUIRED> + + +<!-- a container for global content --> +<!ELEMENT content (%Content;)*> + + +<!-- + content to place in the head of the generated document; this is #PCDATA + because it will almost certainly belong to a different namespace + (usually HTML) + + TODO: This needs to be renamed or removed because it conflicts with the + XHTML element of the same name. In fact it could be simply removed since + our usage is compatible with the XHTML usage, but it might be less + ambiguous to rename it. +--> +<!ELEMENT head (#PCDATA) > +<!ATTLIST head + xmlns CDATA #IMPLIED> + + +<!-- + content to place in the top of the body of the generated document; + this is %Flow; which is any HTML block or inline level element. +--> +<!ELEMENT top (#PCDATA) > +<!ATTLIST top + xmlns CDATA #IMPLIED> + +<!-- + content to place at the foot of the body of the generated document; + this is %Flow; which is any HTML block or inline level element. +--> +<!ELEMENT foot (#PCDATA) > +<!ATTLIST foot + xmlns CDATA #IMPLIED> + +<!-- + The 'specification' and 'reference' elements are for documentation only, + and do not contribute to the engineering of the application described. + + A specification element is intended chiefly to declare the reference + documents which may be used in documentation elements later in the + document. + + url: The URL from which the document referenced can be retrieved + name: The full name (title) given to this document + abbr: A convenient abbreviated name +--> +<!ELEMENT specification (documentation?, reference*)> +<!ATTLIST specification + url CDATA #IMPLIED + name CDATA #REQUIRED + abbr CDATA #REQUIRED + > + +<!-- + The 'specification' and 'reference' elements are for documentation only, + and do not contribute to the engineering of the application described. + + A reference element is a reference to a specifying document. + + abbr: The abbreviated name of the specification to which this + reference refers + section: The 'anchor part' (part following a hash character) which, + when appended to the URL, will locate the exact section + referenced. + entity: A reference to another entity within this ADL document + property: A reference to another property within this ADL document; + if entity is also specified then of that entity, else of + the ancestor entity if any + --> +<!ELEMENT reference (documentation?)> +<!ATTLIST reference + abbr CDATA #IMPLIED + section CDATA #IMPLIED + entity CDATA #IMPLIED + property CDATA #IMPLIED + > +