2009-05-31 14 views
1

標準(X)HTML要素のみを子として使用できるように、XMLスキーマに要素を作成しようとしています。以下のXMLとして明示的に名前空間を指定していないもちろんHTML要素をその子要素として許可する要素をXMLスキーマでどのように作成しますか?

<xs:element name="description"> 
    <xs:complexType> 
     <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
      <xs:any namespace="http://www.w3.org/1999/xhtml" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

、これは動作しません、::

<description> 
    <p>this is a test</p> 
    <p>this is a <b>bold</b> test</p> 
    <h1>Those were the tests</h1> 
</description> 

は私が名前空間を指定する必要がありますか私はこれで試してみましたドキュメントのどこかに書かれていますか、あるいはスキーマ内で入手できますか?

答えて

1

section 5.5を参照してください。 xs:any/@processContentsのデフォルト値は厳密であることに注意してください。つまり、XHTML要素も検証され、XHTMLスキーマもスキーマからインポートする必要があります。 xs:any内でprocessContents = "lax"を使用して、これらの要素のスキーマがある場合にのみ検証が適用されるように指定することができます。

問題は、XHTML要素の名前空間を指定する必要がある場合です。あなたは一例

<p xmlns="http://www.w3.org/1999/xhtml">this is a test</p> 

またはあなたは、それが接頭辞にバインドされた宣言し、インスタンスのための時間と、あなたのXHTMLの要素を修飾するためにそのプレフィックスを使用することができるため、各要素のデフォルトの名前空間としてXHTML名前空間を宣言することができます。

<description xmlns:h="http://www.w3.org/1999/xhtml"> 
    <h:p>this is a test</h:p> 
    <h:p>this is a <b>bold</b> test</h:p> 
    <h:h1>Those were the tests</h:h1> 
</description> 

DTDはネームスペースを認識せず、ネームスペース宣言は単なる属性なので、エレメントに固定xmlns属性を宣言して、特定のネームスペースに自動的に入れることができます。 XMLスキーマは名前空間を認識しており、固定属性として名前空間宣言を使用することはできません。

2

私はあなたのように、コンテンツ処理を無効にする必要があると思う:

<xs:any namespace="http://www.w3.org/1999/xhtml" processContents="skip"/> 

はあなたのスキーマがOKに見えるXMLスキーマ仕様(特に例)

+0

する必要があると思います。 – Eric

+0

しかし、あなたはそれを無効にしなければなりません。なぜなら、それは有効ではないからです。 XMLでは、正しい名前空間の使用はオプションではありません。 –

+0

私は、スキーマがxmlドキュメントに名前空間が何であるかを伝えることができると考えていました。私が明示的に名前空間を述べるとすれば、どこでそれを行うのだろうか? – Eric

0

私はあなたが本当に私は「それを無視する」と言ってより良い方法があったことを期待していたview this page

関連する問題