6

Document DTD を使用して、次のことを行いました。

ファイル.xsl:

<!DOCTYPE xsl:stylesheet[
  <!ENTITY red "rgb(255,0,0)">
]>

<xsl:stylesheet>
   [...]
   <xsl:attribute name="color">&red;</xsl:attribute>
   [...]
</xsl:stylesheet>

すべてを XML スキーマに変更したかったのです。だから私は試しました:

ファイル.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="red" type="xs:token" fixed="rgb(255,0,0)" />
</xsd:schema>

ファイル.xsl:

<xsl:stylesheet
    xmlns:defs="http://www.w3.org/2001/XMLSchema-instance"
    defs:noNamespaceSchemaLocation="file.xsd">

    [...]
    <xsl:attribute name="color"><defs:red/></xsl:attribute>
    [...]
</xsl:stylesheet>

現在、Xalan red によるファイルの解析は、DTD バージョンのように翻訳されていません。私のエラーはどこですか?解析プロセス中にスキーマ ファイルが読み取られませんか?

4

2 に答える 2

6

要素定義のfixed属性は、パーサーにテキスト置換を行うように指示しません。これは単に、要素の値が常に同じでなければならないことを意味します。

<defs:red>実際、要素の値が " " ではないため、XSLT はスキーマに対して検証されない XML を生成していると思いますrgb(255,0,0)defaultの代わりに使用したとしてもfixed、これはテキストの置換ではありません。値が指定されていない場合、値が DOM インスタンスでクエリされると、値が " " に設定されていることがわかりますrgb(255,0,0)

于 2009-07-29T23:52:39.027 に答える
4

(DTD ではなく) スキーマを使用して構造規則を宣言しても、エンティティを使用できなくなるわけではありません。

エンティティ参照を使用して宣言されたコンテンツを置き換える方法は変わりません。

エンティティ参照は、DTD ファイル内だけで宣言する必要はありません。XML ファイルでインラインで宣言できます。

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY red "rgb(255,0,0)">
]>
<foo>
  <bar color="&red;" /> 
</foo>

http://www.ibm.com/developerworks/xml/library/x-tipentref.html

于 2009-07-30T02:06:14.367 に答える