Sto leggendo un tutorial in inglese su XMLSchema
http://www.xml.com/pub/a/2000/11/29/...t1.html?page=7
Esso parla di due meccanismi (xs:include e xs:redefine) per importare e - nel secondo - caso anche modificare le dichiarazioni di elementi.
In altri termini tali costrutti consentono di creare un nuovo xml schema importando le definizioni di altri xml schema.
La sintassi per xs:include è per esempio:
<xs:include schemaLocation="CulturalPlaces.xsd"/>
Ma se io voglio aggiungere altre dichiarazioni di elementi non contenute in CulturalPlaces.xsd
dove devo scriverle? Se l'elemento radice di CulturalPlaces.xsd è ad esempio CulturalPlaces (un complex Type) e io voglio inserire ad esempio Libraries come figlio di CulturalPlaces e fratello di Archives(che è gia stato dichiarato nello schema originale) mi è possibile?
Dovrei scrivere nel modo seguente?
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="CulturalPlaces.xsd">
<!--Dichiarazione di Libraries--!>
</xs:include>
</xs.schema>
Oppure
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="CulturalPlaces.xsd">
</xs:include>
<!--Dichiarazione di Libraries--!>
</xs.schema>
Ma in questo ultimo caso non rischio di creare due elementi radice:CulturalPlaces e Libraries?
Insomma dove vanno inserite le nuove dichiarazioni?
Altra questione:
Il tutor dice che il costrutto xs:redefine permette di importare dichiarazioni da un xml schema e ridefinirle.
L'esempio è il seguente:
<xs:redefine schemaLocation="character3.xsd">
<xs:simpleType name="nameType">
<xs:restriction base="xs:string">
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:redefine>
Cosa può essere ridefinito? In tal aso si ridefinisce il valore di maxLength base
da 32 (valore che gli è stato assegnato in character3.xsd) a 40(valore assegnatogli nel xml schema dell'esempio.
Ho scaricato character.3xsd e con il mio editor ho cercato di fare la stessa cosa( includere e ridefinre il simpleType chiamato nameType ma non mi è statto possibile.
La segnalazione di errore è la seguente ( tradotta):
restriction non ha un attributo "base" che si riferisce all'elemento ridefinito "nameType" .
I figli <simpleType> di redifine devono avere discendenti con attributi "base" che si rigeriscono a essi stessi.
Che significa?
Scusate la prolissità e la noia.
Un saluto
e un grazie!
![]()

Rispondi quotando