DTD を作成しようとしていて、ONE、TWO、または THREE のいずれかの要素 BOOKTYPE を定義したいと考えています。これらの値の 1 つだけを要素内に入力できるようにする方法はありますか?
注: 1. 属性でこれを行う方法は知っていますが、要素で行う方法はわかりません。2. プログラミング言語を使用するのではなく、DTD 内でこれを行う方法が必要です。
DTD にはありません。申し訳ありません。子として表示できる要素と、テキスト コンテンツ (#PCDATA) を表示できるかどうかのみを指定できます。テキストの内容が何であるかについて発言権はありません。
データを属性に移動するか、古くて不格好な DTD よりも強力なスキーマ言語を使用する必要があります。
これらの値の 1 つだけを要素内に入力できるようにする方法はありますか?
はい、 XML Enumerationを含む XML スキーマ定義 (XSD) を使用します。通貨の例を次に示します。
<xsd:simpleType name = "iso3currency">
<xsd:restriction base = "xsd:string">
<xsd:enumeration value = "AUD"/><!-- Australian Dollar -->
<xsd:enumeration value = "BRL"/><!-- Brazilian Real -->
<xsd:enumeration value = "CAD"/><!-- Canadian Dollar -->
<xsd:enumeration value = "CNY"/><!-- Chinese Yen -->
<xsd:enumeration value = "EUR"/><!-- Euro -->
<xsd:enumeration value = "GBP"/><!-- British Pound -->
<xsd:enumeration value = "INR"/><!-- Indian Rupee -->
<xsd:enumeration value = "JPY"/><!-- Japanese Yen -->
<xsd:enumeration value = "RUR"/><!-- Russian Rouble -->
<xsd:enumeration value = "USD"/><!-- US Dollar -->
<xsd:length value = "3"/>
</xsd:restriction>
これにより、要素の値がリストされた列挙値の 1 つと長さ 3 に制限されます。
これを使用するには、バリデーターを介して XML と XSD を渡す必要があります。.NET でこれを行う方法の例を次に示します。
方法: Visual C#.NET で XML スキーマに対して XML フラグメントを検証する http://support.microsoft.com/kb/318504