plml_doc.dtd

PLMLx

Extended Pattern Language Markup Language

The intention of PLML is to provide a general structure for pattern documents. The data types of the contents of pattern elements were relaxed to ANY so any type of content could appear within a pattern element (tag).

In some cases I saw that content is marked up using HTML tags. That is OK if a namespace syntax is used.

I got my personal experience writing a pattern collection for CHI2004. To my opinion HTML mark up is not the ideal solution: - HTML can be conform to XML syntax rules, but it has not to be (from the browsers point of view; not W3C). - In most cases we as authors like pretty printed documents e.g. for proceedings. - There are several layout elements far beyond HTML that authors would like to use. - Autogenerated document parts like a TOC are useful and in many cases necessary.

So my aim was to use PLML in such a way that I could write a Pattern collection in an article-like style: with title, abstract, introduction, patterns, biblio, etc.

In my opinion DocBook (http://www.docbook.org) seems to be the right publishing environment where PLM can be nested. So this is a starting for PLMLx:

Last but not least: found a nice tool DTDDoc (dtddoc.sourceforge.net) to document the PLML DTD.

PLMLx 0.01 change-log

v.0.01 by Diethelm Bienhaus 20.07.2004

Background

Background information can be found on the Internet: http://www.cs.kent.ac.uk/people/staff/saf/patterns/plml.html

And the CHI2003 workshop report: http://www.cs.kent.ac.uk/people/staff/saf/patterns/CHI2003WorkshopReport.doc

PLML 1.00 change-log

Change log: from the original document plml.1.00.dtd (available at the Internet: http://hcipatterns.org/tiki-list_file_gallery.php)

v.1.1.2 by Susan 26/05/2003. - added collection to pattern (for concistency with pattern-link) v.1.1.1 by Jan, Susan 27/04/2003. - changed order of elements - added change-log in management

v.1.1 by Martijn 21/04/2003. - Relaxed datatypes so that pattern-link can be used almost everywhere. - pattern-link was extended to include new attributes collection and label - Renamed ID to patternID

v.1.0 by Xavier 07/04/2003. - Initial draft.

References

[PLPW] "A Pattern Language for Pattern Writing" Gerard Meszaros, Jim Doble. available on the web from: http://hillside.net/patterns/writing/patternwritingpaper.htm

[Fin2003] "Perspectives on HCI patterns: concepts and tools (introducing PLML)". Sally Fincher. Interfaces, (56):26-28, September 2003. available on the web from: http://www.bcs-hci.org.uk/interfaces.html



<pattern>

pattern is the the root element for a single Pattern.

<pattern>'s children
NameCardinality
acknowledgmentsOne or none
aliasAny number
confidenceOne or none
contextOnly one
diagramOne or none
exampleAny number
forcesOnly one
illustrationOne or none
implementationOne or none
literatureOne or none
managementOne or none
nameOnly one
organizationOne or none
problemOnly one
rationaleOne or none
related-patternsOne or none
resulting-contextOne or none
solutionOnly one
synopsisOne or none
<pattern>'s attributes
NameValuesDefault
patternID
Element's model :

(name,alias*,illustration?,problem,context,forces,solution,synopsis?,diagram?,example*,rationale?,confidence?,implementation?,resulting-context?,related-patterns?,acknowledgments?,literature?,organization?,management?)


patternID Attribute of pattern

the ID of the pattern.

Required


<name> Child of pattern

A name by which this problem/solution pairing can be referenced. [PLPW]

<name>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<alias> Child of pattern

Alias names by which this pattern might be known.


<illustration> Child of pattern

Most pattern forms contain a picture, a really good example of an instantiation of the pattern “in real life”. For HCI patterns this usually means a screen-shot, although it could be a contextualising image (perhaps a photograph of people doing something); multi-media clips are not unknown. [Fin2003]

<illustration>'s children
NameCardinality
figureOnly one
Element's model :

(figure)


<problem> Child of pattern

The specific problem that needs to be solved. Use Context-Free Problem to ensure that the problem is kept separate from the constraints on the solution. [PLPW]

DocBook "figure" can contain several types of mediaobjects like image, audio and video. (see: http://www.docbook.org/xml/simple/sdocbook/elements.html)

<problem>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<context> Child of pattern

The circumstances in which the problem is being solved imposes constraints on the solution. The context is often described via a "situation" rather than stated explicitly. Sometimes, the context is described in terms of the patterns that have already been applied. The relative importance of the forces (those that need to be optimized at the expense of others) is determined by the context. [PLPW]

<context>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<forces> Child of pattern

The often contradictory considerations that must be taken into account when choosing a solution to a problem. The relative importance of the forces (those that need to be optimized at the expense of others) is implied by the context. [PLPW]

<forces>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<solution> Child of pattern

The proposed solution to the problem. Note that many problems may have more than one solution, and the "goodness" of a solution to a problem is affected by the context in which the problem occurs. Each solution takes certain forces into account. It resolves some forces at the expense of others. It may even totally ignore some forces. The most appropriate solution to a problem in a is the one that best resolves the highest priority forces as determined by the particular context. Use Solution Clearly Related to Forces to ensure that the reader understands why this solution was chosen. [PLPW]

<solution>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<synopsis> Child of pattern

This acts as a summary of the pattern, and may be particularly useful for situations where there is limited display-space. [Fin2003]

<synopsis>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<diagram> Child of pattern

A diagram is different from an illustration. The purpose of a diagram is to communicate to the user of the pattern—the designer—details that are more readily expressed (and apprehensible) in schematic form. Sometimes this is a free-hand sketch; sometimes it is a more formal representation, such as UML. [Fin2003]

<diagram>'s children
NameCardinality
figureOnly one
Element's model :

(figure)


<rationale> Child of pattern

All the patterns in this language have Mandatory Elements Present. This ensures that potential users of these patterns understand why and when to apply them. The elements are highlighted through the use of headings. Most of these patterns start with the Problem statement followed by the Context, while others start with the Context. This was done to illustrate both styles. [Berczuk96] consistently places the Context before the Problem section. [PLPW]

A pattern goes beyond a mere description of the solution by providing a window on the thought processes behind choosing the solution. The mandatory pattern elements described here are essential to communication of this information. In the many patterns that have been written since The Timeless Way of Building [Alexander79] and A Pattern Language [Alexander77] were first published, these mandatory elements have been found to be the minimum information required to effectively communicate a pattern. [PLPW]

<rationale>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<confidence> Child of pattern

If used, we propose that this should be expressed as a rating, normally a star-rating (following the system used in A Pattern Language (Alexander et al., 1977): zero, one or two-stars). [Fin2003]


<literature> Child of pattern

References of the pattern to other works like papers and books. In case of a pattern language or collection a tool (e.g. a XSL processor) can collect all bibliographical entries for the reference list.

<literature>'s children
NameCardinality
bibliomixedAny number
Element's model :

(bibliomixed)*


<implementation> Child of pattern

Some patterns exspecially from technical domains come with code or code fragments showing how to implement the pattern.

<implementation>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<resulting-context> Child of pattern

The context that we find ourselves in after the pattern has been applied. It can include one or more new problems to solve. This sets us up for applying more patterns, possibly the next pattern(s) in a language. [PLPW]

<resulting-context>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<related-patterns> Child of pattern

Other patterns that may be of interest to the reader. The kinds of patterns include:

[PLPW]

<related-patterns>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<pattern-link/>

Link to another pattern

<pattern-link>'s attributes
NameValuesDefault
collection
label
patternID
type

This tag is always empty.


type Attribute of pattern-link

Type of the pattern link

Required


patternID Attribute of pattern-link

unique ID of the pattern

Required


collection Attribute of pattern-link

collection that contains the pattern

Required


label Attribute of pattern-link

label of this link

Required


<acknowledgments> Child of pattern

You should acknowledge anyone who contributed significantly to the development of the pattern (or language) or the techniques described in it. If your pattern has been through a "shepherding process" or "writer's workshop", significant contributors (such as the shepherd!) are candidates for being acknowledged. [PLPW]

<acknowledgments>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<organization> Child of pattern

Organisational meta data of a pattern. A single pattern may be part of several collections.

<organization>'s children
NameCardinality
categoryOne or none
classificationOne or none
collectionAny number
Element's model :

(collection*,classification?,category?)


<collection> Child of organization

One entry in the sequence of collections that contain this pattern.


<classification> Child of organization

There are several approaches to classify patterns: GoF, POSA or Linda Rising's work. Maybe, once upon a time in the future there will be a common taxonomy. At least, here is an element for that.


<category> Child of organization

Category of the pattern like "HCI", "Organizational" or "Pedagogical", etc.


<management> Child of pattern

Meta data of the pattern. "author" is already defined in DocBook.

<management>'s children
NameCardinality
authorOne or none
change-logOnly one
copyrightOne or none
creation-dateOne or none
creditsOne or none
licenceOne or none
revision-numberOne or none
Element's model :

(author?,revision-number?,creation-date?,change-log,credits?,copyright?,licence?)


<creation-date> Child of management

Creation date.

<creation-date>'s children
NameCardinality
dateOnly one
Element's model :

(date)


<credits> Child of management

Credits


<revision-number> Child of management

To fix : How are revision-number and version related


<last-modified>

last modification


<ptname>

Pattern name: either a String or a URL link

<ptname>'s children
NameCardinality
ulinkAny number
Element's model :

(#PCDATA | ulink)*


<change-log> Child of management

Change-log contains a sequence of "change".

<change-log>'s children
NameCardinality
changeAny number
Element's model :

(change*)


<change> Child of change-log

Each "change" is defined by a version, one or more authors and a description.

<change>'s children
NameCardinality
authorAt least one
descriptionOnly one
versionOnly one
Element's model :

(version,author+,description)


<version> Child of change

Version numbers should be given in a way similar to software releases. After important changes the major number is incremented. Smaller revisions are count in the minor number. Each version has a date element.

<version>'s children
NameCardinality
dateOnly one
majorNrOnly one
minorNrOnly one
Element's model :

(majorNr,minorNr,date)


<majorNr> Child of version

After important changes the major number is incremented.


<minorNr> Child of version

Count for smaller revisions.


<description> Child of change

description what was changed

<description>'s children
NameCardinality
paraAny number
Element's model :

(para)*


<licence> Child of management

License under which the pattern is published. E.g. the "GNU Free Documentation License", "Common Documentation License" or the "Open Publication License". The URL of the license is an optional element.

<licence>'s children
NameCardinality
licencetypeOnly one
ulinkOne or none
Element's model :

(licencetype,ulink?)


<licencetype> Child of licence

License type like "GNU Free Documentation License", "Common Documentation License" or the "Open Publication License".


<para> Child of forces,context,implementation,synopsis,acknowledgments,resulting-context,rationale,solution,name,related-patterns,description,problem

see documentation at oasis-open: para


<author> Child of change,management

see documentation at oasis-open: author


<example> Child of pattern

see documentation at oasis-open: example


<copyright> Child of management

see documentation at oasis-open: copyright


<figure> Child of diagram,illustration

see documentation at oasis-open: figure


<link>

see documentation at oasis-open: link


<ulink> Child of licence,ptname

see documentation at oasis-open: ulink


<date> Child of version,creation-date

see documentation at oasis-open: date


<bibliomixed> Child of literature

see documentation at oasis-open: bibliomixed