2

スキーマをいじってから 3 年が経ちましたが、スキーマが名前空間の接頭辞などに非常にこだわっていたことを覚えています。また、Eclipse で XML エディターを使用する場合 (私は Indigo を使用しています)、展開しないと複雑な型を簡単に解析できないことも覚えています。

XML の専門家であるあなたは、私の XML ファイルを見て、先頭に追加された XSD XML スキーマの何が問題なのかを教えてくれませんか?

ありがとう。

チャオ

+++++

Eclipse は次のように不満を述べています。

ルート要素に続く文書内のマークアップは整形式でなければなりません。

XML を手動で作成し、そこから XML を自動生成したことを指摘しておく必要があります。

http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx

(複雑なタイプを分離する:3年前にAmazonのAmazonセラーセントラルXMLファイルを手動で手動で行ったように)

場合によっては ref を使用する必要があるように思えますが、専門家に委ねます。

+++++

<?xml version="1.0" encoding="utf-16"?>

<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="idioms" type="idiomsType" />
    <xsd:complexType name="idiomsType">
        <xsd:sequence>
            <xsd:element maxOccurs="unbounded" name="idiom" type="idiomType" />
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="idiomType">
        <xsd:sequence>
            <xsd:element name="phrase" type="xsd:string" />
            <xsd:element name="meaning" type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

<idioms>
    <idiom>
        <phrase>A bit much</phrase>
        <meaning>Excessive or annoying.</meaning>
    </idiom>
    <idiom>
        <phrase>A bridge too far</phrase>
        <meaning>Act of overreaching.</meaning>
    </idiom>
</idioms>

はい、更新します。XML にインラインで XSD を含める私の近道は違法です。だから私はそれをXSDファイルに戻しました。また、プレフィックスを xml で開始できないこともわかったので、プレフィックスを 'tc' に変更しました。

XSD は正しいものになりました (Amazon セラーセントラルの XSD を展開したのと同じスタイルで)。

<?xml version="1.0" encoding="utf-16"?>

<xsd:schema xmlns:tcidioms="urn:tcidioms" targetNamespace="urn:tcidioms" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <xsd:element name="idioms" type="tcidioms:idiomsType"/>
     <xsd:complexType name="idiomsType">
         <xsd:sequence>
             <xsd:element maxOccurs="unbounded" name="idiom" type="tcidioms:idiomType" />
         </xsd:sequence>
     </xsd:complexType>
     <xsd:complexType name="idiomType">
         <xsd:sequence>
             <xsd:element name="phrase" type="xsd:string" />
             <xsd:element name="meaning" type="xsd:string" />
         </xsd:sequence>
     </xsd:complexType>
</xsd:schema>

しかし、これを私の XML ファイルに含めようとすると、次のようになります (XML と XSD は同じディレクトリにあります)。

それは不平を言います:ドキュメントの文法制約(DTDまたはXMLスキーマ)が検出されませんでした。

XML ドキュメントの 2 行が正しくないということです。このファイルを含めるためにいくつかの亜種を試しましたが、どれも機能しませんでした。この XML (および XSD) は、http 経由ではなく、ローカル ファイル システムから読み取られることを覚えておいてください。この方法でまだ検証されますか?

<?xml version="1.0" encoding="utf-16"?>

<idioms xmlns:tcidioms="urn:tcidioms" targetNamespace="urn:tcidioms ./EnglishIdioms.xsd">
    <idiom>
        <phrase>A bit much</phrase>
       <meaning>Excessive or annoying.
       </meaning>
    </idiom>
    <idiom>
         <phrase>A bridge too far</phrase>
   <meaning>Act of overreaching, going too far
        and getting into trouble
        or
        failing.
   </meaning>
    </idiom>
</idioms>

Visual Studio 2010 (Russian Doll Style スキーマを作成):

XML ファイルは、VS2010 インターフェイスでスキーマを使用するように設定されていますが、コードでそれを示していませんか?

<?xml version="1.0" encoding="utf-8"?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="idioms">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="idiom">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="phrase" type="xs:string" />
                            <xs:element name="meaning" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

<?xml version="1.0" encoding="utf-8"?>

<idioms>
    <idiom>
        <phrase>A bit much</phrase>
        <meaning>Excessive or annoying.</meaning>
    </idiom>
    <idiom>
        <phrase>A bridge too far</phrase>
        <meaning>Act of overreaching.</meaning>
    </idiom>
    <idiom>
        <phrase>A chain is no stronger than its weakest link</phrase>
        <meaning>The weakest part of an object is it's strength.</meaning>
    </idiom>
</idioms>
4

3 に答える 3

3

ルート要素が適切に閉じられていません。

:)</idioms>ではなく、使用します<idioms>

アップデート:

名前空間の欠如が問題になる可能性があります (スキーマと xml の両方で)。

于 2012-04-09T06:38:49.987 に答える
1

XSD仕様から:

最上位の宣言によって検証された要素情報項目は、その宣言の {ターゲット名前空間} で修飾する必要があります (これがない場合、項目は修飾されていない必要があります)。

翻訳:

修飾された属性セットを使用したい場合elementFormDefault(意図的にそれを選択したのですか?)、targetNamespace要素を宣言して何らかの URI に設定し、その名前空間でも宣言されている XML を指定する必要があります。だから、次のようなもの

<xsd:schema targetNamespace="urn:so:example" attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
</xsd:schema>

そして、xml でその名前空間を使用します。

<idioms xmlns="urn:so:example">
  <idiom>
    <phrase>A bit much</phrase>
    <meaning>Excessive or annoying.</meaning>
  </idiom>
  <idiom>
    <phrase>A bridge too far</phrase>
    <meaning>Act of overreaching.</meaning>
  </idiom>
</idioms>

elementFormDefaultまたは、スキームタグから属性を完全に削除しても問題ないと思います。デフォルト値は非修飾です。

于 2012-04-09T17:58:31.503 に答える
0

VS2010 を使用して、XML から XML スキーマを生成しました。これを行う際に、(プライベート) 名前空間を無視しているように見えますが、UI でスキーマを、生成したばかりの XML スキーマの名前に設定しました。

また、XML 自体には、この XML スキーマを使用または含むことは示されません。

これは、XML ファイルと XSD ファイルの両方が同じベース名 (EnglishIdioms.) を持ち、これらのファイルが両方とも同じディレクトリにあるためでしょうか?

于 2012-04-10T21:50:50.193 に答える