ciao ragazzi.
sto studiando l'XML scheme definition,
nel tag di definizione di un elemento ho trovato questo attributo
che significa?nillable="true"
a cosa serve?
nn l'avevo mai trovato e anche cercando in giro non ho trovato informazioni
grazie
ciao ragazzi.
sto studiando l'XML scheme definition,
nel tag di definizione di un elemento ho trovato questo attributo
che significa?nillable="true"
a cosa serve?
nn l'avevo mai trovato e anche cercando in giro non ho trovato informazioni
grazie
specifica se l'elemento può evere un valore nullo
![]()
nel senso che l'elemento può avere un contenuto "NULL" (proprio cosi testuale) , o che può non avere contenuto e quindi è opzionale ?
la seconda che hai detto![]()
ma non c'è già minOccurs e maxOccurs?
dovrebbero bastare?
però non capisco perchè li ho visti usare insieme,
l'esempio che ho trovato è questo
<xs:element name="author" nillable="true" minOccurs="0" maxOccurs="unbounded">
Dunque,
Mi sono imbattuto nel problema ed essendone venuto a capo ti lascio una risposta ad uso dei naviganti.
il minoccurs = 0 significa che il tag è opzionale cioè che può esserci o non esserci, nillable indica che può esserci con valore null (tag vuoto). In tal caso però il tag sull'xml dovrà riportare l'attributo xsi:nil="true".
nel caso di stringhe che accettano un <xs:minLength value="0"> (valore di default) l'xsd valida anche un tag vuoto ma va notato che concettualmente quel valore è stringa vuota, non un valore null.
ovviamente se io specifico un tipo int il tag vuoto non viene validato.
ti alego qualche esempio:
##############ESEMPIO 1 STRINGA VUOTA CON NULL NON SPECIFICATO
l'xsd richiede un valore di tipo stringa che può avere len=0, il tag vuoto viene accettato perchè rappresenta una stringa vuota, in questo scenario non è possibile rappresentare una stringa null
xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Anagrafica">
<xs:complexType>
<xs:sequence>
<xs:element name="Indirizzo" type="Indirizzo" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="Indirizzo">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="0" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<Anagrafica xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xsdNillable.xsd">
<Indirizzo></Indirizzo>
</Anagrafica>
##########################################
##############ESEMPIO 2 STRINGA NULL
l'xsd richiede un valore di tipo stringa che NON può avere len=0 ma può avere valore null, il tag vuoto viene accettato solo se inviato con l'attributo xsi:nil="true" cioè se rappresenta una stringa null, senza attributo rappresenterebbeuna stringa vuota e l'xsd non validerebbe:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Anagrafica">
<xs:complexType>
<xs:sequence>
<xs:element name="Indirizzo" type="Indirizzo" nillable="true" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="Indirizzo">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<Anagrafica xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xsdNillable.xsd">
<Indirizzo xsi:nil="true"></Indirizzo>
</Anagrafica>
per cui se nel primo esempio specifico xsi:nil="true" il file non viene validato perchè manxa nillabel=true nell'xsd, nel secondo caso se tolgo xsi:nil="true" l'xml non viene validato perchè la <xs:minLength value="1"> fa si che non vengano accettate stringhe vuote.