0

こんにちは、xml と DTD は初めてです... 2 時間前にクラスでこれを学びました... DTD を使用して XML を作成しました. XML コードの DTD が正しいかどうか知りたいだけですか?

DTD:

< !DOCTYPE BusinessCard[

    <!ELEMENT BusinessCard (Name?,Phone+,Email?)>
    <!ELEMENT Name (#PCDATA)>
    <!ELEMENT Phone (#PCDATA)>
    <!ATTLIST Phone type CDATA "mobile">
    <!ATTLIST Phone type CDATA "work">
    <!ATTLIST Phone type CDATA "fax">
    <!ELEMENT Email (#PCDATA)>
]>

XML:

< BusinessCard>

    <Name >Jose P. Rizal</Name>

    <Phone type="mobile">(415)555-4567</Phone>

    <Phone type="work">(800)555-9876</Phone>

    <Phone type="fax">(515)555-1234</Phone>

    <Email>joserizal@email.com</Email>

</BusinessCard>
4

1 に答える 1

3

あなたの DTD は構文的に正当であり、ドキュメントは DTD に対して有効ですが、 Phone要素のtype属性の 3 つの宣言は、おそらくあなたが意味したいことを意味していません。特定の属性の最初の宣言が優先されるため、あなたが持っているものは

<!ATTLIST Phone type CDATA "mobile">

つまり、Phoneは、値が任意の文字データ (つまり、XML で表現可能な任意の文字列) であり、デフォルト値が " " であるtype属性を取ることができますmobile。異なるデフォルト値を持つ同じ属性の次の 2 つの再宣言は無視されます。

mobile属性が " "、" work"、または " " のいずれかの値を取り、それ以外の値を取り得ないと言いfaxたい場合は、列挙型を使用します。

<!ATTLIST Phone type (mobile | work | fax) "mobile">

属性が任意の値を取ることができるが、「mobile」、「work」、および「fax」という値はよく知られている値であり、ソフトウェアはそれらに対応する必要があるということを言いたい場合は、散文でそう言う必要があります。 ; DTD 表記では、それだけを言う方法はありません。Phone に 2 つの属性 ( typeothertype )を与えることで、かなり似たようなことを言うことができます。 typeは演習で 3 つの値と値 " other" を取ることができますが、othertype属性は値として任意の文字列を取ることができます。の場合にのみ意味がありtype="other"ます。そのため、自宅の電話番号にタグを付けることができます<Phone type="other" othertype="home">...</Phone>

<!ATTLIST Phone type (mobile | work | fax | other) #REQUIRED
                othertype CDATA #IMPLIED >
于 2012-10-01T23:53:34.290 に答える