いいえ、必要な制約は XSD では表現できません。
XSD は XML 情報セット (通常は XML パーサーによって生成されたもの) で動作し、その入力を構成する情報項目は、XML ドキュメントの元のエンティティ構造に関する情報を保持しません。
(あなたのように) XML 入力でのエンティティ参照を禁止したい人は、通常、その趣旨のアドホック ルールによって、または情報の存在を反映するように情報セットを禁止するルールによって情報セット レベルで操作している場合に行います。文書型宣言。
【後日追記】 その最後のビットは消化するのが難しいようです. XML 文字ストリームのレベルではなく、XML 情報セットのレベルで操作と制約を定義する仕様 (SOAP 仕様など) を検討してください。つまり、山かっこについてではなく、要素と属性について話したいのです。同時に、エンティティ参照を禁止したいと考えています。このような仕様では、XSD (または DTD、Relax NG、または Schematron など) で記述された制約を使用してエンティティ参照を禁止することはできません。しかし、どの仕様も、適合するプロセスへの入力として受け入れられる情報セットのセットを制約することができます. bar と baz 属性を持っています。準拠するプロセッサがサポートすることが期待される入力情報セットのセットを定義しています。) したがって、仕様は、SOAP のように情報セット レベルで定義する必要があり、SOAP のようにエンティティ参照を禁止することも必要とします。少なくとも、私の経験では)「文書情報項目には、その子の中に文書型宣言情報項目が含まれていてはなりません。」実体参照を禁止することと、それが私を含む一部の人を悪い考えだと思う理由. [追加終了]
lt
整形式の XML ドキュメント内のすべてのエンティティ参照は、ドキュメント タイプ定義で宣言されたエンティティを参照するため、ドキュメント タイプ宣言が存在しないと、事前定義されたエンティティ ( 、gt
、apos
、および)以外のすべてのエンティティがquot
不可能になります。
あなたの技術的な質問は今答えられましたが、あなたの目標が賢明でないものであると私が想像できるあらゆる尺度で指摘しなければ、私は気が進まないでしょう.
あなたや他の人 (SOAP の発明者など) が XML 文書の作成者に XML を指定されたとおりに使用することを許可すれば、世界はより良い場所になるでしょう (ここに書かれています)。 君はあなたが責任を負っていないシステムを管理している誰かがそのような必要性を見るかもしれない場合、エンティティ参照の必要性を理解しないかもしれません。彼らのシステムとワークフローを彼らよりもよく知っていると本当に思いますか? 指定され実装されたままの XML を使用するのではなく、XML のアドホックなサブセットを定義することによって、自分自身や他の人のために機能させるのはなぜでしょうか? これに対する通常の反応は、10 億回の笑い攻撃への恐怖です。リソース攻撃は、XML パーサーでエンティティ置換テキストの最大長に制限を課すか、オペレーティング システムによって課されるリソース制限のあるプロセスで XML パーサー (および信頼されていない入力を処理するその他のプロセス) を実行することによって、より適切に処理されます。