私はXMLが初めてです。同じ XSD を参照している 2 つの XML があります。では、両方の XML の構造が常に同じであると仮定できますか?
2 に答える
「同じ構造」の意味によって異なります。
Java で書かれた 2 つのプログラムがあるとします。
- 1 つのプログラムは、"Hello world!" を出力するだけです。画面上。
- 別のプログラムは、複雑なフラクタル画像 (マンデルブロー集合など) を描画します。
それらのプログラムは同じ構造を持っていますか? もちろんそうです!どちらも Java で書かれているためです。同じ Java コンパイラ/Java マシンでそれらを実行できます (ハードウェアや OS に関係なく)。しかし、ここで類似性は終わります。結局のところ、これらは非常に異なるプログラムです。
同じことが XML スキーマにも当てはまります。
各 XML スキーマは、有効なさらに別のマークアップ言語を定義します。これは、XML の拡張 ( XML ボキャブラリとも呼ばれます) です。これには、特定の要素と属性、およびその言語で許可されているそれらの間のさまざまな関係が含まれます。
XMLはeXtensible Markup Languageの頭字語であることに注意してください。そのため、XML スキーマは実際に「XML」という言葉が意味することを実行します。
XSD (XML スキーマ定義言語) 自体がその種の言語であり、XML の特別な拡張です。XSLT は別の例です。
では、同じ XML スキーマに準拠する 2 つの XML は同じ構造を持っているのでしょうか? はい、彼らがやります!それらは同じ XML ボキャブラリで記述されています (2 つの Java プログラムのように)。つまり、その特定の XML ボキャブラリで動作し、それについて何か特別なことを行うソフトウェアがある場合、そのソフトウェアは両方の XML を同等に処理できます (実際に何が含まれていても)。同じ XML スキーマに準拠することで、これが保証されます。
しかし、類似点はこれで終わりです。2 つの Java プログラムの間と同じで、原子と銀河ほど異なる可能性があります。
それはXSDに依存します。XSD が非常に緩いため、2 つの XML ファイルが互いに認識できない可能性があります。例えば:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema>
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
これで、XML には技術的に何でも含めることができ、スキーマに対して有効であることができます。
ただし、一般に、パーサーが特定の XSD に準拠するように正しく記述されており、XSD に対してドキュメントを検証できる場合、パーサーは技術的にその XML ドキュメントで動作しますが、すべての場合にその仮定を行うことはできません。