2010-12-30 23 views
-1

XSDを使用して要素に名前空間を持たせるにはどうすればよいですか?この時点で、次のようなエラーメッセージが表示されます:"要素 'ns:person'で始まる無効なコンテンツが見つかりました。 '{" ":person}'のいずれかが必要です。"XSDスキーマ名前空間の問題

ご覧のとおり、には「人」のnameという属性が定義されています。私がnameとして "ns:person"を定義すると、名前が無効であるというエラーが表示されます。

私はここで何が欠けていますか?

これは、XSD(ns.xsd)です:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="peoples"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="person"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

これは、XML(peoples.xml)です:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<peoples xmlns:ns="url" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ns.xsd"> 
<ns:person> 
     <name>John</name> 
</ns:person> 
</peoples> 
+1

ここにはいくつかのエラーがあります。http://zvon.org/xxl/XMLSchemaTutorial/Output/series.htmlやhttp:// wwwなど、いくつかのチュートリアルの例を実行するのが最適かもしれません。 w3schools.com/schema/default.asp。 {エラーにはインスタンス内の名前空間宣言は含まれていません。スキーマの名前空間宣言なし、スキーマの要素 "名前"なし) –

+0

残念ですが、読みやすさのためにそれらを残しました...もちろん、それらは私のファイルにあります。バリデーターを実行すると、エラーが発生します。 – Ropstah

+0

@Ropstah:おそらく、質問を編集して欠落した項目を追加することができます。その省略は、実際には読みやすさを妨げるためです。 –

答えて

2

あなたはあなたを助けるために、完全なXSDを含める必要があります。しかし、私が見ているエラーと、XMLインスタンス文書に "xsi:noNamespaceSchemaLocation"を含めたという事実から、私はあなたのスキーマをで定義していますが、targetNamespaceは指定されていません。名前空間接頭辞。インスタンス・ドキュメントのすべての場所で "ns:"を削除するだけで、すべてが有効です。

+0

あなたは正しいと思います。しかし問題は、それらのns:インスタンスを削除することはできません(また、XSDの他のものを編集することもできません)。 「ワイルドカード」要素または正規表現によって修飾された要素を許可する方法はありますか? – Ropstah

+0

"ns:"を削除するXMLの前処理を恐れています。それをXMLパーサに与える前に唯一のオプションです。しかし、接頭辞として "ns"を持つxmlしか得られないのでしょうか?接頭辞の名前として何かを使用することができます。その場合、前もってどの接頭辞が使用されているかを知る必要があります。 –

+0

接頭辞「ns」が使用されていることを知っています。 XMLファイルには、xmlns:ns = "url"宣言もあります。 ns.xsdファイルに対応するXSD(URL用)の場所を指定する方法はありますか? – Ropstah

関連する問題