Home

MS Base

  • prefix: ms:
  • schema: b:

Categories (Data):

Categories (Governance):

relations:

 
 

Schema element "b:shadow"

Map the name of one Unit to something else, or all units in a collection to units in a different collection.

Definitions

<element name="shadow" type="b:Shadow" />

<complexType name="Shadow">
  <sequence />
  <attribute name="map" type="b:Expression" default="unit.id" />
  <attributeGroup ref="b:selector" />
</complexType>

Description

There are a few situations where a Unit needs to refer to

  • some other Unit (in different Collection), or
  • a Fragment in another Unit (in a different Collection)

Instead of specifying this relation for each Unit separately, it can also be written genericly in the rules of Collection. In that case, the shadow parameter maps Unit facts (usually simple the unit.id) to a (relative) Unit address to indicate an end-point. Each of the Units casts a shadow over data on the other spot.

Some examples for map expressions:

  • unit.id (default), maps unit names from one collection one-on-one to some names in the other collection
  • unit.id ~ ".doc" will map product to product.doc, which can reside in this or a different collection
  • unit.id =~ "^(\w+)\.(.*)" -> $1 ~ '-src.zip' will map windows11.pl123 into unit-id windows11-src.zip
  • unit.type like "*.jpg" -> 'jpegs.doc' only defines the relation for jpeg images. Other types return "undefined" here. Often, using when is easier to read.

Examples

refer to documentation organized by language

In the following example, the Collection explains that all Units have documentation organized per language in a separate Collection which is dedicated to that task.

The Application which wants to present the documentation, will need to search through the content of the destination Unit by itself. See msc:manual. The unit.id can appear more than once inside one manual, hence cannot be used as fragment indicator.

<b:has
  b:ref="Docs"
  b:type="ms:Type/Collection"
  b:is="ms:Role/Documentation"
>
  <b:shadow b:map="client.lang" />
</b:has>
"b_has" : {
  "b_ref" : "Docs",
  "b_type" : "ms:Type/Collection",
  "b_is" : "ms:Role/Documentation",
  "b_shadow" : {
    "b_map" : "client.lang"
  }
}

The expression client.lang produces the abbreviated name for the language constant, for instance nl-NL. In search of the optimal translation, the client application MAY need to attempt different values for the language.

This relation is declared in the Collection Rules, hence apply to all Units which are in that Collection (this can be restricted using the selector attributes when or unless). For any Unit (which do not provide documentation itself), the Rules explain to the client application to look into collection "Docs" (relative to this Collection) in the Unit with a name equivalent to the clients language.

When my client.lang is nl-NL and my Collection is app:picts, then Unit abc.jpg is redirecting to Unit app:picts/nl-NL


mark@overmeer.net      Web-pages generated on 2023-12-19