2012-08-24 24 views
5

Ho un frammento di XML per cui ho bisogno di scrivere XSDXSD sintassi per XML attributi con namespace

<root xmlns="http://xmlns.oracle.com/sca/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0"> 
    <service name="Book" id:number="465"/> 
</root> 

Il seguente XSD dà errore durante la generazione di classe JAXB.

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/sca/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="service"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attribute type="xs:string" name="name"/> 
       <xs:attribute ref="ns:number" xmlns:ns="http://xmlns.oracle.com/id/1.0"/> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    </xs:schema> 

errore è

C: \ Program Files \ Java \ jdk1.7.0_06 \ bin> xjc -p prova C: \ book.xsd analisi uno schema ... [ERRORE] src -resolve.4.2: Errore durante la risoluzione del componente 'ns: numero'. È stato rilevato che 'ns: numero' è nello spazio dei nomi 'http://xmlns.oracle.com/id/1.0', ma il componente s da questo spazio dei nomi non è referenziabile dal file del documento dello schema:/C:/book . xsd '. Se questo è lo spazio dei nomi errato, forse il prefisso di 'ns: number' deve essere sostituito da s. Se questo è lo spazio dei nomi corretto, è necessario aggiungere un tag appropriato "import" a "file:/C: /book.xsd". riga 10 del file:/C: /book.xsd

risposta

8

In realtà è necessario almeno il maggior numero di file XSD come spazi dei nomi poiché un file XSD può indirizzare solo uno spazio dei nomi o nessuno.

Poiché l'elemento radice si trova in uno spazio dei nomi e l'attributo in un altro, sono necessari almeno due file. Li "colleghi" attraverso un xsd: import.

Top XSD:

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema xmlns="http://xmlns.oracle.com/sca/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/sca/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:import schemaLocation="xsd-syntax-for-xml-attributes-with-namespace1.xsd" namespace="http://xmlns.oracle.com/id/1.0" /> 
    <xsd:element name="root"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="service"> 
      <xsd:complexType> 
      <xsd:attribute name="name" type="xsd:string" use="required" /> 
      <xsd:attribute ref="id:number" use="required" /> 
      </xsd:complexType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

XSD-sintassi-per-XML-attributi-con-namespace1.xsd

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema xmlns="http://xmlns.oracle.com/id/1.0" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/id/1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:attribute name="number" type="xsd:unsignedShort" /> 
</xsd:schema> 
0

Utilizzare i sottostanti due schemi

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/sca/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0" xmlns:sca="http://xmlns.oracle.com/sca/1.0"> 
    <xs:import namespace="http://xmlns.oracle.com/id/1.0" schemaLocation="id.xsd"/> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="sca:service"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="service"> 
    <xs:complexType> 
     <xs:attribute name="name" use="required" type="xs:NCName"/> 
     <xs:attribute ref="id:number" use="required"/> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

per ID

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/id/1.0" xmlns:id="http://xmlns.oracle.com/id/1.0" xmlns:sca="http://xmlns.oracle.com/sca/1.0"> 
    <xs:import namespace="http://xmlns.oracle.com/sca/1.0" schemaLocation="Untitled2.xsd"/> 
    <xs:attribute name="number" type="xs:integer"/> 
</xs:schema>