• Non ci sono risultati.

6. ESTENDERE SCOTT

6.3 IL DESCRITTORE DI PLUGIN

6.3.1 Lo schema XSD

La grammatica del descrittore di plugin è descritta da uno Schema XSD che per completezza è riportato in questo paragrafo.

Questa grammatica è contenuta all’interno di un file di nome spd.xsd che può essere utilizzato insieme a un editor XML per rendere più agevole la scrittura del descrittore di plugin. In Microsoft Visual Studio, copiando questo file nella cartella Xml\Schemas, si riesce ad avere un completo riconoscimento di tag e attributi. Questo file quindi oltre a permettere la validazione del documento consente di aumentare la produttività nella creazione del descrittore di plugin.

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"

targetNamespace="http://www.scott.it/spd-schema"

xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Plugin">

<xs:complexType> <xs:sequence>

<xs:element name="Dependencies" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Dependency" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>

<xs:attribute name="plugin" type="xs:string" use="required" /> </xs:complexType>

</xs:element> </xs:sequence> </xs:complexType> </xs:element>

<xs:element name="Commands" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Command" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>

<xs:sequence>

<xs:element name="Description" type="xs:string" minOccurs="0" /> <xs:element name="Inputs">

<xs:complexType> <xs:sequence>

<xs:element name="Parameter" minOccurs="0"

maxOccurs="unbounded"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" use="required" /> <xs:attribute name="description" type="xs:string"

135 </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>

<xs:element name="Outputs" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>

<xs:sequence>

<xs:element name="Parameter" minOccurs="0"

maxOccurs="unbounded"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" use="required" /> <xs:attribute name="description" type="xs:string"

use="optional" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence>

<xs:attribute name="name" type="xs:string" use="required" /> </xs:complexType>

</xs:element> </xs:sequence> </xs:complexType> </xs:element>

<xs:element name="Types" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Enums" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Enum" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>

<xs:sequence>

<xs:element name="Entry" minOccurs="1" maxOccurs="unbounded"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="value" type="xs:string" use="optional"/> <xs:attribute name="description" type="xs:string"

use="optional" /> </xs:complexType>

</xs:element> </xs:sequence>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="description" type="xs:string" use="optional"/> </xs:complexType>

</xs:element> </xs:sequence> </xs:complexType> </xs:element>

<xs:element name="Vectors" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Vector" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="itemType" type="xs:string" use="required" /> <xs:attribute name="description" type="xs:string" use="optional"/> </xs:complexType>

</xs:element> </xs:sequence> </xs:complexType> </xs:element>

<xs:element name="Structs" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Struct" minOccurs="0" maxOccurs="1"> <xs:complexType>

<xs:sequence>

<xs:element name="Member" minOccurs="1" maxOccurs="unbounded"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" use="required" />

136

<xs:attribute name="description" type="xs:string"

use="optional" /> </xs:complexType>

</xs:element> </xs:sequence>

<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="description" type="xs:string" use="optional"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

La Figura 101 mostra la struttura di base di un descrittore di plugin. Il tag di root è <Plugin> e l’attributo xmlns specifica il namespace relativo allo schema XSD descritto precedentemente.

La sezione <Dependencies> permette di specificare quali sono i plugin da cui si dipende; le sezioni <Commands> e <Types> definiscono rispettivamente i comandi e i tipi complessi del plugin.

Nei successivi paragrafi saranno spiegate nel dettaglio le varie sezioni di cui è composto un generico descrittore.

137

Documenti correlati