Syntax für Eigenschaften

Die Syntax für Eigenschaften ist aufgrund der großen Vielfalt verschiedenster Anforderungen an eine Eigenschaft, umfangreicher als die der Aktionen.



Syntaxdiagramm für Eigenschaften

Dieses Diagramm veranschaulicht die generelle Syntax aller Eigenschaften. Eckige Klammern hinter Attributen oder Elementen geben jeweils an,

wie oft ein Element/Attribut vorkommen muss. Ist keine Mengenangabe vorhanden so muss das Element/Attribute genau einmal vorhanden sein.


<property[0..n]  
       name
       datatype
       defaultvalue >
                               
       <target[1..n]  
               type
               element
               selector
               template[0..1] >
                               
               <linearmap[0..1]
                       inmin
                       inmax
                       outmin
                       outmax
                       precision[0..1] />
                               
               <condition[0..n]
                       eq[0..1]  
                       neq[0..1]  
                       gt[0..1]  
                       gte[0..1]  
                       lt[0..1]  
                       lte[0..1]
                       output[0..1] />
       </target>
</property>



Element: Property

Wie das  action Element auch, kann das  property beliebig oft vorkommen.


Hier ein Beispiel eines property Elements:


<proprety name="BoomColor" datatype="Color" defaultvalue="#FF9523" >…</property>



Hiermit ist eine Eigenschaft namens BoomColor definiert. Diese hat den Datentype Color, was dafür sorgt, dass im Editor ein Colorpicker für diese Eigenschaft zur Verfügung steht.

Falls kein anderer Wert festgelegt wurde, hat diese Eigenschaft den Wert #FF9523.


Alle Eigenschaften haben die gleichen 3 Pflichtattribute name, datatype und defaultvalue. Der Inhalt der Eigenschaften (oben durch … dargestellt) unterscheidet sich von Eigenschaft zu Eigenschaft.



Property Attribut: Name

Das Attribute name dient zur Identifizierung der Eigenschaft im Editor. Der Name wird unten rechts im „Eigenschaften“-Fenster angezeigt:




Property Attribut: Datatype

Das Attribut datatype gibt den Datentyp der Eigenschaft an.


Verfügbare Datentypen finden Sie im Kapitel „Konstanten“:


>> Konstanten



Property Attribut: Defaultvalue

Das Attribut defaultvalue gibt den Standardwert dieser Eigenschaft an. Mit diesem Wert wird das Steuerelement initialisiert, wenn es zum ersten Mal geladen wird.



Element: Target

Das target Element, welches mindestens einmal innerhalb einer Eigenschaft vorkommen muss, spezifiziert einen bestimmten Teil des SVG´s,

welcher mit dieser Eigenschaft verändert werden soll. Sollen mehrere Teile eines SVG´s verändert werden, so können einfach mehrere target Elemente

parallel verwendet werden.


Hier ein Beispiel eines target Elements innerhalb eines property Elements:


<proprety name="BoomColor" datatype="Color" defaultvalue="#FF9523" >
               <target element="boombg" type="Attribute" selector="fill" />
</property>



Dieses Beispiel beschreibt, dass bei Änderung dieser Eigenschaft (BoomColor) alle Elemente mit dem Klassennamen boombg verändert werden.

Genauer gesagt wird für alle diese Elemente das Attribut fill geändert.


Da für dieses target Element weder ein template, linearmap noch condition definiert sind, wird der Eingangswert unverändert auf das fill Attribut geschrieben.


Genaueres zu template, linearmap und condition, erfahren Sie unten stehend.



Target Attribut: Element

Das Attribut element verweist auf ein (oder mehrere) Elemente innerhalb dieses SVG´s. Dieser Verweis funktioniert mittels Klassennamen.

Im zu vorigen Beispiel muss es im SVG also ein Element mit dem Klassennamen boombg geben. Anderenfalls gibt der Editor eine Fehlermeldung aus.



Target Attribut: Type

Das Attribut type gibt an, was innerhalb des per element Attribut ausgewähltem Element verändert werden soll.

Für dieses Attribut gibt es 3 mögliche Werte:


  • Attribute
  • Style
  • Content


Somit lässt sich steuern, ob mit diesem target ein bestimmtes Attribut, ein bestimmter Style oder der Inhalt des Elements verändert werden soll. Für den Fall,

das ein Attribut oder ein Style verändert werden sollen, (was normalerweise der Fall sein wird) muss ein drittes Attribut (das selector Attribut) angegeben werden,

welches das konkrete Attribut oder den konkreten Style bestimmt.



Target Attribut: Selector

Das Attribut selector findet nur Verwendung, wenn als type entweder Attribute oder Style gewählt wurde. In diesen Fällen muss noch definiert werden,

welches Attribut beziehungsweise welcher Style verändert werden soll.



Target Attribut: Template

Das Attribut template kann dafür eingesetzt werden, den Wert weiter zu bearbeiten, bevor dieser auf ein Attribut, einen Style oder in den Inhalt geschrieben wird.

Im obigen Beispiel findet dieses Attribut keine Verwendung, da der Wert unverändert an das Attribut gegeben werden soll.


Hier ein Beispiel mit diesem Attribut:


<target element="boom" type="Attribute" selector="transform"        

template="rotate{value} 25,60)" />                                                


Der Ausdruck {value} ist hierbei ein Platzhalter, der mit dem eingegangen Wert ersetzt wird. So wird aus dem Wert 90 in obigem Beispiel rotate (90 25,60).

Dies entspricht einer Rotation von 90° um den Punkt 25,60.



Element: Linearmap

Das Element linearmap dient zur linearen Übersetzung eines Wertes von einer Skala auf eine andere.


Zur Erklärung hier als Beispiel, die etwas komplexere Eigenschaft Level unseres Beispiel-SVG-Steuerlements RGB,

welches Sie in den Kapiteln für Beispiele in dieser Dokumentation finden:



<property
       name="Level"
       datatype="Int16"
       defaultvalue="0">
                               
       <target
               type="Attribute"
               element="verticalsled"
               selector="transform"
               template="matrix(1, 0, 0, 1, 0, {value})">

               <linearmap
                       inmin="0"
                       inmax="100"
                       outmin="300"
                       outmax="-400"
                       precision="0" />
       </target>

</property>



Als Eingabewert wird hier ein Wert von 0 bis 100 erwartet. Dieser Wert soll linear auf einen Ausgabewert im Bereich von 300 bis -400 übersetzt werden.

Ein Eingabewert von 0 führt dabei zu einem Ausgabewert von 300 und ein Eingabewert von 100 führt zu einem Ausgabewert von -400.




Linearmap Attribut: Inmin

Untere Begrenzung des Eingabewertes.



Linearmap Attribut: Inmax

Obere Begrenzung des Eingabewertes.



Linearmap Attribut: Outmin

Untere Begrenzung des Ausgabewertes



Linearmap Attribut: Outmax

Obere Begrenzung des Ausgabewertes.



Linearmap Attribut: Precision

Gibt die Anzahl der Nachkommastellen an, auf die das Ergebnis der Übersetzung gerundet wird. Dieses Attribut ist optional.

Wird es weggelassen, wird das Ergebnis nicht gerundet.



Element: Condition

condition Elemente werden dazu verwendet, in Abhängigkeit des Eingangswertes einen bestimmten (in der Regel vom Eingangswert abweichenden)

Wert auf das target zu schreiben. Hier ein Beispiel eines condition Elements:


<target type="Style" element="palettestatus" selector="stroke">
       <condition eq="True" output="rgb(246, 0, 0)" />
</target>



Diese Bedingung führt dazu, dass bei einem Eingabewert von True statt dem Eingabewert, der Wert rgb(246, 0, 0) auf das Target geschrieben wird.

Dies würde nun aber dazu führen, dass bei einem Eingabewert von False nichts unternommen wird, da die Bedingung eq=“True“ nicht erfüllt ist.

Für diesen Fall gibt es die Möglichkeit, beliebig viele condition Elemente aneinander zu hängen:


<target type="Style" element="palettestatus" selector="stroke">
       <condition eq="True" output="rgb(246, 0, 0)" />
       <condition eq="False" output="rgb(170, 170, 170)" />
</target>



So wäre das Problem gelöst und alle möglichen Eingabewerte für diese Eigenschaft (Das sind nur True und False, da es sich hier um eine Eigenschaft des Types Boolean handelt)

sind abgedeckt. Folgendes Beispiel hätte allerdings das gleiche Ergebnis:


<target type="Style" element="palettestatus" selector="stroke">
       <condition eq="True" output="rgb(246, 0, 0)" />
       <condition output="rgb(170, 170, 170)" />
</target>




Denn ein condition Element benötigt keinen einzigen Verbrauchsoperator. In dem Fall fungiert diese Bedingung als else-Fall und definiert den Wert, der geschrieben wird,

falls keine zuvor geprüfte Bedingung erfüllt war.

Eine ebenfalls möglich, aber in diesem Fall unlogische Syntax, ist folgende:


<target type="Style" element="palettestatus" selector="stroke">
       <condition eq="True" output="rgb(246, 0, 0)" />
       <condition />
</target>



Ein condition Element ohne jegliches Attribut dient ebenfalls als else-Fall. Da hier aber kein output definiert ist, bleibt der Eingabewert unverändert.

Zu beachten ist, dass alle Bedingungen von oben nach unten abgearbeitet werden. Sobald eine Bedingung erfüllt ist, werden darauf folgende Bedingungen gar nicht erst geprüft.


Somit würde dieses Beispiel dazu führen, dass immer rgb(170, 170, 170) geschrieben wird, auch wenn der Eingabewert gleich True ist:


<target type="Style" element="palettestatus" selector="stroke">
       <condition output="rgb(170, 170, 170)" />
       <condition eq="True" output="rgb(246, 0, 0)" />
</target>





Condition Attribut: Vergleichsoperatoren

Für das Element condition gibt es 6 Attribute, die zur Überprüfung des Eingabewertes dienen.


  • eq (=)
  • neq (!=)
  • lt (<)
  • lte (<=)
  • gt (>)
  • gte (>=)


Da mehrere dieser Attribute gleichzeitig verwendet werden können, kann es zu Widersprüchen kommen.

Solche Widersprüche werden nicht als Fehler angezeigt, sondern führen dazu, dass diese Bedingung nie ausgeführt wird.


Wird kein Vergleichsoperator angegeben, wird diese Bedingung immer erfüllt.



Condition Attribut: Output

Definiert, welcher Wert bei Zutreffen der Bedingung geschrieben werden soll.

Wird kein output angegeben, wird der Eingabewert unverändert übernommen.