Ho messo insieme un XSD e ho usato JAXB per generare classi da esso.JAXB aggiunta spazio dei nomi al genitore ma non agli elementi figlio contenuti
Ecco la mia XSDs-
myDoc.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.mydoc.org"
targetNamespace="http://www.mydoc.org"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mtp="http://www.mytypes.com" elementFormDefault="qualified">
<xs:import namespace="http://www.mytypes.com" schemaLocation="mytypes.xsd" />
<xs:element name="myDoc">
<xs:complexType>
<xs:sequence>
<xs:element name="crap" type="xs:string"/>
<xs:element ref="mtp:foo"/>
<xs:element ref="mtp:bar"/>
</xs:sequence>
</xs:complexType>
</xs:element>
mytypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.mytypes.com"
xmlns="http://www.mytypes.com"
xmlns:tns="http://www.mytypes.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="foo" type="tns:Foo"/>
<xs:element name="bar" type="tns:Bar"/>
<xs:element name="spam" type="tns:Spam"/>
<xs:simpleType name="Foo">
<xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<xs:complexType name="Bar">
<xs:sequence>
<xs:element ref="spam"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Spam">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:schema>
Il documento schierato è-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myDoc xmlns:ns2="http://www.mytypes.com">
<crap>real crap</crap>
<ns2:foo>bleh</ns2:foo>
<ns2:bar>
<spam>blah</spam>
</ns2:bar>
</myDoc>
Nota che l'elemento <spam>
utilizza lo spazio dei nomi predefinito. Mi piacerebbe che utilizzasse lo spazio dei nomi ns2
. Lo schema (mytypes.xsd) esprime il fatto che <spam>
è contenuto all'interno di <bar>
che nell'istanza XML è associato allo spazio dei nomi ns2
.
Ho rotto la mia testa su questo per più di una settimana e vorrei ns2
prefisso a comparire in <spam>
. Cosa dovrei fare?
richiesto:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myDoc xmlns:ns2="http://www.mytypes.com">
<crap>real crap</crap>
<ns2:foo>bleh</ns2:foo>
<ns2:bar>
<ns2:spam>blah</ns2:spam><!--NS NS NS-->
</ns2:bar>
</myDoc>
sto usando JAXB-2.1.11 con jdk1.5. Non ho modificato manualmente le classi generate e il file package-info.java. Bar.java è annotato con- @XmlType (name = namespace "Bar" = "http://www.mytypes.com" propOrder = { "spam"}) package-info.java contiene @XmlSchema (namespace = "http://www.mydoc.org", elementFormDefault = XmlNsForm.QUALIFIED) – Nishant
È interessante notare che posso eseguire il marshalling di un documento e ripristinarlo perfettamente alla perfezione. AFAIU, l'istanza XML afferma che lo appartiene allo spazio dei nomi null e la sua definizione non deve essere trovata –
Nishant