2009-04-11 12 views
19

XMLをDTDにバインドするために-declarationを使用するのと同じように、XSDでどのように行うのでしょうか?XMLをXSDにどのようにリンクさせますか?

MSDNのサンプル:トリックを行うのnoNamespaceSchemaLocation:

<?xml version="1.0"?> 
<Product ProductID="123" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="Product.xsd"> 
    <ProductName>Rugby jersey</ProductName> 
</Product> 

はXSIのですか?またはこれは別の名前空間ですか?

[EDIT] そして、ちょうど私たちのユニークなXML名前空間を与えるための

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

..lineがある、またはそれはまた、スキーマを配置できる場所についての情報を提供していますか?

答えて

17

try schemaLocation

<?xml version="1.0"?> 

<note 
xmlns="http://www.w3schools.com" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.w3schools.com note.xsd"> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

noNamespaceSchemaLocationが異なります。 XML文書のコンシューマにとっては、どちらも実際には理論上のヒントでしかないことに注意してください。私はそれらに従わなかったxmlプロセッサーに遭遇したことはありません。結局のところ、それはW3C勧告です。 は

http://www.w3.org/TR/xmlschema-1/を参照してくださいしかし、実際に、それはhereとして、間違って行くことができるが、その後、再び、それが理由でバグと考えられています。短い行くために

:私はちょうど今のところ

:-)私は半まともなXMLプロセッサは、これらの日、この「ヒント」を無視することができるとは思わない害と、それを信頼しています。

URLは常に一意ですが、場合によってはURLの下に情報が提供される場合もあります。

+0

インターネットへのアクセスがブロックされている環境で実行している場合、スキーマはロードされません。また、構文が間違っています。名前空間場所名前空間場所... –

+2

@Peterそれは確かにW3Cからではありません。 w3schools.comはW3Cとは関係ありません。 –

+0

@JohnそれはW3Schoolsの単なるコピーです – Peter

4

xsi:noNamespaceSchemaLocationとxsi:schemaLocationは、これらのヒントに従うことを決定したXMLプロセッサにヒントを提供します。しかし、彼らはヒントだけです。必ずしも文書がスキーマに対して妥当性を確認するとは限りません。

3

私は一般的に名前空間を含めて、処理している人がそれを検証することを心配すれば、スキーマを取得し、XSDを見つけることができるように処理環境を設定することを期待します。私はxsi:schemaLocationとそのような属性で限定的な成功を収めました。ほとんどの問題は、通常、XSDファイル自体を見つけることを中心に行われます。いくつかのプロセッサは、XSDがWebサーバーではなくファイルシステム上にある場合、そのパスが含まれることを楽しみにしています。

すべてのプロセッサは、ルックアップを少し違った方法で実装しているようです。別のスキーマカタログオブジェクトを使用するものもあれば、別々にスキーマをロードして接続するものもあります。ドキュメントを処理するコードを提供している場合を除き、xsi:schemaLocationまたはxsi:noNamespaceSchemaLocation IMHOを含まないようにすることをお勧めします。スキーマを同じ場所に配置するか、選択したプロセッサを場所の指定を無視したり回避したりする方法を見つけるために、ドキュメントを処理している人は誰でもハムストリングするだけです。

私が遭遇した最大の問題は、"c:\somepath\doc.dtd"を参照するSYSTEM宣言を使用して指定されたDTDで実際に実行されたことです。問題は、私がFreeBSDボックスでドキュメントを処理していることでした。私は自分自身のリゾルバを書いて、Windowsのスタイルのパスをローカルのファイルシステムにマップすることになりました。ドキュメント自体を変更することができず、それらを検証する必要があったからです。

3

これは愚かな質問ではなく、John Saunders has it rightです。

-declerationを使用してXMLをDTDにバインドするのと同じように、XSDでどうやって行うのですか?

ここでは、問題の本質があります。 DTDアプローチの問題の1つは、ドキュメントが検証メカニズムを指定し、ドキュメントコンシューマを指定していないことでした。 DTDの後では、XSDやRELAX NGなどのメカニズムを使用してXML文書を取得し、検証することができます(少なくとも理論的にはデカップリングされています)。 XSDリンクはヒントのみで、オプションです。 It is not possible to validate an arbitrary document

+0

@McDowell:どうもありがとうございました。 –

関連する問題