2012-08-24 61 views
5

屬性我有我需要寫XSD爲XML XSD的語法與命名空間

<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> 

以下XSD提供了同時JAXB類生成錯誤的XML片段。

<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> 

錯誤是

C:\ Program Files文件\的Java \ jdk1.7.0_06 \ BIN> XJC -p測試C:\ book.xsd 解析架構... [錯誤] SRC -resolve.4.2:解析組件'ns:number'時出錯。檢測到 'ns:number'位於命名空間'http://xmlns.oracle.com/id/1.0'中,但來自此命名空間的組件 不能從模式文檔'file:/ C:/ book 。 xsd'。如果這是不正確的名稱空間,則可能需要更改'ns:number'的前綴 。如果這是正確的命名空間,那麼應在'file:/ C:/book.xsd'中添加適當的'import' 標記。 行文件的10:/ C:/book.xsd

回答

8

實際上,你至少需要儘可能多的XSD文件,命名空間,因爲一個XSD文件只能定位到一個命名空間,或根本沒有。

由於您的根元素位於一個名稱空間中,而屬性位於另一個名稱空間中,因此您至少需要兩個文件。您通過xsd:import「鏈接」它們。

頂部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的語法換XML的屬性與 - 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

使用下面兩個模式

<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> 

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>