# WS-Policy

WS-Policy ist eine Spezifikation des W3C im Rahmen der WS-*-Spezifikationen, die es dem Serviceanbieter ermöglicht, die Richtlinien bezüglich Sicherheit, Qualität und Version seines Services in Form von maschinenlesbaren XML-Daten für den Servicenutzer bereitzustellen. Umgekehrt kann der Servicenutzer seine Anforderungen ebenfalls in Form von XML-Daten spezifizieren. Diese Policies werden dann an entsprechenden Stellen in die WSDL-Beschreibung des Service (oder auch im BPEL-Prozess) eingefügt und gelten als Mindestrichtlinien auch für alle in der Hierarchie tiefer stehenden Elemente. Umgekehrt kann auch ein Servicenutzer seine Anforderung an einen Service in Form von Policies formulieren, so dass dann zur Laufzeit „ausgehandelt“ werden muss, was denn nun die effektive Policy wird.

## Unterspezifikationen

Zu WS-Policy gehören mehrere Unterspezifikationen:

### WS-Policy Assertions

WS-Policy Assertions beschreibt eine Menge an Standardrichtlinien, die innerhalb einer Policy verwendet werden können.

### WS-Policy Attachment

WS-Policy Attachment beschreibt, in welcher Form Policies mit bestehenden Technologien aus dem Bereich Web Services verknüpft werden können. Wahlweise können sie direkt innerhalb des Elements deklariert werden, auf das sie sich beziehen, oder auch separat und nur referenziert werden.

## Aufbau von Policies

Eine Policy besteht immer aus einem Element:
Dieses Element enthält immer eine Auflistung an Alternativen, so könnte beispielsweise ein Bankwebservice vorschreiben, dass die Übertragung verschlüsselt zu erfolgen hat und dabei die konkreten Alternativen DES und AES anbieten. Ein Nutzer des Service müsste demnach, um den Service überhaupt nutzen zu können, die Daten in jedem Fall mit einem der beiden Verfahren verschlüsseln. Ein anderes Verfahren wäre nicht zulässig. Jede Alternative kann aus beliebig vielen Assertions bestehen. Eine Auflistung von Policyalternativen besteht immer aus einem Element <wsp:ExactlyOne> oder einem Element <wsp:All>. Ersterer Fall bedeutet, dass von allen darin enthaltenen Alternativen genau eine gelten muss, zweiterer bedeutet, dass alle darin genannten Alternativen erfüllt sein müssen. Diese beiden Elemente können auch weiter in sich verschachtelt werden. Allerdings hat man sich zur leichteren Verarbeitung von Policies auf eine Normalform geeinigt, so dass sich folgende Struktur ergibt:
Gibt es nur eine Alternative, so kann das Element <wsp:ExactlyOne> natürlich entfallen; gleiches gilt für <wsp:All>, wenn eine Alternative nur aus einer Assertion bestehen würde.

## Nutzungsarten

Jede Assertion hat ein optionales Attribut wsp:Usage, was angibt, wie diese Assertion zu verwenden ist. Dabei unterscheidet man folgende mögliche Werte:
* Required: Die Assertion wird in jedem Fall angewendet. Sollte sie verletzt werden, wird ein Fehler ausgelöst.
* Rejected: Die Assertion wird explizit nicht unterstützt. Sollte sie dennoch gefordert werden, wird ein Fehler ausgelöst.
* Optional: Die Assertion muss nicht angewendet werden, wird es aber, wenn sie vorhanden ist.
* Observed: Die Assertion wird in jedem Fall angewendet.
* Ignored: Die Assertion wird verarbeitet, aber ignoriert, d. h., sie kann angegeben sein, hat aber keinerlei Einfluss auf die Weiterverarbeitung. Sowohl Serviceanbieter als auch -nutzer werden darüber informiert, dass sie ignoriert wird.

## Effektive Policy

Sowohl Serviceanbieter als auch Servicenutzer können Policies spezifizieren. Dies hat zur Folge, dass die effektive Policy erst zur Laufzeit ausgehandelt werden kann. Genauere Algorithmen, die auf Basis der beiden Requirements die effektive Policy bestimmen, sind noch Gegenstand aktueller Forschung. Zunächst einmal wird es sich bei der effektiven Policy immer um den "kleinsten gemeinsamen Nenner" der jeweiligen Anforderungen handeln. Allerdings ist noch offen, wie dabei auch eine semantische Auswertung der Policy erfolgen soll, da WS-Policy nur die äußere Form einer Policy festlegt und weder etwas über den Inhalt aussagt noch darüber, wie der Inhalt codiert werden soll.