N°9065 - XML Definition for Dashlet properties

This commit is contained in:
Eric Espie
2026-01-06 15:59:46 +01:00
parent 904cd0b518
commit efb1bd765b
56 changed files with 2433 additions and 1270 deletions

35
validation/itop-delta.xsd Normal file
View File

@@ -0,0 +1,35 @@
<?xml version="1.0"?>
<!--
~ @copyright Copyright (C) 2010-2026 Combodo SAS
~ @license http://opensource.org/licenses/AGPL-3.0
-->
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
>
<!-- ===================== Lazy validation in the first place ===================== -->
<xsd:complexType name="Combodo-Anything">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
<xsd:attribute name="version" type="xsd:string"/>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="_delta" type="itop-delta-flag"/>
</xsd:complexType>
<!-- ============================= Reusable components =============================== -->
<xsd:simpleType name="itop-delta-flag" final="restriction" >
<xsd:restriction base="xsd:string">
<xsd:enumeration value="merge" />
<xsd:enumeration value="if_exists" />
<xsd:enumeration value="must_exist" />
<xsd:enumeration value="define" />
<xsd:enumeration value="define_if_not_exists" />
<xsd:enumeration value="redefine" />
<xsd:enumeration value="force" />
<xsd:enumeration value="delete" />
<xsd:enumeration value="delete_if_exists" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
>
<xsd:include schemaLocation="itop-delta.xsd"/>
<xsd:include schemaLocation="property_types.xsd"/>
<!-- ===================== Lazy validation in the first place ===================== -->
<xsd:element name="itop_design" type="Combodo-Anything"/>
<!-- ===================== Get rid of errors for still unhandled types ===================== -->
<xsd:complexType name="AttributeString">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="AttributeExternalKey">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="AttributeDateTime">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="MenuGroup">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="DashboardMenuNode">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="ShortcutContainerMenuNode">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="TemplateMenuNode">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="OQLMenuNode">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="WebPageMenuNode">
<xsd:complexContent>
<xsd:extension base="Combodo-Anything"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>

View File

@@ -0,0 +1,400 @@
<?xml version="1.0"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
>
<xsd:include schemaLocation="itop-delta.xsd"/>
<xsd:complexType name="Combodo-AbstractAbstractPropertyType" abstract="true">
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="_delta" type="itop-delta-flag"/>
</xsd:complexType>
<xsd:complexType name="Combodo-AbstractPropertyType"> <!-- not abstract! -->
<xsd:complexContent>
<xsd:extension base="Combodo-AbstractAbstractPropertyType">
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-PropertyType">
<xsd:complexContent>
<xsd:extension base="Combodo-AbstractAbstractPropertyType">
<xsd:sequence>
<xsd:element name="extends" type="xsd:string"/>
<xsd:element name="definition" type="Combodo-ValueType-Abstract"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!--============================= Internal types ===============================-->
<xsd:simpleType name="itop-tag" id="itop-tag">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Za-z][A-Za-z_0-9]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attributeGroup name="attribute-itop-tag-as-id">
<xsd:attribute name="id" type="itop-tag" use="required">
<xsd:annotation>
<xsd:documentation>Name of the tag in the target XML delta. Should be lower case, separated by underscores</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:simpleType name="dictentry-or-string">
<xsd:annotation>
<xsd:documentation>Dictionary entry or string</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="class-name-or-ref">
<xsd:annotation>
<xsd:appinfo>Example: "{{query1.class}}"</xsd:appinfo>
<xsd:documentation>Reference to the class to</xsd:documentation>
</xsd:annotation>
<xsd:simpleContent>
<xsd:extension base="xsd:string"/>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="label-and-value">
<xsd:sequence>
<xsd:element name="label" type="dictentry-or-string"/>
<xsd:element name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<!--============================= Scalar Value types ===============================-->
<xsd:complexType name="Combodo-ValueType-Abstract">
<xsd:sequence>
<xsd:element name="label" minOccurs="0" type="xsd:string"/>
<xsd:element name="usage" minOccurs="0">
<xsd:annotation>
<xsd:documentation>When to use this tag (always, never, optional...)</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="optional"/>
<xsd:enumeration value="required"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="relevance-condition" minOccurs="0">
<xsd:annotation>
<xsd:documentation>OQL Expression, with each sibling value as a parameter like in "{{query.selected_class = 'Ticket'}}"</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="itop-tag"/> <!-- Sometimes mandatory, sometimes optional... could not manage to handle both cases, thus I've left it as a lazy validation -->
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Leaf">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Abstract">
<xsd:sequence>
<xsd:element name="xml-format" minOccurs="0" type="Combodo-XMLFormat-Abstract">
<xsd:annotation>
<xsd:documentation>Format of the property in the source XML</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Label">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="min-length" minOccurs="0" type="xsd:positiveInteger"/>
<xsd:element name="max-length" minOccurs="0" type="xsd:positiveInteger"/>
<xsd:element name="not-blank" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-String">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="min-length" minOccurs="0" type="xsd:positiveInteger"/>
<xsd:element name="max-length" minOccurs="0" type="xsd:positiveInteger"/>
<xsd:element name="not-blank" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Text">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-String">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Choice">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="values" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="label" type="dictentry-or-string"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-ChoiceFromInput">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="values" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="label" type="dictentry-or-string"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Integer">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Boolean">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="on" type="label-and-value">
<xsd:annotation>
<xsd:documentation>Value representing "true"</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="off" type="label-and-value">
<xsd:annotation>
<xsd:documentation>Value representing "false"</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-OQL">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Class">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="categories-csv" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>Example: "bizmodel,structure"</xsd:appinfo>
<xsd:documentation>Categories of classes to propose (union)</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-ClassAttribute">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="class" type="class-name-or-ref"/>
<xsd:element name="category" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>Example: "groupable"</xsd:appinfo>
<xsd:documentation>Category of attributes to propose</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="groupable"/>
<xsd:enumeration value="displayable"/>
<xsd:enumeration value="numeric"/>
<xsd:enumeration value="enum"/>
<xsd:enumeration value="date"/>
<xsd:enumeration value="link"/>
<xsd:enumeration value="string"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-ClassAttributeGroupBy">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="class" type="class-name-or-ref"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-AggregateFunction">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="class" type="class-name-or-ref"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-ClassAttributeValue">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
<xsd:element name="class" type="class-name-or-ref"/>
<xsd:element name="attribute"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-ProfileName">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Icon">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Leaf">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!--============================= Complex value types ===============================-->
<xsd:complexType name="Combodo-ValueType-PropertyTree">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Abstract">
<xsd:sequence>
<xsd:element name="nodes">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="node" type="Combodo-ValueType-Abstract">
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-Collection">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Abstract">
<xsd:sequence>
<xsd:element name="xml-format" minOccurs="0" type="Combodo-XMLFormat-Abstract">
<xsd:annotation>
<xsd:documentation>Format of the property in the source XML</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="prototype">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="node" type="Combodo-ValueType-Abstract"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-ValueType-CollectionOfValues">
<xsd:complexContent>
<xsd:extension base="Combodo-ValueType-Abstract">
<xsd:sequence>
<xsd:element name="xml-format" minOccurs="0" type="Combodo-XMLFormat-Abstract">
<xsd:annotation>
<xsd:documentation>Format of the property in the source XML</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="value-type" type="Combodo-ValueType-Leaf"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!--============================= XML Formats ===============================-->
<xsd:complexType name="Combodo-XMLFormat-Abstract">
<xsd:sequence>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Combodo-XMLFormat-CSV">
<xsd:complexContent>
<xsd:extension base="Combodo-XMLFormat-Abstract">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-XMLFormat-ValueAsId">
<xsd:complexContent>
<xsd:extension base="Combodo-XMLFormat-Abstract">
<xsd:sequence>
<xsd:element name="tag-name" type="xsd:NCName"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Combodo-XMLFormat-FlatArray">
<xsd:complexContent>
<xsd:extension base="Combodo-XMLFormat-Abstract">
<xsd:sequence>
<xsd:element name="count-tag" type="xsd:NCName">
<xsd:annotation>
<xsd:documentation>Tag to hold the number of items in the collection</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="tag-format" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Template to generate tag name for the sub-nodes. Available placeholders: $id$ and $rank$</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>