カスタムスキーマの名前空間


18

私は現在働いているプロジェクトのリード(氏Mickolov Wroussakov)は、すべてのコンテンツスキーマのカスタム名前空間を指定しています

<xsd:schema elementFormDefault="qualified" 
targetNamespace="http://www.clientdomain.com/tridion/schemas" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns="http://www.clientdomain.com/tridion/schemas" 
xmlns:tcmi="http://www.tridion.com/ContentManager/5.0/Instance"> 

私が推奨されている印象の下に常にでしたスキーマごとに固有の名前空間を作成します。ここでは、これらのすべてが上記の項目を使用して実装されています。

このような問題はありません。これが今後いくつかの問題を引き起こすかどうかは疑問です。

+6

質問#500! 05 6月. 132013-06-05 16:43:01

  0

私はなぜTridionがあなたのために作るデフォルトのUUID名前空間を残すのではなく、それらをすべて同じにしたいのかと尋ねなければなりません。それらを変更する理由はありますか? 05 6月. 132013-06-05 19:01:48

  0

@chris michelovに尋ねる必要があります:) 05 6月. 132013-06-05 19:15:23

12

複数のスキーマに1つの名前空間を使用しないようにする理由は、これらのスキーマが同じ種類を定義しようとしない限りはありません。

名前空間は、名前の衝突を防ぐためのメカニズムです。このような衝突を防ぐのに役立つ他の要素がある場合、名前空間がすべての苦労をする必要はありません。

最も重要なことは、デザインをしており、それに従うことです。開発者の半分がスキーマごとに1つの名前空間を必要とし、残りがルート要素名などを使用している場合は、困っています。

名前空間は、スキーマまたはドキュメントを一意に識別するものではありません。 「名前空間によるスキーマの検索」機能は賢明に聞こえるかもしれませんが、実装する前に推奨事項を再読み込みすることをお勧めします。確かに名前空間が意図したものではありません。

私は TridionのデフォルトのGUIDベースの名前空間URIを交換をお勧めします。これの主な理由は、通常はコードで参照する必要があり、GUIDは正確に入力したり、視覚的に検証するのに適しています。理想的には、ケーシングなどを確実に予測できるスキームを選択してください。それだけで人生が楽になります。意味のある名前を使うことも良いことです。コンポーネントXMLを外部システムにエクスポートすると、人々はどこから来たのかを知ることができます。

独自のURIを指定する別の理由は、既存のスキーマのデータをインポートする場合です。

複数のスキーマで同じ名前空間を使用することはひどい考えではないと私は同意しますが、私はそれが良い考えであると完全には確信していません。判断を適用する必要があります。

  0

偉大な考えドミニク、私は完全に同意します。 Tridionでは、すべてのスキーマに一意の名前空間を設定していますが、これはXMLのベストプラクティスではありません。それはすべて、スキーマの細かさに依存します。一方、Tridionでは、同じことを2回指定しないかどうかを確認するために、すべてのXSD定義をスキーマから収集する方法はありません。したがって、XSDの最初の設計をしない限り、すべてのTridionスキーマに対して一意のスキーマURIを使用することを検討します。 05 6月. 132013-06-05 22:36:11

  0

それでは、それを繰り返すことを避けるためには、他のスキーマにあるものを知っておく必要があります。あるいは、割り当てられたGUIDに固執する必要があります。 06 6月. 132013-06-06 05:36:26


10

実際、はい、今後問題が発生する可能性があります。最低でも、Tridionのを「混乱」しますすべてのスキーマに同じ名前空間を持つ -

1のために、私たちはCMやCD上の機能「の名前空間でスキーマを検索」を実施に探しています。

私もコンテンツポータートランスレーションマネージャ(同じ環境で起こっている他のものがあったが)の問題を見ている、と私たちはこの問題を解決するためにやったことの一つは、各スキーマを確実にするためだったが、自身を持っていました名前空間URI

XSD名前空間URIは、このタイプのすべてのドキュメントを一意的に表します。が指定されています。あなたがやっていることは、あなたの時間を節約するかもしれませんが、将来あなたを傷つけるかもしれません。すべてのスキーマに同じ名前空間を使用して

+3

なぜルート要素名を指定するのですか?私は名前空間とルート要素の組み合わせがドキュメントを一意に特定すると考えていたでしょう... 05 6月. 132013-06-05 18:39:26

+1

与えられた名前空間は、スキーマに基づいてXML文書を一意に識別するために作成されました。 05 6月. 132013-06-05 18:50:09

+3

私はTridionの性質(例えば組み込みスキーマ)は、スキーマの一部が他のスキーマの部分と意味的に同じになり、同じ名前空間の一部として表現される可能性が高いと考えています。 05 6月. 132013-06-05 19:12:38

  0

Nuno - Content Porterの問題に関する具体的な情報を得ることができましたか? 05 6月. 132013-06-05 21:43:56

  0

それはContent Porterではありませんでした。(それは翻訳マネージャーでした。式の翻訳マネージャー側でスキーマが利用できないため、名前空間で文書を区別できるようにする必要がありました。 05 6月. 132013-06-05 21:47:21

+1

Mr. Linharesから#111! ! 06 6月. 132013-06-06 00:11:32


12

TERRIBLEアイデアです。特にXML技術を使用してXMLから値を読み取った場合は特にそうです。

サンドイッチ・スキーマとレストラン・スキーマがあると仮定すると、両方のスキーマには「名前」というフィールドがあります。これらの結果のコンポーネントXMLを1つのドキュメントにマージする必要がある理由は何ですか?結合された文書内のすべてのノードは、同じ名前空間にあります。だから、次のXPathを使用すると、正しく名前空間を使用する場合は、特定のノード

<xsl:value-of select="//sandwich:Name"/> 

にアクセスするには、次のXPathクエリを使用することができサンドイッチの「名前」ノードとレストラン

<xsl:value-of select="//Name"/> 

にマッチします

<xsl:value-of select="//restaurant:Name"/> 

この例は、非常に単純な例です(そして、//を使用すると悪いことですが)。適用テンプレートなどの使用を開始すると、より重要になります。

+1

あなたのスキーマが異なるルート要素を持っている場合は、区別する必要のあるコンテキストを提供できますか?レストラン/名前、サンドウィッチ/名前 05 6月. 132013-06-05 18:38:32

  0

なぜそれはあまり単純化されたサンプルだと言いましたか?<xsl:template match = "Name"> ... 05 6月. 132013-06-05 19:00:12

+3

あなたは両方の世界の中で最高のものを持っています。両方を扱うテンプレートを作成する場合は、<xsl:template match = "Name">を使用して、 <xsl:template match = "レストラン/名前"> 05 6月. 132013-06-05 19:11:23

  0

出力側の同じ文書にサンドイッチとレストランを使用する必要がある場合は、出力XMLのためにデザインによって指定された名前空間に含める要素をormします。 Tridionコンポーネントの名前空間と同じ*にする必要はありません。 08 6月. 132013-06-08 08:22:38