9

FictionBook (FB2 とも呼ばれます) は、XML ベースの形式の電子書籍です。そのスキーマは次の場所にあります。

http://gribuser.ru/xml/fictionbook/2.0/xsd/

ただし、このスキーマをダウンロードして Visual Studio 2012 で開こうとすると、一連のエラーが発生しました。最初のエラーは次のとおりでした:プレフィックス '' は、"xml" または "xmlns" 用に予約された名前空間名にマップできません。行 5、位置 118。 E:\dev\fb2\FictionBook2.xsd

スキーマは本当に無効ですか? もしそうなら、多くのソフトウェアがFB2ファイルを検証するためにそれを使用する可能性はありますか? VS を満足させるためにスキーマを変更する簡単な方法はありますか?

4

2 に答える 2

5

唯一の原因はFictionBookLang.xsdxmlns="http://www.w3.org/XML/1998/namespace"から削除することだけです。

ここに画像の説明を入力

セットの作成者は、おそらく xml:lang 属性を確実に利用できるようにしたいと考えていました。これは正しい方法ではありませんが、特定のシナリオでは機能する可能性があります。

通常、これは別の方法で行われます。XSD 対応の XML プロセッサが「スマート」である場合、そのようなインポートはそのように行う必要があります。

<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="FictionBookLang.xsd"/>

そのはず:

<xs:import namespace="http://www.w3.org/XML/1998/namespace"/>

これは、ダングリング外部参照と呼ばれます。「スマート」XSD ​​プロセッサは、場所をよく知られた名前空間に解決する方法を知っています (確かに、http://www.w3.org/XML/1998/namespaceはその 1 つです)。

これは、ダングリング インポートを使用した後のセットの外観です。xml.xsd はプロセッサによって自動的に追加されたもので、ここにリストされているもののコピーである必要があります。

ここに画像の説明を入力

つまり、通常、FictionBookLand.xsd はコンパイルの一部であってはなりません。特に、これらの XSD を xml:lang 属性を正しく参照する他の XSD と組み合わせると、属性宣言の重複エラーが発生します。

とにかく、説明どおりに属性だけを削除すると、すべてが有効になります。そこから、サンプル XML を作成できます。それ以外の場合は、XSD で問題ありません。私が生成したサンプルは巨大です。最初の数行だけを投稿しています...

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<FictionBook xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:genre="http://www.gribuser.ru/xml/fictionbook/2.0/genres" xmlns="http://www.gribuser.ru/xml/fictionbook/2.0">
    <stylesheet type="type1">stylesheet1</stylesheet>
    <description>
        <title-info>
            <genre match="100">architecture</genre>
            <author>
                <first-name xml:lang="en">first-name1</first-name>
                <middle-name xml:lang="en">middle-name1</middle-name>
                <last-name xml:lang="en">last-name1</last-name>
                <nickname xml:lang="en">nickname1</nickname>
                <home-page>home-page1</home-page>
                <home-page>home-page1</home-page>
                <email>email1</email>
                <email>email1</email>
            </author>
            <book-title xml:lang="en">book-title1</book-title>
            <annotation id="ID1" xml:lang="en">
于 2013-05-22T18:25:17.270 に答える