Schema "resource-schema-1.xsd"
Target Namespace:
http://midpoint.evolveum.com/xml/ns/public/resource/resource-schema-1.xsd
Defined Components:
18 global elements, 8 local elements, 7 complexTypes, 1 simpleType
Default Namespace-Qualified Form:
Local Elements: qualified; Local Attributes: unqualified
Schema Location:
C:\workspace\tags\midpoint-1.9\infra\schema\src\main\resources\xml\ns\public\resource\resource-schema-1.xsd; see XML source
Imported by Schemas (2):
connector-schema-1.xsd [src], resource-schema-1.xsd [src]
Annotation
This is supposed to be "standard" resource schema. Good resource connectors/adapter/whatever will (hopefully) follow it and define sub-types based on abstract supertypes in this schema. Some examples of this are provided at the end of the document. This schema is considered dynamic. It means that the concrete schema of a specific resource will be only available in run-time. As this schema will not be available in build-time, JAX-B and similar tools cannot be used on it. Therefore the components that need to understand it must parse it in run-time and dynamically interpret it. The schema is using custom annotations to express facets of the resource schema that XSD does not support, such as readability/ writability of attribute, reference target types, etc. Recommended namespace prefix: r
All Element Summary
tns:accountType Annotation that marks object classes that are supposed to be used for accounts.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:attributeDisplayName Specifies which resource attribute should be used as title when displaying the attribute, e.g. as a label in the user interface forms.
Type:
Content:
simple
Defined:
globally; see XML source
Used:
never
tns:attributeFlag Temporary solution.
Type:
Content:
simple
Defined:
globally; see XML source
Used:
never
tns:classificationLevel (in tns:classifiedAttribute) Top Secret The highest level of classification of material on a business level.
Type:
Content:
simple
Defined:
tns:classifiedAttribute Specifies which resource attribute (property) must be en TODO This element is supposed to be used as ANNOTATION in resource schema.
Type:
Content:
complex, 1 attribute, 2 elements
Defined:
globally; see XML source
Used:
never
tns:compositeIdentifier This is DEPRECATED.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:container
Type:
Content:
simple
Defined:
globally; see XML source
Used:
never
tns:descriptionAttribute Specifies which resource attribute should be used as description when displaying objects of a specific resource object class.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:discriminatorFormula (in tns:objectClassAttribute) Calculates the value of the objectClass attribute. example: inetOrgPerson AND organizationalPerson AND person This element is supposed to be used as ANNOTATION in resource schema.
Type:
Content:
simple
Defined:
tns:displayName Specifies which resource attribute should be used as title when displaying objects of a specific resource object class.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:encryption (in tns:classifiedAttribute) True: it uses One-Way algorithm False: Default
Type:
anonymous simpleType (restriction of xsd:string)
Content:
simple
Defined:
tns:identifier Specifies which resource attribute (property) is identifier of a specific resource object type.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:namingAttribute Specifies which resource attribute should be used as a "technical" name for the account.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:nativeAttributeName Specifies a native name of the attribute, the name as it is used on the resource or as seen by the connector.
Type:
Content:
simple
Defined:
globally; see XML source
Used:
never
tns:nativeObjectClass Specifies a native name of the object class, the name as it is used on the resource or as seen by the connector.
Type:
Content:
simple
Defined:
globally; see XML source
Used:
never
tns:object (in tns:objects)
Type:
Content:
empty
Defined:
locally witnin tns:objects element; see XML source
tns:objectClassAttribute
Type:
Content:
complex, 1 attribute, 1 element
Defined:
globally; see XML source
Used:
never
tns:objects This element is just for testing and examples.
Type:
anonymous complexType
Content:
complex, 1 element
Defined:
globally; see XML source
Includes:
definition of 1 element
Used:
never
tns:operation
Type:
Content:
complex, 2 attributes, 3 elements
Defined:
globally; see XML source
Used:
never
tns:readAttribute (in tns:operation)
Type:
Content:
empty, 1 attribute
Defined:
locally witnin tns:OperationType complexType; see XML source
tns:resourceObject This is XSD annotation.
Type:
xsd:anyType
Content:
any
Defined:
globally; see XML source
Used:
never
tns:resourceObjectReference Contains specification (QName) of a XSD type that is the type of reference target objects.
Type:
anonymous complexType
Content:
complex, 1 element
Defined:
globally; see XML source
Includes:
definition of 1 element
Used:
never
tns:secondaryIdentifier Specifies which resource attribute is secondary identifier of a specific resource object class.
Type:
Content:
empty, 1 attribute
Defined:
globally; see XML source
Used:
never
tns:targetObjectClass (in tns:resourceObjectReference)
Type:
Content:
empty, 1 attribute
Defined:
tns:valueFormula (in tns:operation) Formula to calculate the value of the writeAttribute when this action is executed.
Type:
Content:
simple
Defined:
locally witnin tns:OperationType complexType; see XML source
tns:writeAttribute (in tns:operation)
Type:
Content:
empty, 1 attribute
Defined:
locally witnin tns:OperationType complexType; see XML source
Complex Type Summary
Type definition for an annotation that marks object classes that are supposed to be used for accounts.
Content:
empty, 1 attribute
Defined:
globally; see XML source
Includes:
definition of 1 attribute
Used:
Refers to resource attribute.
Content:
empty, 1 attribute
Defined:
globally; see XML source
Includes:
definition of 1 attribute
Used:
at 10 locations
Content:
complex, 1 attribute, 2 elements
Defined:
globally; see XML source
Includes:
definitions of 2 elements
Used:
Content:
complex, 1 attribute, 1 element
Defined:
globally; see XML source
Includes:
definition of 1 element
Used:
Refers to an object class.
Content:
empty, 1 attribute
Defined:
globally; see XML source
Includes:
definition of 1 attribute
Used:
Content:
complex, 2 attributes, 3 elements
Defined:
globally; see XML source
Includes:
definitions of 2 attributes, 3 elements
Used:
Common supertype for all resource objects.
Content:
empty
Abstract:
(cannot be assigned directly to elements used in instance XML documents)
Defined:
globally; see XML source
Used:
Simple Type Summary
Simple space separated value list to hold some flag values.
Defined:
globally; see XML source
Used:
XML Source
<?xml version="1.0" encoding="UTF-8"?>
<!--
* Copyright (c) 2011 Evolveum
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* http://www.opensource.org/licenses/cddl1 or
* CDDLv1.0.txt file in the source code distribution.
* See the License for the specific language governing
* permission and limitations under the License.
*
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted 2011 [name of copyright owner]"
* Portions Copyrighted 2011 ForgeRock Inc.
*
-->
<xsd:schema elementFormDefault="qualified" targetNamespace="http://midpoint.evolveum.com/xml/ns/public/resource/resource-schema-1.xsd" xmlns:tns="http://midpoint.evolveum.com/xml/ns/public/resource/resource-schema-1.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation>
This is supposed to be "standard" resource schema. Good resource
connectors/adapter/whatever will (hopefully) follow it and define
sub-types based on abstract supertypes in this schema. Some examples
of this are provided at the end of the document.

This schema is considered dynamic. It means that the concrete schema
of a specific resource will be only available in run-time. As this
schema will not be available in build-time, JAX-B and similar tools
cannot be used on it. Therefore the components that need to
understand it must parse it in run-time and dynamically interpret
it.

The schema is using custom annotations to express facets of the
resource schema that XSD does not support, such as readability/
writability of attribute, reference target types, etc.

Recommended namespace prefix: r
</xsd:documentation>
</xsd:annotation>
<!-- Resource schema annotations and their types -->
<xsd:element name="resourceObject">
<xsd:annotation>
<xsd:documentation>
This is XSD annotation. It marks XSD type that is a resource object.

Every first-level element in a property container is either a
attribute or a property container containing attributes.

Resource object is a property container, therefore all that holds
for property containers also hold for resource objects.

This annotation can be attached to complexTypes that does not have
any associated element. This will cause that the types themselves will
be considered definitions of resource objects.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:complexType name="AccountTypeType">
<xsd:annotation>
<xsd:documentation>
Type definition for an
annotation that marks object classes that are supposed to be used
for accounts. This should be considered a suggestion or a default
value for the account type definition in schema handling.

This is supposed to be an annotation of an object class
(complexType in resource schema).
</xsd:documentation>
</xsd:annotation>
<xsd:attribute default="false" name="default" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>
Specifies whether this account type is the default account
type for the resource.

Only one account type can be default. Setting this flag for
more than one type is an error.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="accountType" type="tns:AccountTypeType">
<xsd:annotation>
<xsd:documentation>
Annotation that marks object classes that are supposed to be used
for accounts. This should be considered a suggestion or a default
value for the account type definition in schema handling.

This is supposed to be an annotation of an object class
(complexType in resource schema).

It makes no sense to have accountType annotation on a schema construct
that does not have also resourceObject annotation. The system may consider
imply the resourceObject or may consider it to be an error.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="identifier" type="tns:AttributeReferenceType">
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute (property) is identifier of
a specific resource object type.

This annotation points to the element in schema that is supposed
to be primary identifier for the object class. There may be
multiple annotations using this element. In that case the unique
identifier is an compound identifier (the combination of all
such elements is an unique identifier).

This is supposed to be an annotation of an object class
(complexType in resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute is secondary identifier of
a specific resource object class. Secondary identifier must be
unique, but may not be persistent.

Secondary identifier is used as a supplement to primary
identifier. E.g. if primary identifier is an immutable UUID,
which is in itself sufficient to uniquely identify an entry,
but may not be efficient to use. DN may be more efficient in
this case, and therefore may be designed as secondary
identifier. Primary identifier, being immutable, may still be
used to efficiently detect renames.

This is supposed to be an annotation of an object class
(complexType in resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:annotation>
<xsd:documentation>
This is DEPRECATED. Do not use. Use several instances
of identifier or secondaryIdentifier annotation instead.

Specifies which resource attributes (properties) can
identify the specific resource object. identifier or
compositeIdentifier must be specified but the
identifier always overrides the compositeIdentifier.

This element is supposed to be used as ANNOTATION in
resource schema.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="displayName" type="tns:AttributeReferenceType">
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute should be used as title when
displaying objects of a specific resource object class. It must
point to an attribute of xsd:string type. If not present,
primary identifier will be used instead.

This is supposed to be an annotation of an object class
(complexType in resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="namingAttribute" type="tns:AttributeReferenceType">
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute should be used as a "technical" name
for the account. This name will appear in log files and other troubleshooting
tools. The name should be a form of unique identifier that can be used to
locate the resource object for diagnostics. It should not contain white chars and
special chars if that can be avoided and it should be reasonable short.

It is different from a display name attribute. Display name is intended for a
common user or non-technical administrator (such as role administrator). The
naming attribute is intended for technical IDM administrators and developers.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute should be used as description
when displaying objects of a specific resource object class.
It must point to an attribute of xsd:string type. If not
present, no description will be provided.

This is supposed to be an annotation of an object class
(complexType in resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="nativeAttributeName" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Specifies a native name of the attribute, the name as it is used
on the resource or as seen by the connector. It is used for
diagnostics purposes and may be used by the connector itself.
As the attribute names in XSD have to comply with XML element
name limitations, this may be the only way how to determine
original attribute name.

The name should be the same as the one used by the resource, if
the resource supports naming of attributes. E.g. in case of LDAP
this annotation should contain "cn", "givenName", etc. If the
resource is not that flexible, the native attribute names may be
hardcoded (e.g. "username", "homeDirectory") or may not be
present at all.

If not present, the it defaults to the corresponding element
name (without namespace).

This is supposed to be an annotation of an attribute (element in
resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="attributeDisplayName" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute should be used as title when
displaying the attribute, e.g. as a label in the user interface
forms. It must contain a printable string.

This is supposed to be an annotation of an attribute (element in
resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="resourceObjectReference">
<xsd:annotation>
<xsd:documentation>
Contains specification (QName) of a XSD type that is the
type of reference target objects.

It is used as an annnotation for attribute types that
point to resource objects, such as group members lists,
role lists, etc. The clients can use this annotation to
detect that the attribute points to a different object
and follow the reference or display it appropriatelly.

This mechanism is supposed to be used as a temporary
solution until a concept of "entitlements" is fully
developed. After that it should remain in existence as
a mechanism for older connectors and for a special
purpose attribute references.

This is supposed to be an annotation of an attribute
(element in resource schema).
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="targetObjectClass" type="tns:ObjectClassReferenceType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="nativeObjectClass" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Specifies a native name of the object class, the name as it is
used on the resource or as seen by the connector. It is used for
diagnostics purposes and may be used by the connector itself.

The name should be the same as the one used by the resource, if
the resource supports naming of object classes. E.g. in case of
LDAP this annotation should contain "inetOrgPerson",
"groupOfNames", etc. If the resource is not that flexible,
the native object class names may be hardcoded (e.g. "account",
"group") or may not be present at all (which is discouraged).

This annotation may appear several times if the object is
composed from several native object classes (e.g. as usual in
LDAP).

If not present, the it defaults to the name of the object class
XSD type (without namespace).

This is supposed to be an annotation of an object class
(complexType in resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<!-- ============================================================= -->
<xsd:complexType abstract="true" name="ResourceObjectClass">
<xsd:annotation>
<xsd:documentation>
Common supertype for all resource objects. Every Object Class
should be derived from this type.

Any non-abstract subtype of this type should have following
XSD annotations:
identifier - mandatory
secondaryIdentifier - optional
displayName - optional
descriptionAttribute - optional
nativeObjectClass - optional, but strongly encouraged
accountType - optional

Question: How to define shchema for these annotations?

This may not be strictly necessary, but may come useful and it
is not any extra weight to the system.
</xsd:documentation>
</xsd:annotation>
</xsd:complexType>
<xsd:complexType name="AttributeReferenceType">
<xsd:annotation>
<xsd:documentation>
Refers to resource attribute. This is generic, reusable
reference type. It is used by many annotations in the resource
schema.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="ref" type="xsd:QName">
<xsd:annotation>
<xsd:documentation>
QName of the resource attribute. If this type is used for
an objectclass annotation, the specified QName must be a
QName of a first-level XML element of that object class.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="ObjectClassReferenceType">
<xsd:annotation>
<xsd:documentation>
Refers to an object class. This is a generic, reusable reference
type.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="ref" type="xsd:QName">
<xsd:annotation>
<xsd:documentation>
QName of an top-level XSD type that represents an object
class of a resourcre schema.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<!-- Following definitions are to be considered only examples for now.
These will be moved to a seprate namespace later, cleaned up and ligned
with existing common terminology and/or connectors.
-->
<xsd:element name="objects">
<xsd:annotation>
<xsd:documentation>
This element is just for testing and examples. Will be removed.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="object" type="tns:ResourceObjectClass"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Experimental and work in progress -->
<xsd:complexType name="ObjectClassAttributeType">
<xsd:complexContent>
<xsd:extension base="tns:AttributeReferenceType">
<xsd:all>
<xsd:element name="discriminatorFormula" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Calculates the value of the objectClass attribute.
example: inetOrgPerson AND organizationalPerson
AND person

This element is supposed to be used as ANNOTATION in
resource schema.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Specifies which resource attribute (property) must be
en

TODO

This element is supposed to be used as ANNOTATION in
resource schema.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:complexType name="ClassifiedAttributeType">
<xsd:complexContent>
<xsd:extension base="tns:AttributeReferenceType" xmlns:tns="http://midpoint.evolveum.com/xml/ns/public/resource/resource-schema-1.xsd">
<xsd:all>
<xsd:element name="encryption">
<xsd:annotation>
<xsd:documentation>
True: it uses One-Way algorithm
False: Default
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="HASH">
<xsd:annotation>
<xsd:documentation>One-Way</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="NONE">
<xsd:annotation>
<xsd:documentation>No Encryption</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="SYMMETRIC">
<xsd:annotation>
<xsd:documentation>Symmetric Encryption</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="classificationLevel" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Top Secret
The highest level of classification of material
on a business level. Such material would cause
"exceptionally grave damage" to business if
made publicly available.

Secret
Such material would cause "grave damage" to
business if it were publicly available.

Confidential
Such material would cause "damage" or be
"prejudicial" to business if publicly available.

Restricted
Such material would cause "undesirable effects"
if publicly available. Some countries do not
have such a classification.

Unclassified
Technically not a classification level, but is
used for government documents that do not
have a classification listed above.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:all>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="attributeFlag" type="tns:flagList">
<xsd:annotation>
<xsd:documentation>
Temporary solution. Should be cleaned up later.

The set of unstructured flags. It is a temporary solution
for provisioning code to mark certain properties of
attributes that are considered experimental or under
development. Any properties that are considered final for
a particular release should have its own annotation with an
appropriate documentation.

This is supposed to be an annotation of an attribute
(element in resource schema).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:simpleType name="flagList">
<xsd:annotation>
<xsd:documentation>
Simple space separated value list to hold some flag values.
This does not have any special meaning or restriction
by default.

This element is supposed to be used as ANNOTATION in
resource schema.
</xsd:documentation>
</xsd:annotation>
<xsd:list itemType="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="OperationType">
<xsd:sequence>
<xsd:element minOccurs="0" name="readAttribute" type="tns:AttributeReferenceType"/>
<xsd:element minOccurs="0" name="writeAttribute" type="tns:AttributeReferenceType"/>
<xsd:element minOccurs="0" name="valueFormula" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Formula to calculate the value of the writeAttribute
when this action is executed. Usefull at
Activation/Deactivation or Enable/Disable

This element is supposed to be used as ANNOTATION in
resource schema.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:attribute name="action" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:element name="operation" type="tns:OperationType"/>
<xsd:element name="container" type="xsd:boolean"/>
</xsd:schema>

This XML schema documentation has been generated with DocFlex/XML RE 1.8.5 using DocFlex/XML XSDDoc 2.5.0 template set.
DocFlex/XML RE is a reduced edition of DocFlex/XML, which is a tool for programming and running highly sophisticated documentation and reports generators by the data obtained from any kind of XML files. The actual doc-generators are implemented in the form of special templates that are designed visually using a high-quality Template Designer GUI basing on the XML schema (or DTD) files describing the data source XML.
DocFlex/XML XSDDoc is a commercial template application of DocFlex/XML that implements a high-quality XML Schema documentation generator with simultaneous support of framed multi-file HTML, single-file HTML and RTF output formats. (More formats are planned in the future).
A commercial license for "DocFlex/XML XSDDoc" will allow you:
  • To configure the generated documentation so much as you want. Thanks to our template technology, it was possible to support > 400 template parameters, which work the same as "options" of ordinary doc-generators. The parameters are organized in nested groups, which form a parameter tree. Most of them have their default values calculated dynamically from a few primary parameters. So, you'll never need to specify all of them. That will give you swift and effective control over the generated content!
  • To use certain features disabled in the free mode (such as the full documenting of substitution groups).
  • To select only the initial, imported, included, redefined XML schemas to be documented or only those directly specified by name.
  • To include only XML schema components specified by name.
  • To document local element components both globally and locally (similar to attributes).
  • To allow/suppress unification of local elements by type.
  • To enable/disable reproducing of namespace prefixes.
  • To use PlainDoc.tpl main template to generate all the XML schema documentation in a signle-file form as both HTML and incredible quality RTF output.
  • To format your annotations with XHTML tags and reproduce that formatting both in HTML and RTF output.
  • To insert images in your annotations using XHTML <img> tags (supported both in HTML and RTF output).
  • To remove this very advertisement text!
Once having only such a license, you will be able to run the fully-featured XML schema documentation generator both with DocFlex/XML (Full Edition) and with DocFlex/XML RE, which is a reduced free edition containing only the template interpretor / output generator. No other licenses will be required!
But this is not all. In addition to it, a commercial license for "DocFlex/XML SDK" will allow you to modify the XSDDoc templates themselves as much as you want. You will be able to achieve whatever was impossible to do with the template parameters only. And, of course, you could develop any template applications by your own!
Please note that by purchasing a license for this software, you not only acquire a useful tool, you will also make an important investment in its future development, the results of which you could enjoy later by yourself. Every single your purchase matters and makes a difference for us!
To purchase a license, please follow this link: http://www.filigris.com/shop/