Si consideri il seguente schema:Qual è la differenza tra ref e type in uno schema XML?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Root">
<xs:sequence>
<xs:element ref="Child" />
<xs:element name="Child2" type="Child" />
</xs:sequence>
<xs:attribute ref="Att" />
<xs:attribute name="Att2" type="Att" />
</xs:complexType>
<xs:complexType name="Child">
<xs:attribute ref="Att" />
</xs:complexType>
<xs:attribute name="Att" type="xs:integer" />
</xs:schema>
Il ref
a "Child" sulla linea 6 fallisce, mentre i type
on line 7 Convalida. Per l'attributo, il ref
ha esito positivo mentre lo type
ha esito negativo. Sto cercando di capire perché.
La mia comprensione di ref
era che si riferiva semplicemente a un altro elemento e specificava che ci si aspetta di vedere un'istanza del tipo indicato (con il nome dato nella definizione) in quella posizione. Ovviamente mi sbaglio, quindi cosa significa in realtà ref
?
OK, ho capito che 'type' può riferirsi solo a una definizione di tipo - ha senso. Ma per chiarire su 'ref': può solo puntare a un'istanza preesistente di un elemento e inserirne un clone? –
Sì, penso che si possa dire in questo modo (se "istanza" significa qualche elemento di livello superiore dichiarato da qualche parte in xsd). Un'altra differenza: quando si utilizza 'type', è possibile avere due elementi con un nome diverso con la stessa struttura. Quando usi 'ref', hai elementi con lo stesso nome o struttura ovunque. –