5

XSD を記述する必要がある xml フラグメントがあります。

<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 クラスの生成中にエラーが発生します。

<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 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」に追加する必要があります。ファイルの 10 行目:/C:/book.xsd

4

2 に答える 2

8

1 つの XSD ファイルは 1 つの名前空間のみをターゲットにするか、名前空間をまったくターゲットにできないため、実際には少なくとも名前空間と同数の XSD ファイルが必要です。

ルート要素は 1 つの名前空間にあり、属性は別の名前空間にあるため、少なくとも 2 つのファイルが必要です。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-syntax-for-xml-attributes-with-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>
于 2012-08-24T14:12:43.163 に答える
0

以下の 2 つのスキーマを使用します。

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

身分証明書用

<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>
于 2012-08-24T14:13:05.007 に答える