Oracle Service Busでは、ファイル・システムからService Bus構成を直接エクスポートして構成.jarファイルを作成するエクスポート・ツールが提供されます。この付録では、Service Bus構成のオフライン・エクスポートを実行する方法について説明します。
この付録の内容は次のとおりです。
Eclipseを使用したリソースのエクスポートの詳細は、2.1.11項「リソースのエクスポート」を参照してください。
Service Bus構成をオフライン・モードでエクスポートするには、コマンドライン、AntタスクまたはWebLogic Scripting Tool (WLST)を使用します。いずれの方法でも、エクスポートの実行方法と生成される構成.jar
ファイルに含めるファイル、フォルダ、プロジェクトまたはシステム・リソースを定義するために、エクスポート設定ファイルが使用されます。バージョニング・システムを使用してOracle Service Busアーティファクトを格納する場合は、このプロセスを使用して、バージョニング・システムに格納されているソース・ファイルから、デプロイ可能な構成.jar
ファイルを作成できます。
エクスポート・ツールは、ロード・フェーズとエクスポート・フェーズの2つのフェーズで実行されます。各フェーズは、エクスポート設定ファイルで構成されます。ロード・フェーズでは、エクスポート・ツールによって、ファイル・システムの走査、読み込むファイルの識別、対応するリソースへのファイル・コンテンツの変換および構成フレームワークへのファイルのインポートが行われます。エクスポート・フェーズでは、エクスポート・ツールによって、ロードされたリソースおよびプロジェクトが1つ以上の構成.jar
ファイルにパッケージ化され、他のService Bus環境にインポートできるようになります。
ロード・フェーズでは、次を構成できます。
ディレクトリ構造: Eclipseワークスペース・ディレクトリ構造に依存せずに、プロジェクト・ルート・ディレクトリ、システム・リソースを配置するディレクトリおよび含める特定のフォルダおよびファイルを指定できます。これによって、ディレクトリ構造でプロジェクト・ディレクトリが兄弟にならないMavenなどの外部のバージョニング・システムに対して、かわりのディレクトリ構造がサポートされます。
ファイル拡張子: Service Busでは、リソース・タイプにそれぞれ固有のファイル拡張子(プロキシ・サービスには.proxy
、XSLTリソースには.xsl
および.xslt
、など)が使用されます。拡張子はそれぞれ1つのService Busリソース・タイプにのみマップできますが、リソース・タイプは複数のファイル拡張子にマップできます。Eclipseでは、各リソースに、変更できないデフォルトの拡張子が1つ含まれますが、リソースに対してカスタムのファイル拡張子を指定することもできます。エクスポート・ツールでカスタム拡張子を含むファイルが認識されるようにするには、エクスポート設定ファイルにファイル拡張子のマッピングを定義する必要があります。
包含ルールおよび除外ルール: プロジェクトまたはシステム・リソース・フォルダを指定すると、エクスポートにすべてのService Busファイルが含まれます。包含文および除外文を使用すると、いずれのファイルを含めるかについて詳細に制御することができます。たとえば、Eclipseおよび特定のバージョニング・システムでは、プロジェクト・フォルダ内に追加のシステム・フォルダおよびファイルが作成されます。これらのファイルはService Busリソースとして認識される可能性があり、エクスポートから特に除外しないかぎり、エクスポートされるJARファイルに含まれます。
エクスポート・フェーズは、エクスポート設定ファイルを使用して構成されます。Service Bus構成はプロジェクト・レベルまたはリソース・レベルでエクスポートでき、構成の複数のエクスポートを1つのエクスポート設定ファイルに定義できます。エクスポート・フェーズでは、次を構成できます。
プロジェクト・レベルのエクスポート: プロジェクト・レベルでは、含めるプロジェクトの名前およびシステム・リソースを含めるかどうかを指定します。プロジェクト名を指定しなかった場合は、生成されるエクスポート・ファイルに、ロード・フェーズで追加したすべてのプロジェクトが含まれます。
注意: 含めるファイルをロード・フェーズで詳しく定義した場合は、プロジェクト・レベルでエクスポートしないでください。これを行うと、含めなかったすべてのリソースが、生成された構成 |
リソース・レベルのエクスポート: リソース・レベルでは、前述のように包含ルールおよび除外ルールを使用して、エクスポートするリソースを指定します。依存性を含めるかどうかを指定することもできます。エクスポート設定ファイルにリソースを指定しなかった場合は、すべてのリソースがエクスポートされます。
複数の構成JARファイル: エクスポート設定ファイルに複数の構成.jar
ファイルを定義して、各ファイルを個別に構成できます。同じ名前を持つ既存のファイルを上書きするかどうかを指定することもできます。
エクスポート設定ファイルの構成の詳細は、B.4項「エクスポート設定ファイルの形式、サンプルおよびスキーマ」を参照してください。
Service Busリソース・タイプにカスタムのファイル拡張子をマップすると、エクスポート・ツールでこれらの拡張子が正当なService Busファイルとして認識されます。Service Busのデフォルトのファイル拡張子を次に示します。その他のファイル拡張子を使用する場合は、使用する拡張子をエクスポート設定ファイルにマップする必要があります。リソース・タイプにファイル拡張子をマップする例については、B.4.4項「ファイル拡張子のマッピング」を参照してください。
表B-1 Oracle Service Busリソースのデフォルトのファイル拡張子
リソース・タイプ | リソース・タイプID | ファイル拡張子 |
---|---|---|
アラート宛先 |
AlertDestination |
.alert |
ビジネス・サービス |
BusinessService |
.biz |
JARファイル |
Archive |
.jar |
JCAアダプタ |
JCA |
.jca |
JNDIプロバイダ |
ForeignJNDIProvider |
.jndi |
メッセージ・フロー |
FLOW |
.flow |
MFL変換 |
MFL |
.mfl |
MQ接続 |
MQConnection |
.mqc |
プロキシ・サーバー |
ProxyServer |
.ps |
プロキシ・サービス |
ProxyService |
.proxy |
サービス・アカウント |
ServiceAccount |
.sa |
サービス・キー・プロバイダ |
ServiceProvider |
.skp |
SMTPサーバー |
SMTPServer |
.smtp |
分割-結合 |
FLOW |
.flow |
UDDIレジストリ |
UDDIRegistry |
.uddi |
WS-Policy |
Policy |
.policy |
WSDLドキュメント |
WSDL |
.wsdl |
XMLファイル |
XML |
.xml |
XMLスキーマ |
XMLSchema |
.xsd |
XQueryトランスフォーメーション |
Xquery |
.xquery |
XSLTトランスフォーメーション |
XSLT |
.xslt, .xsl |
Service Bus構成をオフライン・モードでエクスポートする前に、次の手順を実行します。
リソースのエクスポートを始める前に、次の条件を満たしていることを確認します。
Oracle Service Bus 11.1.1.7.0以上がインストールされている(Eclipseは不要)。
適切なバージョンのJavaがインストールされている。これは、Oracle JDK 1.6.0_35以上またはOracle JDK 1.7.0_07以上である必要があります。
エクスポート・ツールを実行するディレクトリに対する書込み権限が割り当てられている。このツールは、OSB_HOME
/tools/configjar
にあります。
構成をエクスポートした際に終了値で0が表示された場合は、エクスポートが完了したことを意味します。
注意: カスタム・トランスポートを開発した場合は、オフラインでトランスポートのプラグイン・ファイルを作成し、そのファイルをService Busインストールの |
オフライン・エクスポートの実行時に、コマンドライン引数を使用するかわりに、エクスポート・ツールによって、作成した設定ファイルが参照されます。このファイルはXMLフォーマットであり、エクスポート・ツールがファイルの検出およびロードを行って構成JARファイルを作成するために必要なすべての情報を含みます。ファイル形式とスキーマ定義の詳細および使用例は、B.4項「エクスポート設定ファイルの形式、サンプルおよびスキーマ」を参照してください。
エクスポートを実行する前に、setenv.*
ファイルを実行して、ツールで使用する環境変数を設定する必要があります。このファイルは、実行する前に、JVMのヒープ・サイズの変更、CLASSPATHへのJARファイルの追加、またはシステム・プロパティの追加を行ってカスタマイズできます。エクスポートに含まれ、カスタムJARファイルが必要なJARリソースがある場合は、setenv.*
ファイルのCLASSPATHセクションに、それらのカスタムJARファイルのパスおよびファイル名を次のように追加します。
Windowsの場合:
CLASSPATH=%CLASSPATH%;%CONFIGJAR_HOME%\custom\my_custom.jar
UNIXまたはLinuxの場合:
CLASSPATH=$CLASSPATH$CLASSPATHSEP$CONFIGJAR_HOME/custom/my_custom.jar
ファイルをカスタマイズしたら、OSB_HOME
/tools/configjar
に移動して、次のコマンドを実行します。
Windowsの場合:
setenv.bat
UNIXまたはLinuxの場合:
source setenv.sh
次の項では、Oracle Service Bus構成をオフラインでエクスポートするためのスクリプトおよびコマンドライン・オプションについて説明します。詳細は、OSB_HOME
/tools/configjar
にあるREADMEファイルを参照してください。
コマンドラインからのエクスポートによって、エクスポート設定ファイルで指定したフォルダおよびファイルからOracle Service Bus構成JARが生成されます。コマンドライン・ファイルconfigjar.bat
およびconfigjar.sh
は、OSB_HOME
/tools/configjar
にあります。
構文
Windowsの場合は、次の構文を使用します。
configjar.bat -settingsfile <FILE_NAME> [-debug] [-help]
UNIXまたはLinuxの場合は、次の構文を使用します。
./configjar.sh -settingsfile <FILE_NAME> [-debug] [-help]
パラメータ
コマンドラインでは、次のパラメータを使用できます。
-settingsfile
FILE_NAME
: エクスポート設定ファイルのパスおよびファイル名を入力します。このパラメータは必須です。
-debug
: エクスポート・プロセスのデバッグ・ロギングを有効にするには、コマンドにこのオプション・パラメータを含めます。このフラグを含めないと、デバッグ・ロギングは実行されません。
-help
: 使用方法を表示するには、コマンドにこのオプション・パラメータを含めます。
Apache Antビルド・ファイルを使用してOracle Service Bus構成をオフライン・モードでエクスポートできます。Service Busには、configjar-ant.xml
というサンプルのAntビルド・ファイルがOSB_HOME
/tools/configjar
に含まれています。このファイルを使用することも、独自のファイルを作成することもできます。Antを使用したエクスポートによって、エクスポート設定ファイルで指定したフォルダおよびファイルからOracle Service Bus構成JARが生成されます。
構文
サンプルのAntビルド・ファイルでは、次の構文がサポートされます。
ant -f <FILE_NAME> [-debug] [-failonerror] [-errorproperty]
サンプルのビルド・ファイル
次にサンプルのAntビルド・ファイルを示します。
<project name="ConfigExport" default="usage" basedir="."> <property environment="env" /> <property name="mw.home" location="${env.MW_HOME}" /> <property name="wl.home" location="${env.WL_HOME}" /> <property name="osb.home" location="${env.OSB_HOME}" /> <taskdef name="configjar" classname="com.bea.alsb.tools.configjar.ant.ConfigJarTask" /> <target name="init"> <property name="task.debug" value="false" /> <property name="task.failonerror" value="true" /> <property name="task.errorproperty" value="" /> </target> <target name="run" depends="init"> <fail unless="settingsFile"/> <configjar debug="${task.debug}" failonerror="${task.failonerror}" errorProperty="${task.errorproperty}" settingsFile="${settingsFile}" /> </target> </project>
パラメータ
Antビルド・ファイルでは、次のパラメータがサポートされます。
settingsFile
: エクスポート設定ファイルのパスおよびファイル名。このパラメータは必須です。
debug
: エクスポート・プロセスのデバッグ・ロギングを有効にするには、このパラメータをtrueに、そうでない場合はfalseに設定します。このパラメータは省略可能で、デフォルトでfalseに設定されます。
failonerror
: エクスポート・ツールが失敗した場合にタスクを失敗させるには、このパラメータをtrueに設定します。これをfalseに設定すると、エクスポート・ツールが失敗した際にタスクは失敗しませんが、結果はerrorProperty
パラメータで指定されたプロパティに設定されます。failonerror
パラメータは省略可能で、デフォルトでtrueに設定されます。
errorProperty
: failonerror
プロパティがfalseに設定されている場合に、失敗したタスクの結果を受信するプロパティの名前。errorProperty
パラメータは省略可能で、デフォルトで指定されません。
WebLogic Scripting Tool (WLST)を使用してOracle Service Bus構成をオフライン・モードでエクスポートできます。WLSTが適切に構成されていることを確認するには、Service Busで提供されているWLSTコマンドライン・ファイル(wlst.bat
またはwlst.sh
)を使用します。これらのファイルは、OSB_HOME
/tools/configjar
にあります。
WLSTを使用したエクスポートによって、エクスポート設定ファイルで指定したフォルダおよびファイルからOracle Service Bus構成JARが生成されます。
構文
Windowsの場合は、次の構文を使用します。
wlst.bat <SCRIPTNAME>
UNIXまたはLinuxの場合は、次の構文を使用します。
./wlst.sh <SCRIPTNAME>
サンプルのWLSTスクリプト
次にサンプルのWLSTスクリプトを示します。
from com.bea.alsb.tools.configjar import ConfigJar args = [] args.append('-settingsfile') args.append('/osb/config/mySettings.xml') ConfigJar.main(args)
詳細は、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool』を参照してください。
パラメータ
WLSTスクリプトでは、次のパラメータを使用できます。
-settingsfile
FILE_NAME
: エクスポート設定ファイルのパスおよびファイル名を入力します。相対パスを使用した場合、パスはエクスポート・ツールが存在するディレクトリ(OSB_HOME
/tools/configjar
)に解決されます。このパラメータは必須です。
-debug
: エクスポート・プロセスのデバッグ・ロギングを有効にするには、コマンドにこのオプション・パラメータを含めます。このフラグを含めないと、デバッグ・ロギングは実行されません。
-help
: 使用方法を表示するには、コマンドにこのオプション・パラメータを含めます。
エクスポート設定を構成することで、エクスポートされる構成JARに含めるファイルおよびフォルダを指定できます。これは、プロジェクト・レベルおよびリソース・レベルで行うことができ、一連の除外ルールおよび包含ルールを使用することでより詳細なレベルで制御できます。含めたファイルおよびフォルダによって、エクスポート用のコンテンツ・セットが構成されます。
次の項では、エクスポート設定ファイルについて説明し、サンプルおよびスキーマ定義を示します。
エクスポート設定ファイルには、source
およびconfigjar
の2つの主なセクションがあります。source
要素は、エクスポート・ツールのロード・フェーズで選択されるファイルを定義します。configjar
要素は、ロード・フェーズで選択されたファイルのうちいずれのファイルを、エクスポート・フェーズで、生成される構成JARファイルに含めるかを定義します。
source
要素では、エクスポートするプロジェクトのプロジェクト・ルート・ディレクトリ、エクスポートするシステム・リソースの場所および包含または除外する具体的なファイルを指定できます。また、Service Busリソース・タイプにカスタムのファイル拡張子をマップすると、エクスポート・ツールでこれらの拡張子が有効なService Bus構成要素として認識されます。リソース・タイプおよびファイル拡張子の詳細は、B.1.3項「Oracle Service Busリソースのファイル拡張子およびタイプID」を参照してください。
注意: プロジェクト・ルートまたはリソース・フォルダに相対ディレクトリを指定すると、そのパスはエクスポート設定ファイルがあるディレクトリに対して相対的に解決されます。 |
configjar
要素では、生成されるJARファイルに名前を付け、プロジェクト・レベルおよびリソース・レベルで(プロジェクト・レベルにシステム・リソースを含めるか、リソース・レベルに依存性を含めるかなどの)ルールを指定します。複数のconfigjar
要素を定義でき、定義したconfigjar
要素ごとにJARファイルが生成されます。
構成JARファイルの命名ガイダンスおよび制限事項は、2.1.1項「リソースの命名制限」を参照してください。
Eclipseに適用される命名の検証ルールと同じルールが、コンテンツ・セットに含まれるファイルにも適用されます。これらのルールに準拠しないファイルおよびフォルダはすべて、コンテンツ・セットから除外されます。
フォルダおよびファイルは有効な名前にする必要があります。詳細は、2.1.1項「リソースの命名制限」を参照してください。
ファイルでは、拡張子はService Busリソースにマップする必要があります。
各リソース・タイプIDは、それぞれ異なるファイル拡張子にマップする必要があります。タイプIDおよびファイル拡張子の詳細は、表B-1を参照してください。
プロジェクトの検証自体が失敗した場合も、プロジェクトは正常にエクスポートされます。
包含ルールおよび除外ルールを使用する場合、ファイルは1つ以上の包含ルールに一致するとともに、コンテンツ・セットに含まれるいずれの除外ルールにも一致しない必要があります。ファイルを除外するには、そのファイルが1つ以上の除外ルールに一致するとともに、いずれの包含ルールにも一致しない必要があります。包含ルールおよび除外ルールが定義されていない場合は、自動的にすべてのファイルが含まれます。
包含ルールおよび除外ルールは、同じパターンに基づいています。
パターンは、プロジェクト名で始まるファイルのサブパスに適用されます。完全なファイル・パスには適用されません。
アスタリスク(*)は、任意の文字を表すワイルドカードです。これは、ファイル名またはディレクトリ名の一部として使用できます。
2つのアスタリスク(**)のみが使用されている場合、それは0または複数のディレクトリおよびファイルを表します。
この項では、Service Bus構成のエクスポート方法を示すエクスポート設定ファイルのサンプルを、ロード・フェーズおよびエクスポート・フェーズのルールを様々に組み合せて示します。サンプルでは、次のシナリオについて説明します。
例B-1 Eclipse以外のファイル構造からのエクスポート
次のサンプルは、Mavenなどの構造からプロジェクトおよびその関連システム・リソースをパッケージ化する方法を示しています。プロジェクトの場所はproject
要素で、システム・リソースの場所はsystem
要素で指定されています。このサンプルでは、2つの構成JARファイルが出力されます。最初のsbconfig-po.jar
は、システム・リソースを含まないプロジェクト・レベルの構成です。2つ目のsbconfig-po-system.jar
は、JNDIおよびSMTPリソースを含むリソース・レベルの構成です。
<configjarSettings xmlns="http://www.bea.com/alsb/tools/configjar/config"> <source> <project dir="/scratch/modulePO/src/main/resources/PO"/> <system dir="/scratch/modulePO/src/main/system"/> </source> <configjar jar="/scratch/modulePO/sbconfig-po.jar"> <projectLevel includeSystem="false"/> </configjar> <configjar jar="/scratch/modulePO/sbconfig-po-system.jar"> <resourceLevel> <resources> <include name="**/*.jndi"/> <include name="**/*.smtp"/> </resources> </resourceLevel> </configjar> </configjarSettings>
例B-2 プロジェクト・レベルでのエクスポート
次のサンプルは、様々な場所のシステム・リソースをパッケージ化してプロジェクトによってエクスポートする方法を示しています。構成をインポートする際に、不要なリソースを削除できます。
<configjarSettings xmlns="http://www.bea.com/alsb/tools/configjar/config"> <source> <system dir="/scratch/moduleX/src/main/system"/> <system dir="/scratch/moduleY/src/main/system"/> <system dir="/scratch/moduleZ/src/main/system"/> </source> <configjar jar="/scratch/sbconfig-systems.jar"> <projectLevel includeSystem="true"/> </configjar> </configjarSettings>
例B-3 ロード・フェーズでのファイル拡張子の除外
このサンプルは、source
要素に除外ルールを定義することで、サービス・リソース以外のすべてのリソースを構成JARファイルにパッケージ化する方法を示しています。これを例B-4「エクスポート・フェーズでのファイル拡張子の除外」と比較します。パフォーマンス上の理由から、ロード・フェーズ中にファイルを除外することが推奨されます。
<configjarSettings xmlns="http://www.bea.com/alsb/tools/configjar/config"> <source> <project dir="/scratch/workspaces/myworkspace/projectX"/> <project dir="/scratch/workspaces/myworkspace/projectY"/> <fileset> <exclude name="**/*.proxy"/> <exclude name="**/*.biz"/> <exclude name="**/*.flow"/> </fileset> </source> <configjar jar="/scratch/workspaces/myworkspace/sbconfig-resources.jar"> <resourceLevel/> </configjar> </configjarSettings>
例B-4 エクスポート・フェーズでのファイル拡張子の除外
次のサンプルは、configjar
要素に除外ルールを定義することで、サービス・リソース以外のすべてのリソースを構成JARファイルにパッケージ化する方法を示しています。
<configjarSettings xmlns="http://www.bea.com/alsb/tools/configjar/config"> <source> <project dir="/scratch/workspaces/myworkspace/projectX"/> <project dir="/scratch/workspaces/myworkspace/projectY"/> </source> <configjar jar="/scratch/workspaces/myworkspace/sbconfig-resources.jar"> <resourceLevel> <fileset> <exclude name="**/*.proxy"/> <exclude name="**/*.biz"/> <exclude name="**/*.flow"/> </fileset> </resourceLevel> </configjar> </configjarSettings>
例B-5 ファイル拡張子のマッピング
次の例は、追加のファイル拡張子を特定のService Busリソース・タイプ(ここでは、XQueryおよびXMLタイプ)にマップする方法を示しています。
<configjarSettings xmlns="http://www.bea.com/alsb/tools/configjar/config"> <source> <project dir="/scratch/workspaces/myworkspace/projectX"/> <project dir="/scratch/workspaces/myworkspace/projectY"/> <extensionMapping> <mapping type="Xquery" extensions="xquery,xq,xqy"/> <mapping type="XML" extensions="toplink"/> </extensionMapping> </source> <configjar jar="/scratch/workspaces/myworkspace/sbconfig.jar"> <resourceLevel/> </configjar> </configjarSettings>
注意: ファイル拡張子をマップする際に、タイプ属性がB.1.3項「Oracle Service Busリソースのデフォルトのファイル拡張子」に定義されているService Busリソース・タイプに一致している必要があります。 |
次に、エクスポート設定XMLファイルのスキーマ定義を示します。読みやすくするために、テキストの一部がラップされています。
<?xml version="1.0"?> <xs:schema targetNamespace="http://www.bea.com/alsb/tools/configjar/config" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.bea.com/alsb/tools/configjar/config"> <xs:element name="configjarSettings" type="tns:configjarSettings"/> <xs:complexType name="configjarSettings"> <xs:sequence> <xs:element name="source" type="tns:source" /> <xs:element name="configjar" type="tns:configjar" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="source"> <xs:sequence> <xs:choice minOccurs="1" maxOccurs="unbounded"> <xs:element name="project"> <xs:complexType> <xs:attribute name="dir" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:element name="system"> <xs:complexType> <xs:attribute name="dir" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:choice> <xs:element name="extensionMapping" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="mapping" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="type" type="xs:string" use="required"/> <xs:attribute name="extensions" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="fileset" type="tns:contentSet" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="configjar"> <xs:sequence> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element name="projectLevel" type="tns:projectLevel"/> <xs:element name="resourceLevel" type="tns:resourceLevel"/> </xs:choice> </xs:sequence> <xs:attribute name="jar" type="xs:string" use="required"/> <xs:attribute name="overwrite" type="xs:boolean" use="optional" default="true"/> </xs:complexType> <xs:complexType name="projectLevel"> <xs:sequence> <xs:element name="project" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="includeSystem" type="xs:boolean" use="optional" default="false"/> </xs:complexType> <xs:complexType name="resourceLevel"> <xs:sequence> <xs:element name="resources" type="tns:contentSet" minOccurs="0"/> </xs:sequence> <xs:attribute name="includeDependencies" type="xs:boolean" use="optional" default="true"/> </xs:complexType> <xs:complexType name="contentSet"> <xs:sequence> <xs:element name="include" type="tns:contentSetPattern" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="exclude" type="tns:contentSetPattern" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="contentSetPattern"> <xs:attribute name="name" type="xs:string" use="required"/> </xs:complexType> </xs:schema>