ISO 15926-4 Control Functions  latest update: 2008-03-03

In Part 4 you will find a set of approx. 120 control functions according VDE/VDI 3696.

Below we show an analysis diagram for one of them: SUB, a subtraction function, where one signal, called SUB_U1, is subtracted from a second signal, called SUB_U2, resulting in a third signal, called SUB_QV. This can be shown as:

  

 

We have to ask ourselves is: what exactly do we subtract: the signals or the magnitude of those signals? It is the latter.

Furthermore we have to deal with much more than can be seen in above simple sketch:

  • the hardware (subtraction relay or the like)
  • the activity of signal subtraction
  • the signals and their (part2:)properties
  • the magnitudes of those signals
  • the conductors conducting the signals to and from the subtraction relay (not dealt with here)
  • the link between the above and the function
  • the mathematical definition of the function

Analysis Diagram

First we make an analysis diagram, in which all aspects of this function are covered.

The legend below is taken from Part 2:

 

 

Let us review this diagram:

  • The diagram actually is three diagrams-in-one:
    • the top one defines the signal subtracting activity,
    • the middle one defines the properties of the signals, and
    • the bottom one defines the function

The activity diagram:

  • The relay and the signal classes are linked to an instance of ClassOfActivity called SignalSubtracting via instances of participation; Since they all are instances of ParticipatingRoleAndDomain it is known what their roles are in that activity
  • The link between the SignalSubtracting activity and the SUB function is made by means of an instance of ClassOfInvolvementBy Reference
  • The ParticipatingRoleAndDomain defines a domain (what it is) of, and a role played by, instances of that class; the specialization from RoleAndDomain is necessary to guarantee that the domain is specialized to ClassOfIndividual, i.e. that the instances are PossibleIndividuals (as required by the participation in activities)
  • Each signal class is a specialization of a Property class

The property diagram:

  • Each Property (NOTE: Property in the sense of Part 2!) is quantified with a RealNumber
  • Each RealNumber is represented by an XmlSchemaFloat
  • Each XmlSchemaFloat has a 'content' attribute listing a 'float' as defined in the W3C XML Schema Recommendation

The function diagram (bottom up):

  • We define an instance of ClassOfFunctionalMapping called Minus; Part 2 tells about a class_of_functional_ mapping the following: A <class_of_functional_mapping> is a <class_of_relationship> that is a many to one mapping., and also: When there are several arguments to a function, then these are presented in a <multidimensional_object>.
  • We have two inputs: x1 and x2, and one output: y; the two inputs are collected by means of SubtractionInput, a subClassOf MultidimensionalObject
  • Minus is defined by a MathML script (see 4.4.3.5 in the MathML Recommendation) (NOTE: These are instance data, since they are metadata of the class):

                          <apply> <minus/>  

                              <ci> x </ci>  

                              <ci> y </ci>

                          </apply>

  • SUB is a subClassOf Minus, because it applies specifically to control functions (Minus is generic); SUB_INPUT is a specialization of SubtractionInput and SUB_QV_VALUE a specialization of y; furthermore SUB_U1_VALUE and SUB_U2_VALUE are a specialization of x1 resp. x2.

In order to be able to use SUB as a definition for the ClassOfActivity SignalSubtracting we turn it into an instance of RoleAndDomain, where the Domain is ControlFunction and the Role is 'Definer'.

The above is what it says: an analysis. Very necessary to warrant a proper use of the ISO 15926-2 data model, but of course not very useful for implementation. But very much a nuisance when you want to use it in daily practice. Therefore we use templates, that sweep the complexity under the carpet, but if necessary we can access that complexity to find out what exactly the semantical constructs are for the templates we use.

Now then, first we will discuss the end result, and if you feel the urge to study the details, that will be possible after that.

The end result

We started with a simple sketch:

and we need to come as close to that simplicity as possible. The format of the ShorthandTemplate for this function is:

    <part7:ST-SignalSubtracting rdf:ID="A">

        <part7:subtractionFunction rdf:resource="#B"/>

        <part7:subtractionActivity rdf:resource="#C"/>

        <part7:subtractionPerformer rdf:resource="#D"/>

        <part7:subtractionReference rdf:resource="#E"/>

        <part7:subtractionDifferand rdf:resource="#F"/>

        <part7:subtractionDifference rdf:resource="#G"/>

    </part7:ST-SignalSubtracting>

where:

  • A is the ID of the template instance
  • B is the ID of what is shown as 'Sub' in above sketch
  • C is the ID of the activity
  • D is the ID of the actual hardware
  • E is the ID of what is shown as 'SubU1' in above sketch
  • F is the ID of what is shown as 'SubU2' in above sketch
  • G is the ID of what is shown as 'SubQv' in above sketch

The parameters C through G represent instances of part2:WholeLifeIndividual. Any lifecycle information about these individuals will have to come in the form of instances of the applicable nodes or templates. If, for example, you want to know what kind of signal E is, then that signal has been declared by:

     <MilliampDcCurrent rdf:ID="E"/>

And if we want to know what the actual value of signal G was at a certain date-time, that will be possible. Or if you want to know where you hardware D physically was located at a certain date-time, that will be possible as well.

Subtraction relays usually do not come as solitary objects, but are part of some control loop, like this one (courtesy DSM):

The signals are linking the functions into such a configuration. Their role name (e.g. U2) may change, but they are the same signal when they exit one block and enter another.

Casting it in Reference Data and Templates

Below is an RDF/OWL representation in the RDF/XML format.

First we have to discover how many reference data and templates we are going to need for this, and where these will be used.

In case you want to see how this is implemented in Templates, you can skip the RDF/OWL reference data below, and go straight to the templates and examples of template instances. Click here.

Part 2 - Data Model

As indicated in the legend the lightblue rectangles are for entity data types defined in the OWL version of the ISO 15926-2 data model.

Part 4 - Reference Data

NOTE: The IDs in text will be replaced with a numerical identifier, and this ID in text will be the rdf:label. This is done here to make this listing a bit more understandable for human beings (the computer doesn't need that).

  

We start with the full representation. Once we have the tools ready, this RDF/OWL representation will be automatically generated from the analysis diagram, so don't worry. All this is going to be stored in the Part 4 Façade, and can be used by anyone without having to bother about the complexity.

The following reference data (classes) have to be in Part 4 (the details like a definition are left out here) (fasten your seat belt :-)   ):

For the top part of the above analysis diagram:

 

<rdf:RDF

 

    xml:base="http://rdl.rdlfacade.org/data"

    xmlns="http://rdl.rdlfacade.org/data#"

    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"

    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"

    xmlns:owl="http://www.w3.org/2002/07/owl#"

    xmlns:part2="http://dm.rdlfacade.org/data#"

    xmlns:part7="http://tpl.rdlfacade.org/data#">

 

    <owl:Ontology rdf:about=""/>

 

    <part2:Role rdf:ID="Performer"/>

    <part2:Role rdf:ID="Reference"/>

    <part2:Role rdf:ID="Differand"/>

    <part2:Role rdf:ID="Difference"/>

 

<!--declaration of players-->

 

    <part2:ClassOfInanimatePhysicalObject rdf:ID="InanimatePhysicalObject">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#PhysicalObject"/>

    </part2:ClassOfInanimatePhysicalObject>

 

    <part2:ClassOfInanimatePhysicalObject rdf:ID="AnalogRelay">

        <rdfs:subClassOf rdf:resource="#InanimatePhysicalObject"/>

    </part2:ClassOfInanimatePhysicalObject>

 

    <part2:ClassOfInanimatePhysicalObject rdf:ID="Signal">

        <rdfs:subClassOf rdf:resource="#InanimatePhysicalObject"/>

    </part2:ClassOfInanimatePhysicalObject>

 

    <part2:ParticipatingRoleAndDomain rdf:ID="SubRelay">

        <rdfs:subClassOf rdf:resource="#Performer"/> <!--in Part 2: specialization_by_role-->

        <rdfs:subClassOf rdf:resource="#AnalogRelay"/> <!--in Part 2: specialization_by_domain-->

    </part2:ParticipatingRoleAndDomain>

 

   <part2:ParticipatingRoleAndDomain rdf:ID="SubU1Signal">

        <rdfs:subClassOf rdf:resource="#Reference"/>  <!--in Part 2: specialization_by_role-->

        <rdfs:subClassOf rdf:resource="#Signal"/>  <!--in Part 2: specialization_by_domain-->

        <rdfs:subClassOf rdf:resource="#SubU1SignalProperty"/>  <!--SubU1Signal has SubU1SignalProperty-->

    </part2:ParticipatingRoleAndDomain>

 

   <part2:ParticipatingRoleAndDomain rdf:ID="SubU2Signal">

        <rdfs:subClassOf rdf:resource="#Differand"/>  <!--in Part 2: specialization_by_role-->

        <rdfs:subClassOf rdf:resource="#Signal"/>  <!--in Part 2: specialization_by_domain-->

        <rdfs:subClassOf rdf:resource="#SubU2SignalProperty"/>  <!--SubU2Signal has SubU2SignalProperty-->

    </part2:ParticipatingRoleAndDomain>

 

   <part2:ParticipatingRoleAndDomain rdf:ID="SubQvSignal">

        <rdfs:subClassOf rdf:resource="#Difference"/>  <!--in Part 2: specialization_by_role-->

        <rdfs:subClassOf rdf:resource="#Signal"/>  <!--in Part 2: specialization_by_domain-->

        <rdfs:subClassOf rdf:resource="#SubQvSignalProperty"/>  <!--SubQvSignal has SubQvSignalProperty-->

    </part2:ParticipatingRoleAndDomain>

 

<!--then the activity and its participation relationships-->

 

    <part2:ClassOfActivity rdf:ID="SignalSubtracting">

        <rdfs:subClassOf rdf:resource="#Subtracting"/>

    </part2:ClassOfActivity>

 

    <part2:ClassOfParticipation rdf:ID="SubRelayParticipatesInSignalSubtracting">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#Participation"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#part"/>

                <owl:allValuesFrom rdf:resource="#SubRelay"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#whole"/>

                <owl:allValuesFrom rdf:resource="#SignalSubtracting"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfParticipation>

 

    <part2:ClassOfParticipation rdf:ID="SubU1SignalParticipatesInSignalSubtracting">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#Participation"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#part"/>

                <owl:allValuesFrom rdf:resource="#SubU1Signal"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#whole"/>

                <owl:allValuesFrom rdf:resource="#SignalSubtracting"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfParticipation>

 

    <part2:ClassOfParticipation rdf:ID="SubU2SignalParticipatesInSignalSubtracting">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#Participation"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#part"/>

                <owl:allValuesFrom rdf:resource="#SubU2Signal"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#whole"/>

                <owl:allValuesFrom rdf:resource="#SignalSubtracting"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfParticipation>

 

    <part2:ClassOfParticipation rdf:ID="SubQvSignalParticipatesInSignalSubtracting">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#Participation"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#part"/>

                <owl:allValuesFrom rdf:resource="#SubQvSignal"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#whole"/>

                <owl:allValuesFrom rdf:resource="#SignalSubtracting"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfParticipation>

 

<!--and the definition of the relay function-->

 

    <part2:ClassOfInvolvementByReference rdf:ID="SubIsInvolvedByReferenceInSignalSubtracting">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#InvolvementByReference"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#involved"/>

                <owl:allValuesFrom rdf:resource="#Sub"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#involver"/>

                <owl:allValuesFrom rdf:resource="#SignalSubtracting"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfInvolvementByReference>

 

<!--For the middle part of the above analysis diagram:

-->

<!--we first declare the (part2)properties and their scale-->

    <part2:SinglePropertyDimension rdf:ID="MilliampDcCurrent">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#Property"/>

    </part2:SinglePropertyDimension>

 

    <part2:SinglePropertyDimension  rdf:ID="SubU1SignalProperty">

        <rdfs:subClassOf rdf:resource="MilliampDcCurrent"/>

    </part2:SinglePropertyDimension>

 

    <part2:SinglePropertyDimension  rdf:ID="SubU2SignalProperty">

        <rdfs:subClassOf rdf:resource="MilliampDcCurrent"/>

    </part2:SinglePropertyDimension>

 

    <part2:SinglePropertyDimension  rdf:ID="SubQvSignalProperty">

        <rdfs:subClassOf rdf:resource="MilliampDcCurrent"/>

    </part2:SinglePropertyDimension>

 

    <part2:Scale rdf:ID="MilliampDc"/>

 

<!--then we quantify those properties on that scale-->

 

    <part2:ClassOfFunctionalMapping rdf:ID="SubU1Quantification">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#PropertyQuantification"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#input"/>

                <owl:allValuesFrom rdf:resource="#SubU1SignalProperty"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#result"/>

                <owl:allValuesFrom rdf:resource="#SubU1PropertyValue"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfFunctionalMapping>

 

    <part2:ClassOfFunctionalMapping rdf:ID="SubU2Quantification">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#PropertyQuantification"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#input"/>

                <owl:allValuesFrom rdf:resource="#SubU2SignalProperty"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#result"/>

                <owl:allValuesFrom rdf:resource="#SubU2PropertyValue"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfFunctionalMapping>

 

    <part2:ClassOfFunctionalMapping rdf:ID="SubQvQuantification">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#PropertyQuantification"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#input"/>

                <owl:allValuesFrom rdf:resource="#SubQvSignalProperty"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#result"/>

                <owl:allValuesFrom rdf:resource="#SubQvPropertyValue"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfFunctionalMapping>

 

<!--the specialized RealNumbers-->

 

    <part2:ClassOfClass rdf:ID="SubU1PropertyValue">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#RealNumber"/>

    </part2:ClassOfClass>

 

    <part2:ClassOfClass rdf:ID="SubU2PropertyValue">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#RealNumber"/>

    </part2:ClassOfClass>

 

    <part2:ClassOfClass rdf:ID="SubQvPropertyValue">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#RealNumber"/>

    </part2:ClassOfClass>

 

<!--and the representation of those real numbers with floats-->

 

    <part2:ClassOfClassOfRepresentation rdf:ID="SubU1ValueRep">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#ClassOfRepresentationOfThing"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#pattern"/>

                <owl:allValuesFrom rdf:resource="#SUB_U1"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#represented"/>

                <owl:allValuesFrom rdf:resource="#SubU1PropertyValue"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfClassOfRepresentation>

 

    <part2:ClassOfClassOfRepresentation rdf:ID="SubU2ValueRep">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#ClassOfRepresentationOfThing"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#pattern"/>

                <owl:allValuesFrom rdf:resource="#SUB_U2"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#represented"/>

                <owl:allValuesFrom rdf:resource="#SubU2PropertyValue"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfClassOfRepresentation>

 

    <part2:ClassOfClassOfRepresentation rdf:ID="SubQvValueRep">

        <rdfs:subClassOf rdf:resource="http://dm.rdlfacade.org/data#ClassOfRepresentationOfThing"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#pattern"/>

                <owl:allValuesFrom rdf:resource="#SUB_QV"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#represented"/>

                <owl:allValuesFrom rdf:resource="#SubQvPropertyValue"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfClassOfRepresentation>

 

    <part2:ClassOfClassOfInformationRepresentation rdf:ID="SubU1">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#XmlSchemaFloat"/>

        <part2:content rdf:resource="#u1"/>

    </part2:ClassOfClassOfInformationRepresentation>

 

    <part2:ClassOfClassOfInformationRepresentation rdf:ID="SubU2">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#XmlSchemaFloat"/>

        <part2:content rdf:resource="#u2"/>

    </part2:ClassOfClassOfInformationRepresentation>

 

    <part2:ClassOfClassOfInformationRepresentation rdf:ID="SubQv">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#XmlSchemaFloat"/>

        <part2:content rdf:resource="#qv"/>

    </part2:ClassOfClassOfInformationRepresentation>

 

<!--For the bottom part of the above analysis diagram:

-->

<!--THIS PART IS SLIGHTLY OVER THE LIMITS OF iso 15926-2 AND THEREFORE STILL UNDER DEBATE-->

 

<!--first we declare the kinds of Literals-->

 

   <part2:ClassOfInformationRepresentation rdf:ID="Float">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#Literal"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="u1">

        <rdfs:subClassOf rdf:resource="#x1"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="u2">

        <rdfs:subClassOf rdf:resource="#x2"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="qv">

        <rdfs:subClassOf rdf:resource="#y"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="x1">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#Float"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="x2">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#Float"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="y">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#Float"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="String">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#Literal"/>

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfInformationRepresentation rdf:ID="MathMLMinusCode">

        <rdf:type rdf:resource="http://rdl.rdlfacade.org/data#MathML"/>

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#String"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="http://dm.rdlfacade.org/data#content"/>

                <owl:hasValue rdf:parseType="Literal">

                    <apply><minus/><ci>x1</ci><cn>x2</cn></apply>

                </owl:hasValue>

            </owl:Restriction>

        </rdfs:subClassOf>

 

    </part2:ClassOfInformationRepresentation>

 

    <part2:ClassOfMultidimensionalObject rdf:ID="SubtractionInput">

        <part2:role1 rdf:resource="#x1"/> <!--the reference value input-->

        <part2:role2 rdf:resource="#x2"/> <!--the differand value input-->

    </part2:ClassOfMultidimensionalObject>

 

    <part2:ClassOfMultidimensionalObject rdf:ID="SubInput">

        <rdfs:subClassOf rdf:resource="#SubtractionInput"/>

        <part2:role1 rdf:resource="#u1"/>

        <part2:role2 rdf:resource="#u2"/>

    </part2:ClassOfMultidimensionalObject>

 

    <part2:ClassOfFunctionalMapping rdf:ID="Minus">

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="http://dm.rdlfacade.org/data#codomain"/>

                <owl:allValuesFrom rdf:resource="#y"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="http://dm.rdlfacade.org/data#domain"/>

                <owl:allValuesFrom rdf:resource="#SubtractionInput"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfFunctionalMapping>

 

    <part2:ClassOfFunctionalMapping rdf:ID="Sub">

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#ControlFunction"/> <!--in Part 2: specialization_by_domain-->

        <rdfs:subClassOf rdf:resource="http://rdl.rdlfacade.org/data#Definer"/> <!--in Part 2: specialization_by_role-->

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#codomain"/>

                <owl:allValuesFrom rdf:resource="#qv"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#domain"/>

                <owl:allValuesFrom rdf:resource="#SubInput"/>

            </owl:Restriction>

        </rdfs:subClassOf>

    </part2:ClassOfFunctionalMapping>

 

</rdf:RDF>

 

The use of templates

 

If you have read all this, it may have become clear to you that we have some streamlining and shortcutting work to do. That is why we introduce the Templates here.

The candidates for templates are:

  1. the activity "SignalSubtracting" and its participants
  2. the SignalProperty and its quantification
  3. the functions

so basically the three parts of the above analysis diagram, as earlier discussed.

The templates we design now must be as generic as possible, because otherwise we will see a combinatory explosion.

For each template we first compose the LonghandTemplate, and then the companion ShorthandTemplate, and then give an example of an instance of that ShorthandTemplate (the Longhand ones will not be instantiated).

 

Activity "SignalSubtracting"

So let's start with the activity "SignalSubtracting".

 

We declare the ShorthandTemplate "ST-SignalSubtracting":

<!--the specialized properties-->

 

    <owl:ObjectProperty rdf:ID="subtractionActivity">

        <rdfs:subPropertyOf rdf:resource="#activity"/>

    </owl:ObjectProperty>

 

    <owl:ObjectProperty rdf:ID="subtractionFunction">

        <rdfs:subPropertyOf rdf:resource="#participationType"/>

    </owl:ObjectProperty>

 

    <owl:ObjectProperty rdf:ID="subtractionPerformer">

        <rdfs:subPropertyOf rdf:resource="#participant"/>

    </owl:ObjectProperty>

 

    <owl:ObjectProperty rdf:ID="subtractionReference">

        <rdfs:subPropertyOf rdf:resource="#participant"/>

    </owl:ObjectProperty>

 

    <owl:ObjectProperty rdf:ID="subtractionDifferand">

        <rdfs:subPropertyOf rdf:resource="#participant"/>

    </owl:ObjectProperty>

 

    <owl:ObjectProperty rdf:ID="subtractionDifference">

        <rdfs:subPropertyOf rdf:resource="#participant"/>

    </owl:ObjectProperty>

 

<!--the specialized template class-->

 

    <ClassOfShorthandTemplate rdf:ID="ST-SignalSubtracting">

        <rdfs:subClassOf rdf:resource="#ST-2301"/>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#subtractionActivity"/>

                <owl:allValuesFrom rdf:resource="#SignalSubtracting"/>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#subtractionFunction"/>

                <owl:allValuesFrom rdf:resource="#Sub"/>

                <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#subtractionPerformer"/>

                <owl:allValuesFrom rdf:resource="#SubRelay"/>

                <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#subtractionReference"/>

                <owl:allValuesFrom rdf:resource="#SubU1Signal"/>

                <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#subtractionDifferand"/>

                <owl:allValuesFrom rdf:resource="#SubU2Signal"/>

                <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality>

            </owl:Restriction>

        </rdfs:subClassOf>

        <rdfs:subClassOf>

            <owl:Restriction>

                <owl:onProperty rdf:resource="#subtractionDifference"/>

                <owl:allValuesFrom rdf:resource="#SubQvSignal"/>

                <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality>

            </owl:Restriction>

        </rdfs:subClassOf>

    </ClassOfShorthandTemplate>

 

A typical example of an instance of the latter ST as you will have them in your Façade looks like:

 

    <part7:ST-SignalSubtracting rdf:ID="ME03_ST-267634">

        <part7:subtractionActivity rdf:resource="#ACT_752901"/>

        <part7:subtractionFunction rdf:resource="#COFM_340886"/>

        <part7:subtractionPerformer rdf:resource="#MPO_752902"/>

        <part7:subtractionReference rdf:resource="#MPO_752903"/>

        <part7:subtractionDifferand rdf:resource="#MPO_752904"/>

        <part7:subtractionDifference rdf:resource="#MPO_752905"/>

    </part7:ST-SignalSubtracting>

Q: Now why do we need all these reference data and templates?

A: For validation, in order to avoid that data of an incorrect type are used. For example the first property shall be a member of the Activity "SignalSubtracting". If not, the template instance is rejected, and an error message is produced. (Somewhere, in this Façade or another, we must find a triple like:  

http://www.pqr-ltd.com/p4502/cons#ACT-752901

http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://rdl.rdlfacade.org/data#SignalSubtracting

but also a subClassOf SignalSubtracting may have been used )

 

The SIGNAL_PROPERTY and its quantification

(later)

The functions

(later)