3

私はXMLスキーマをいじって、それを使用する単純で有効なドキュメントを作成しようとしています。

スキーマXSDはW3Cによって提供されているので、実際に何かが間違っているとは想像できません。しかしxmllint、コマンドラインと無料のオンラインバリデーターの数は、実際のXSD(私のテストドキュメントではない)について次のように不平を言います。

The QName value '{http://www.w3.org/XML/1998/namespace}id' does not resolve to a(n) attribute declaration.

id基本XMLのものであるタイプ/名前を解決できないことに注意してください。私はXMLマスターではないので、ここで名前空間/リンケージについて明らかな何かが欠けている可能性があります。些細なテストドキュメントでもXSDコンパイルビットで失敗するため、これは私のテストドキュメントでは問題になりません。

これがXSDファイルです。簡単なテストドキュメントは次のとおりです。

 <?xml version="1.0" encoding="UTF-8"?>
 <ink xmlns="http://www.w3.org/2003/InkML" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.w3.org/TR/2011/REC-InkML-20110920/inkml.xsd">
 </ink>

しかし、私がxmllint思うに、XML ID型がどういうわけか不安定であるため、XSDの解析/コンパイルフェーズを通過するためのオンラインバリデーターを取得することも、オンラインバリデーターを取得することもできません。

ここでXMLについての私の理解は間違っていますか?私はSO(vs別のサイト)に質問しています。これは、最終的には、ドキュメントを記述して検証するためのXML仕様と依存関係を理解することに関するものだからです。正しいことが何であれ、正しいことを行うコードスニペットを歓迎します。

考え?ありがとう。

4

1 に答える 1

4

あなたが指摘したスキーマには、よく知られているXMLスキーマへのインポートステートメントが含まれています。

<xsd:import namespace="http://www.w3.org/XML/1998/namespace" id="xml" />
<!-- schemaLocation="http://www.w3.org/2001/xml.xsd" -->

ご覧のとおり、以下の他の1つとは異なり...

<xsd:import namespace="http://www.w3.org/1998/Math/MathML" schemaLocation="inkml-mathml2-subset.xsd" id="mathml" />

前者はschemaLocation属性を提供しません。

URLを取得http://www.w3.org/2001/xml.xsdしてブラウザに貼り付けると、しばらくすると(または、そうでない場合は、これらのリンクが抑制されます)、xml.xsdが表示されます。プレーンXMLではなくHTMLが表示される場合は、ソースビューに切り替えて表示します。これは、.. / 2008/09/xsd.xslスタイルシートがブラウザによって自動的に適用されたことを意味します。

最初のインポートを変更してschemaLocation属性を含めると、ほとんどのバリデーターが機能するはずです。

このインポートは、よく知られているXSDと見なされるものに対して人々がW3Cサイトに何度もアクセスしないようにするための安全な手段として、「ぶら下がっている」ままになっている可能性があります。(少なくとも私が見たものから)期待されるのは、XSDプロセッサがこれらの種類のよく知られた名前空間参照をそれらのXSDのある種のローカル/埋め込みコピーに自動的に解決することです。明らかに、あなたが試したプロセッサはデフォルトではそれをしません。

QTAssistant(私はそれに関連付けられています)はそれを解決します。したがって、これら2つのXSDをローカルにダウンロードしてからそのままロードすると、それぞれが正常に検証されます。

XSDを変更したくない場合(たとえば、実際にリモートURLからXSDをロードする場合)、解決策は、xml.xsdの解決に役立つ何らかのカタログ情報をXSDプロセッサに提供することです。xmllintの場合は、--catalogsオプションを使用します。xml.xsdのローカルコピーを使用することをお勧めします。システムにすでにある可能性のあるカタログ(設定されている場合は$ SGML_CATALOG_FILES、それ以外の場合は/ etc / xml / catalog)に目を通します。おそらく、既存のカタログを使用できます。

于 2013-03-13T04:17:22.847 に答える