カスタム名前空間の宣言

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  データソースとターゲット > XML と XML スキーマ >

カスタム名前空間の宣言

デフォルトでは、マッピングが XML 出力を生成する際に、各要素と属性の名前空間 (または、名前空間のセット) が自動的に MapForce によりターゲットコンポーネントと関連するスキーマから生成されます。これは、 MapForce 内のデフォルトの振る舞いで、 XML 出力の生成を含むマッピングのシナリオの大半に適切です。

 

しかしながら、 結果の XML 出力内で要素の名前空間の管理を更に行う場合、 マッピングから要素の名前空間を手動で宣言することが必要な可能性があります。

 

この仕組みを理解するには、 <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\  内にある BooksToLibrary.mfd マッピングを開きます。library ノードを右クリックし、コンテキストメニューから 「名前空間の追加」 を選択します。

mf_custom_namespace_01

 

library ノードの下で次の2つの新しいノードが使用することができるようになっていることに注意してください: namespaceprefix.

mf_custom_namespace_02

 

マッピングからの文字列の値をマップすることができます。下のイメージでは、名前空間 「altova.library」 と prefix 「lib」 を与える、2つの定数が( 「挿入 | 定数」 メニューコマンドを使用して)定義されています:

mf_custom_namespace_03

 

生成された出力内の結果としては、 xmlns:<prefix>="<namespace>" 属性が、<prefix><namespace> がマッピング(この場合は定数)から来る値である箇所の要素に追加されます。生成された出力は、 以下のようになります (ハイライトされている部分に注意してください):

 

<?xml version="1.0" encoding="UTF-8"?>
<library xmlns:lib="altova.library" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="library.xsd">

...

 

メモ:カスタム名前空間の宣言 (と 「名前空間の追加」 コマンド)は、 ターゲット XML コンポーネントに取り有益であり、要素のみに適用することができます。属性に対して、 「名前空間の追加」 コマンドは、属性とワイルドカードノードに対しては使用することができません。ノードの子への動的なアクセスが有効化されている場合でも、または、「全てをコピー」接続を使用してノードがデータを受け取るノードの場合でも使用することはできません ( ノード名のマッピングを参照してください)。

 

必要に応じて、複数の名前空間を同じ要素のために宣言することができます。これを行うには、 ノードをもう一度右クリックし、コンテキストメニューから 「名前空間の追加」 を選択します。新規のプレフィックスと名前空間の値に接続することのできる名前空間とプレフィックスノードの新規のペアを使用できるようになります。

 

以前に追加された名前空間の宣言を削除するには、 ns:namespace ノードを右クリックし、コンテキストメニューから 「名前空間の削除」 を選択します。

 

空の値が与えられる場合でも、 namespaceprefix 入力コネクタの両方がマップされている必要があります。

 

( xmlns="mydefaultnamespace"のフォーマットの) デフォルトの名前空間を宣言する場合、 prefix に対して空の文字列をマップします。このケースをマップ上で確認する場合は、2番目の定数が空の文字列になるように上のサンプルマッピングを編集します。

 

mf_custom_namespace_04

 

結果の出力は以下のようになります:

 

<?xml version="1.0" encoding="UTF-8"?>
<library xmlns="altova.library" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="library.xsd">

...

 

属性の名前のためにプレフィックスを作成する場合、 例えば、 <number prod:id="prod557">557</number> 、ノードの属性への動的なアクセスを有効化する、または<number> のために prod:id 属性を持つようにスキーマを編集することにより属性の名前のためにプレフィックスを作成することができます (次を参照してください: ノード名のマッピング)。


(C) 2019 Altova GmbH