带有命名空间的XML属性的XSD语法

Nei*_*eil 5 xml schema xsd namespaces jaxb

我有一个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>
Run Code Online (Sandbox Code Playgroud)

以下XSD在生成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>
Run Code Online (Sandbox Code Playgroud)

错误是

C:\ Program Files\Java\jdk1.7.0_06\bin> xjc -p test 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

Pet*_*dea 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)