Die Privacy Policy for Smart Environments wurde auf Basis von XML Schema erstellt.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    attributeFormDefault="qualified">

Jede Privacy Policy besteht aus einer Liste (apps) von Anwendungen (application).

    <xs:element name="policy">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="apps" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="apps">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="application" minOccurs="0"
                    maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

Eine Anwendung besteht aus der Beschreibung (app_description), einer eindeutigen ID (app_ID) und einer Liste (modules) von bereitgestellten Funktionalitäten (module).

    <xs:element name="application">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="app_description" minOccurs="0"
                    maxOccurs="1"/>
                <xs:element ref="modules" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
            <xs:attribute ref="app_ID" use="required"/>
        </xs:complexType>
    </xs:element>

    <xs:attribute name="app_ID" type="xs:string"/>
    <xs:element name="app_description" type="xs:string" />

    <xs:element name="modules">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="module" minOccurs="0"
                    maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

Ein Modul besteht aus der Beschreibung (module_description), einer eindeutigen ID (module_ID), dem Typ des Moduls (module_type) und der Angabe, ob dieses Modul zwingend erforderlich für die Anwendung ist (module_required). Für jedes Modul wird eine Liste (attributeList) von verwendeten Attributen (attribute).

    <xs:element name="module">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="module_description" minOccurs="0"
                    maxOccurs="1"/>
                <xs:element ref="attributeList" minOccurs="0"
                    maxOccurs="1"/>
            </xs:sequence>
            <xs:attribute ref="module_ID" use="required"/>
            <xs:attribute ref="module_type" use="required"/>
            <xs:attribute ref="module_required" use="optional"/>
        </xs:complexType>
    </xs:element>

    <xs:attribute name="module_ID" type="xs:string"/>
    <xs:attribute name="module_type" type="xs:string"/>
    <xs:attribute name="module_required" type="xs:boolean"/>
    <xs:element name="module_description" type="xs:string" />

    <xs:element name="attributeList">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="attribute" minOccurs="0"
                    maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

Ein Attribut wird durch seinen Namen (name) identifiziert. Es werden Angaben darüber getroffen, ob das Attribut generell direkt (allow) oder indirekt durch Dritt-Anwendungen (third_party_access) angefragt werden darf. Außerdem können allgemeine Bedingungen (condition), Aggregationsstufen (aggregation) und das Anfrageintervall (interval) festgelegt werden, unter denen das Attribut freigegeben wird. Falls der Nutzer diese Angaben nicht explizit angeben möchte, kann auch die Stufe der Anonymizierung (privacyLevel) direkt angegeben werden.

    <xs:element name="attribute">
        <xs:complexType>
            <xs:choice>
                <xs:sequence>
                    <xs:element ref="allow" minOccurs="0"
                        maxOccurs="1"/>
                    <xs:element ref="third_party_access" minOccurs="0"
                        maxOccurs="1"/>
                    <xs:element ref="condition" minOccurs="0"
                        maxOccurs="1"/>
                    <xs:element ref="aggregation" minOccurs="0"
                        maxOccurs="1"/>
                    <xs:element ref="interval" minOccurs="0"
                        maxOccurs="1"/>
                </xs:sequence>
                <xs:element ref="privacyLevel" minOccurs="0"
                        maxOccurs="1"/>
            </xs:choice>
            <xs:attribute ref="name" use="required"/>
        </xs:complexType>
    </xs:element>

    <xs:attribute name="name" type="xs:string"/>
    <xs:element name="allow" type="xs:boolean"/>
    <xs:element name="third_party_access" type="xs:boolean"/>
    <xs:element name="interval" type="xs:string" />

Für die allgemeinen Freigabestufen lassen sich je nach Anwendungsumgebung eigene Werte spezifizieren. Typische Klassifizierungsebenen sind beispielsweise öffentlich (public), vertraulich (confidential), geheim (secret) und streng geheim (top secret)

    <xs:element name="privacyLevel">
       <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="public"/>
            <xs:enumeration value="confidential"/>
            <xs:enumeration value="secret"/>
            <xs:enumeration value="top-secret"/>
          </xs:restriction>
       </xs:simpleType>
    </xs:element>

Eine allgemeine Freigabebedingung lässt sich in atomare (atomicCondition) und zusammengesetzte Bedingungen unterteilen.

    <xs:element name="condition">
        <xs:complexType>
            <xs:choice>
                <xs:element ref="atomicCondition" minOccurs="1"
                    maxOccurs="1"/>
                <xs:element ref="andCondition" minOccurs="1"
                    maxOccurs="1"/>
                <xs:element ref="orCondition" minOccurs="1"
                    maxOccurs="1"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

Eine atomare Bedingung lässt sich nicht weiter unterteilen. Für die Formulierung der Bedingung lassen sich je nach Anwendungsgebiet beispielsweise die in der WHERE-Klausel von SQL oder die in OCL verwendeten Konstrukte verwenden.

Eine Und-Bedingung (andCondition) besteht aus mindestens zwei atomaren oder Oder-Bedingungen (orCondition). Gleiches gilt für eine Oder-Bedingung. Bei der internen Verarbeitung der bedingungen werden die Klauseln zur besseren Auswertung in eine disjunktive Normalform überführt.

    <xs:element name="atomicCondition" type="xs:string" />

    <xs:element name="andCondition">
        <xs:complexType>
            <xs:choice minOccurs="2" maxOccurs="unbounded">
                <xs:element ref="atomicCondition" minOccurs="1"
                    maxOccurs="unbounded"/>
                <xs:element ref="orCondition" minOccurs="1"
                    maxOccurs="unbounded"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xs:element name="orCondition">
        <xs:complexType>
            <xs:choice minOccurs="2" maxOccurs="unbounded">
                <xs:element ref="atomicCondition" minOccurs="1"
                    maxOccurs="unbounded"/>
                <xs:element ref="andCondition" minOccurs="1"
                    maxOccurs="unbounded"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

Bei der Agggregation wird die Aggregationsfunktion (aggregationType) und die Gruppierungsfunktion (groupBy) angegeben.

    <xs:element name="aggregation">
        <xs:complexType>
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element ref="aggregationType" minOccurs="1"
                    maxOccurs="1"/>
                <xs:element ref="groupBy" minOccurs="1" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="groupBy" type="xs:string" />

    <xs:element name="aggregationType">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="min"/>
            <xs:enumeration value="max"/>
            <xs:enumeration value="sum"/>
            <xs:enumeration value="count"/>
            <xs:enumeration value="avg"/>
          </xs:restriction>
        </xs:simpleType>
    </xs:element>

</xs:schema>