6.5 Riuso multiplo di nodi modello
7.1.1 Abilitare l’IDN Template nei documenti IDN
Il meccanismo di IDN Template descritto all’interno del presente lavoro, in particolare nell’implementazione suggerita dal paragrafo precedente, risulta efficace nella misura in cui viene effettivamente utilizzato all’interno dei documenti IDN.
A tal fine l’XML Schema cui questi ultimi devono risultare conformi, e che `e stato illustrato all’appendice A, deve essere opportunamente modificato:
• introducendo il tag idn:Template, come figlio del tag idn:VRIDNMeta, incluso all’interno di idn:VRNode;
• inserendo all’interno del suddetto tag idn:Template un opportuno at- tributo obbligatorio link ; questo ha il ruolo di indicare l’URI del nodo modello cui il VR-Node considerato deve risultare conforme.
In seguito a tale modifica la definizione dell’elemento idn:VRNode nell’XML Schema considerato diviene quella riportata all’interno del listato 7.2. La definizione completa di tale XML Schema `e riportata dal listato 7.3.
Listato 7.2: Modifiche al VR-Documento per abilitare IDN Template.
<!-- Variazione alla definizione di idn:VRIDNMeta -->
<xs:element name="Template" type="idnTemplate" minOccurs="0" maxOccurs="1"/
>
<!-- Aggiunta all’XML Schema --> <xs:complexType name="idnTemplate">
<xs:attribute use="required" name="uri" type="xs:anyURI"></xs:attribute> </xs:complexType>
7.1 Rappresentazione dell’IDN Template 137
Listato 7.3: XML Schema di documento IDN che abilita IDN Template.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="VRDoc" type="idnVrDocument"/>
<xs:complexType name="idnVrDocument"> <xs:sequence>
<xs:element name="VRDocInfo" type="VrDocInfoType" minOccurs="0"
maxOccurs="1"/>
<xs:element name="VRNodeEnvelope" type="idnVrNodeEnvelope" minOccurs=
"0" maxOccurs="unbounded"/> </xs:sequence>
</xs:complexType>
<xs:complexType name="VrDocInfoType"> <xs:all>
<xs:element name="Errors" type="ErrorsType" minOccurs="0" maxOccurs=" 1"/>
<xs:element name="Warnings" type="WarningsType" minOccurs="0"
maxOccurs="1"/> </xs:all>
</xs:complexType>
<xs:complexType name="ErrorsType"> <xs:sequence>
<xs:element name="Error" type="IdnExceptionType" minOccurs="0"
maxOccurs="unbounded"/> </xs:sequence>
</xs:complexType>
<xs:complexType name="WarningsType"> <xs:sequence>
<xs:element name="Warning" type="IdnExceptionType" minOccurs="0"
maxOccurs="unbounded"/> </xs:sequence>
</xs:complexType>
<xs:complexType name="IdnExceptionType"> <xs:all>
<xs:element name="Code" type="xs:string" minOccurs="1" maxOccurs="1"/
>
<xs:element name="Message" type="xs:string" minOccurs="1" maxOccurs=" 1"/>
<xs:element name="TargetedLris" type="lriList" minOccurs="0"
maxOccurs="1"/> </xs:all>
</xs:complexType>
<xs:complexType name="lriList"> <xs:sequence>
<xs:element name="Lri" type="xs:string" minOccurs="1" maxOccurs=" unbounded"/>
</xs:sequence> </xs:complexType>
<xs:complexType name="idnVrNodeEnvelope"> <xs:all>
<xs:element name="VRNode" type="idnVrNode" minOccurs="1" maxOccurs="1 " />
<xs:element name="VRNodeInfo" type="idnVrNodeInfo" minOccurs="1"
maxOccurs="1"/> </xs:all>
</xs:complexType>
<xs:complexType name="idnVrNodeInfo"> <xs:all>
<xs:element name="IsRoot" type="xs:boolean" minOccurs="1" maxOccurs=" 1"/>
<xs:element name="Etag" type="xs:string" minOccurs="0" maxOccurs="1"/
>
<xs:element name="HttpStatus" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="Keywords" type="xs:string" minOccurs="0" maxOccurs=
"1"/> </xs:all> </xs:complexType>
<xs:element name="VRNode" type="idnVrNode"/> <xs:complexType name="idnVrNode">
<xs:all>
<xs:element name="VRApplicationData" type="vrApplicationData"
minOccurs="0" maxOccurs="1"/>
<xs:element name="VRApplicationMeta" type="vrApplicationMeta"
minOccurs="0" maxOccurs="1"/>
<xs:element name="VRIDNMeta" type="vrIdnMeta" minOccurs="0" maxOccurs ="1"/>
<xs:element name="ManagementMeta" type="managementMeta" minOccurs="0"
maxOccurs="1"/> </xs:all>
<xs:attribute name="lri" type="xs:anyURI" use="required" /> </xs:complexType>
<xs:simpleType name="vrApplicationData"> <xs:restriction base="xs:base64Binary"/> </xs:simpleType>
<xs:complexType name="vrApplicationMeta"> <xs:all>
<xs:element name="IDNApplicationID" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="IDNAuthor" type="author" minOccurs="0" maxOccurs="1 "/>
<xs:element name="IDNModifiedOn" type="xs:string" minOccurs="0"/> </xs:all>
7.1 Rappresentazione dell’IDN Template 139
<xs:complexType name="vrIdnMeta"> <xs:all>
<xs:element name="AggregationMeta" minOccurs="0" maxOccurs="1"> <xs:complexType>
<xs:sequence>
<xs:element name="AggregationLink" type="link" minOccurs="0"
maxOccurs="unbounded"/> </xs:sequence>
</xs:complexType> </xs:element>
<xs:element name="BackLinkMeta" minOccurs="0" maxOccurs="1"> <xs:complexType>
<xs:sequence>
<xs:element name="BackLink" type="link" minOccurs="0" maxOccurs=
"unbounded"/> </xs:sequence> </xs:complexType> </xs:element>
<xs:element name="IncomingChangeMeta" minOccurs="0" maxOccurs="1"> <xs:complexType>
<xs:sequence>
<xs:element name="IncomingChangeLink" type="link" minOccurs="0"
maxOccurs="unbounded"/> </xs:sequence>
</xs:complexType> </xs:element>
<xs:element name="NodeLocalName" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="Template" type="xs:anyURI" minOccurs="0" maxOccurs=
"1"/>
<xs:element name="ReferenceMeta" minOccurs="0" maxOccurs="1"> <xs:complexType>
<xs:sequence>
<xs:element name="ReferenceLink" type="link" minOccurs="0"
maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:all> </xs:complexType>
<xs:complexType name="managementMeta"> <xs:all>
<xs:element name="LicensePolicy" type="licensePolicy" minOccurs="0"
maxOccurs="1"/>
<xs:element name="PrivacyPolicy" type="privacyPolicy" minOccurs="0"
maxOccurs="1"/>
<xs:element name="ProvenanceManagement" type="provenanceManagement"
minOccurs="0" maxOccurs="1"/>
<xs:element name="ReplicationPolicy" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="SecurityPolicy" type="xs:string" minOccurs="0"
<xs:element name="TimePolicy" type="timePolicy" minOccurs="0"
maxOccurs="1"/>
<xs:element name="VersioningPolicy" type="xs:string" minOccurs="0"
maxOccurs="1"/> </xs:all>
</xs:complexType>
<xs:complexType name="author"> <xs:all>
<xs:element name="IDNApplicationInstanceID" type="xs:string"
minOccurs="0" maxOccurs="1"/>
<xs:element name="IDNHostIPAddress" type="xs:string" minOccurs="0"/> <xs:element name="IDNHostName" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="IDNUser" type="xs:string" minOccurs="0" maxOccurs=" 1"/>
</xs:all> </xs:complexType>
<xs:complexType name="link"> <xs:all>
<xs:element name="LocalName" type="xs:string" minOccurs="0" maxOccurs ="1"/>
<xs:element name="Value" type="xs:anyURI" minOccurs="0" maxOccurs="1"
/>
<xs:element name="Meta" type="xs:string" minOccurs="0" maxOccurs="1"/
> </xs:all>
<xs:attribute name="vr-id" type="xs:int" use="required" /> </xs:complexType>
<xs:complexType name="licensePolicy"> <xs:all>
<xs:element name="DataLicensing" minOccurs="0"> <xs:complexType>
<xs:sequence>
<xs:element name="DataLicense" type="licenseType" minOccurs="0"
maxOccurs="unbounded" /> </xs:sequence>
</xs:complexType> </xs:element>
<xs:element name="NodeLicensing" minOccurs="0"> <xs:complexType>
<xs:sequence>
<xs:element name="NodeLicense" type="licenseType" minOccurs="0"
maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:all> </xs:complexType>
<xs:complexType name="licenseType"> <xs:simpleContent>