2

XML の DTD を理解した後、私はその概念が本当に好きで、次のようなことをしたいと考えています: 属性を宣言するかどうかを選択できるオプションが必要です。 ,z であり、宣言されていない場合は、値 m であると見なされます。私は次のことを試しました:

type (x|y|z) "m"

しかし、代わりに(ファイルを読み取るJavaを使用して)取得しました:

The enumerated type list must end with ')' in the "type" attribute declaration.

xml ファイル全体:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ATTLIST item
name ID #REQUIRED
type (type a|type b) "type a"
>]>

<root>
<item name="name1" type="type a" />
<item name="name2" />
</root>

2 番目の項目として型を指定しないと、エラーが発生します。xml で指定しなかった場合、デフォルト値は a 型であることを暗示したいと思います。また、別の (ビット) 無関係な問題は、ATTLIST ですべての属性を宣言する必要があることです。そうしないと、エラーが発生します。それをバイパスする方法はありますか?現在私がしていることは、#IMPLIED でそれらすべてを宣言することですが、おそらく正しい方法ではありません

4

1 に答える 1

3

デフォルト値は、列挙内のオプションの 1 つでなければなりません。mオプションとして追加するだけです:

type (x|y|z|m) "m"

詳細: http://www.w3.org/TR/xml11/#sec-attr-defaults


列挙は単一のNmtoken (名前トークン) でなければならないため、type aとでスペースを使用することはできませんtype btype_atype-atypeAなどを使用できます。

例:

<!DOCTYPE root [
<!ELEMENT root (item+)>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
    name ID #REQUIRED
    type (type_a|type_b) "type_a">
]>
<root>
    <item name="name1" type="type_a"/>
    <item name="name2"/>
</root>

また、XML を有効にするには、すべての属性を宣言する必要があります。それを回避する方法はないと思います。#IMPLIEDそれらを正しいと宣言します。

于 2013-11-12T16:41:12.043 に答える