attribute — a curve that describes a feature or product related to selected stratum


Content Model

<attribute> = (curve | expression)?


id alpha-numeric: unique identifier Optional
idref reference to a previously defined attribute 'id'Require either idref or label
label attribute name (for example "feature.Area.managed.PL")Require either idref or label
curveidreference to a previously defined curve 'id' 
cycleboolean ("true" or "false")true
factordecimal between 1.0 and 0.01.0
futurenumber of years in the future0.0
methodkeyword "census" or "series""census"
outputString ("true", "false", or "nonzero")true
scalemethodtoken: A, N or PA


An <attribute> is a wrapper that provides an attribute name for a curve. Be aware that there are <attribute> and <attributes> elements, each with distinct syntax and meaning.

<attribute> elements give meaning and context to the curves they represent. An attribute can provide a meaningful label to describe the feature or product represented by a curve. <attribute> elements can help to reduce redundancy throughout the entire ForestModel. The 'label'attribute should follow a meanigful and consistent nomenclature pattern, as these values are referenced from many places throughout the Patchworks model.

An <attribute> element can either contain a curve definition or curve reference, or by using 'idref' it can refer to an <attribute> that has already been declared previously. When creating a new <attribute> then 'label' must be specified and 'idref' is not allowed. When referring to an existing <attribute> 'idref' should be specified and 'label' is not allowed.


These elements contain attribute elements: attributes, features, products.


Only one of the following elements may occur in attribute: curve, expression. If either is specified then the idref and curveid attributes may not be specified.



A unique label that can be used to reference the attribute curve from parts of the ForestModel file.


A reference to a previously defined attribute ('id'). When a idref is specified then curveid, <curve> and <expression> are not allowed.


A reference to a previously defined curve ('id'). The previously defined curve will be used for this attribute. When a curveid is specified then idref, <curve> and <expression> are not allowed.


This attribute is a unique alpha-numerical name that is given to identify the curve it describes. For example, the curve may represent the yield of a deciduous stand, therefore the attribute label would be something meaningful like <attribute label="feature.Yield.managed.Deciduous">. The attribute will appear as a column in the Block Attribute Table, using the label as the column heading.


The cycle attribute indicates the processing that should occur when a succession event occurs (see succession). When a value of true is specified the attribute will be truncated at the succession age, and the post-succession values will come from the post succession stand attribute. When the value is false then the output value is taken from the original attribute curve as though no succession had occurred.

In most cases the default value of true should be used to allow the values to be calculated from the post-successional attributes after a succession event. However, in some specific cases it is appropriate that the curve does not cycle. For example, a visual disturbance curve could be represented by:

      <attribute label="feature.Visual.disturbed" cycle="false">
	<curve id="Visual.disturbed">
         <point x="0" y="1.0"/>
	  <point x="29" y="1.0"/>
	  <point x="30" y="0.0"/>

Natural succession events typically represent the slow change in forest dynamics. After a stand goes through a successional process of senescence, overstory collapse and emergence of a new understory it is unlikely to be in a condition that would be considered to be equivalent to an anthropogenic disturbance.

The output values for the above example will indicate a value of 1 for ages less than 30, and a value of 0 from age 30 to the end of the planning horizon, regardless if a succession event caused the stand to revert to an earlier age or a different forest type. The attribute only has non-zero values for the disturbance criteria if it is initially at a young age or if a management treatment is applied.


The behaviour of the cycle attribute is only applied when it occurs on an attribute that is being output as a product as a feature, and the value of the cycle attribute is propagated to all attribute sub-expressions. In the following example, an attribute is defined having a the cycle attribute, and is reused by an attribute that does not specify the cycle attribute.

  <select statement="fu = 'SP'">
      <attribute label="feature.Visual.disturbed" id="disturbed" cycle="false">
	  <curve id="Visual.disturbed">
          <point x="0" y="1.0"/>
	    <point x="29" y="1.0"/>
	    <point x="30" y="0.0"/>
  <select statement="fu = 'PO'">
      <attribute idref="disturbed" />

The attribute that is applied to fu = 'SP' will behave with cycle="false" processing, and the attribute that is applied to fu = 'PO' will behave with cycle="true" processing.


Factor defines a scaling factor to be applied to the contents of the <attribute> element.

    <attribute label="feature.Yield.managed.Po" factor="0.97">
        <curve idref="754.PR1.Intn1.Po" />

In the above example a previously defined curve has is referenced with an if of "754.PR1.Intn1.Po". The attribute being created ("feature.Yield.managed.Po") is described by a similar shape but scaled back by 3% (0.97).

The factor value may be an expression in the Patchworks Query Language. The expression may use literals, defined values and functions. The factor will be calculated for each block that the attribute is applied to. For example,



The future specification allows the value of the attribute to be added to the appropriate account not at the present year but at the defined number of years in the future.


This attribute only applies to product attributes, and is ignored if specified on feature attributes.

The default value is 0.

For example, when a treatment involves a harvest, plant and pre commercial thinning 20 years later the charges for the harvest and plant will be incurred in the period the treatment takes place. It would be unrealistic to incur the charges for the pre-commercial thinning in that period as well, since it will not take place for approximately 20 years. If the thinning attribute specified a 'future' value of 20.0, the value of this attribute would not be added to the account until the thinning actually takes place. This allows for more realistic budget estimates over the entire planning horizon.


Negative future values can be used to specify years prior to the present.


The method attribute may have a value of "census" or "series". "Series" indicates that the value from the period is the summation of each year in period. The default "census" indicates that feature values are assessed at the final year of the period, and product values are assessed at the year of harvest.


If the method is "series" then the future value is ignored.


output may be false, true or nonzero, and indicates if the stand attribute calculation is only used for intermediate calculations and should not be output, if the attribute should always be added to the output data set, or if the attribute should only be added if the curve value is non-zero (respectively). By default all attributes within <product> or <feature> elements are output to the matrix.

Suppressing output can be useful when factoring complex expressions in to smaller and easier to understand sub-expressions and the intermediate calculations do not need to be shown. Limiting output to non-zero values can help to reduce the number of active curves in the simulation model.

Curves used only for operability clauses in treatment elements can be suppressed from output since they are not needed to build account values.


This option provides information to the Patchworks program on how the curve and expression values in the attribute are transformed and added to the matrix. Three scaling methods are possible: Area, Proportional and No scaling. Specifying this value will add a column to the products and features files, indicating the scaling method for Patchworks to use.

By default all curve or expression values will use area-based scaling (A) which multiplies the attribute by the area of the stand.

With the no-scaling option (N) the attribute values will not be multiplied by stand area, and instead they are added to the matrix as is. This may be useful for presence-absence data to indicate if stands contain a feature, for example as a patching criteria. When used this way the resulting attribute values would not have to be normalized by stand area in order to determine the original unscaled value.

With the proportional-scaling option (P) Patchworks will determine the proportion of the stand that is made up of the managed and unmanaged components. The attribute is multiplied by the component proportion before being added to the matrix.

Note that the attribute values are calculated independently for the managed and unmanaged portions of the polygon. If the same attribute occurs in both portions and the no-scaling method (N) is used then the attribute value is added for both components, possible resulting in double the expected value. If proportional-scaling is used then each value is added in proportion, resulting in an area weighted average.

See Also

attributes, curve, succession, expression.


    <attribute label="%f.Seral.disturbed" cycle="false">
        <point x="0.0" y="1.0" />
        <point x="20.0" y="1.0" />
        <point x="21.0" y="0.0" />

In this example the '%f' that is present in the attribute label will be replaced with 'feature' or 'product' as appropriate for the parent container. Meaning, in a <features> tag the attribute label will become 'feature.Seral.disturbed', whereas if the same attribute and label was used in a <products> element the attribute label would be 'products.Seral.disturbed'.

Similarly the '%m' tag will be replaced with 'managed' or 'unmanaged' depending on the status of the fragment that is being processed.

     <attribute label="feature.Yield.managed.Sw" factor="0.97">
        <curve idref="754.PR1.Intn1.Sw" />
     <attribute label="feature.Yield.managed.UH" factor="0.97">
        <curve idref="754.PR1.Intn1.UH" />

In the above example, the attribute element is scaling a previously defined curve by a factor of 0.97.