検索
ホームページバックエンド開発XML/RSS チュートリアルめちゃくちゃXML勉強記(3) -----------XMLとDTD

Document Type Definition (DTD) は、法的な XML ドキュメントの構成要素を定義します。一連の法的要素を使用して文書の構造を定義します。

DTD は、XML ドキュメント内で行または外部参照として宣言できます。

DTDがXMLソースファイルに含まれている場合は、 DOCTYPE ステートメント内でラップされます:

<!DOCTYPE 根元素 [元素声明]>

DTD を使用した XML ドキュメント インスタンス

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don&#39;t forget the meeting!</body>
</note>

上記の DTD は次のように説明されます:

!DOCTYPE note

(2 行目) は、このドキュメントが

Note タイプのドキュメントであることを定義します。 !ELEMENT note

(3行目) 定義

note要素には、「to、from、見出し、、本文」の4つの要素があります!ELEMENT to

(4行目) 定義

to要素は "#PCDATA" 型 !ELEMENT from

(5 行目) は

frome 要素を定義します は "#PCDATA" 型 !ELEMENT 見出し

(6 行目) は

見出し を定義します"#PCDATA" 型の!ELEMENT body

(7 行目) は

body を定義します。 要素は "#PCDATA" 型です

外部ドキュメント宣言

DTD 外部の場合XML ソース ファイルに変換するには、次の構文を使用して DOCTYPE 定義にカプセル化する必要があります:

<!DOCTYPE 根元素 SYSTEM "文件名">

この XML ドキュメントは上記の XML ドキュメントと同じですが、外部 DTD が付いています: (そして、[ソース コードの表示] を選択します)コマンド。)

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don&#39;t forget the meeting!</body>
</note>

これは、DTD を含む「note.dtd」ファイルです:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

DTD を使用する理由

DTD を使用すると、各 XML ファイルに独自の形式の記述を含めることができます。

DTD を使用すると、独立したグループは一貫して標準 DTD を使用してデータを交換できます。

そして、アプリケーションは標準の DTD を使用して、外部から受信したデータを検証することもできます。

DTD を使用して自分のデータを検証することもできます。

XML ドキュメントの構成要素

すべての XML ドキュメント (および HTML ドキュメント) は、次の単純な構成要素

要素で構成されています。
  • 属性

  • エンティティ

  • PCDATA

  • CDATA

  • 概要はこちら各構成要素の説明。

要素

要素は、XML ドキュメントと HTML ドキュメントの

主要な構成要素

です。

HTML要素の例は、「body」と「table」です。 XML 要素の例としては、「note」や「​​message」などがあります。要素にはテキストや他の要素を含めることも、空にすることもできます。空の HTML 要素の例としては、「hr」、「br」、「img」などがあります。

例:

<body>body text in between</body>
<message>some message in between</message>

属性

属性は、要素に関する

追加情報

を提供します。

属性は常に要素の開始タグに配置されます。プロパティは常に 名前/値 のペアで指定されます。次の「img」要素には、ソース ファイルに関する追加情報が含まれています:

<img  src="/static/imghwm/default1.png"  data-src="computer.gif"  class="lazy"   / alt="めちゃくちゃXML勉強記(3) -----------XMLとDTD" >
要素の名前は「img」です。属性の名前は「src」です。プロパティの値は「computer.gif」です。要素自体は空なので「/」で閉じます。

エンティティ

实体是用来定义普通文本的变量。实体引用是对实体的引用。

大多数同学都了解这个 HTML 实体引用:" "。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。

当文档被 XML 解析器解析时,实体就会被展开。

下面的实体在 XML 中被预定义:

实体引用 字符
953b80e5c5c9ed95f06f3895ef7edd3e >
& &
" "
' '

PCDATA

PCDATA 的意思是被解析的字符数据(parsed character data)。

可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何 &、 字符;需要使用 &、df6ed20ae940f563c21bfd880540d8df 实体来分别替换它们。

 


在一个 DTD 中,元素通过元素声明来进行声明。

声明一个元素

在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:

<!ELEMENT 元素名称 类别>

或者

<!ELEMENT 元素名称 (元素内容)>

空元素

空元素通过类别关键词EMPTY进行声明:

<!ELEMENT 元素名称 EMPTY>

例子:

<!ELEMENT br EMPTY>

XML例子:

<br />

只有 PCDATA 的元素

只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

<!ELEMENT 元素名称 (#PCDATA)>

例子:

<!ELEMENT from (#PCDATA)>

带有任何内容的元素

通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

<!ELEMENT 元素名称 ANY>

例子:

<!ELEMENT note ANY>

带有子元素(序列)的元素

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

<!ELEMENT 元素名称 (子元素名称 1)>

或者

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

例子:

<!ELEMENT note (to,from,heading,body)>

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。"note" 元素的完整声明是:

<!ELEMENT note (to,from,heading,body)>



声明只出现一次的元素

<!ELEMENT 元素名称 (子元素名称)>

例子:

<!ELEMENT note (message)>

上面的例子声明了:message 子元素必须出现一次,并且必须只在 "note" 元素中出现一次。

声明最少出现一次的元素

<!ELEMENT 元素名称 (子元素名称+)>

例子:

<!ELEMENT note (message+)>

上面的例子中的加号声明了:message 子元素必须在 "note" 元素内出现至少一次。

声明出现零次或多次的元素

<!ELEMENT 元素名称 (子元素名称*)>

例子:

<!ELEMENT note (message*)>

上面的例子中的星号声明了:子元素 message 可在 "note" 元素内出现零次或多次。

声明出现零次或一次的元素

<!ELEMENT 元素名称 (子元素名称?)>

例子:

<!ELEMENT note (message?)>

上面的例子中的问号声明了:子元素 message 可在 "note" 元素内出现零次或一次。

声明“非.../既...”类型的内容

例子:

<!ELEMENT note (to,from,header,(message|body))>

上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。

 

声明混合型的内容

例子:

<!ELEMENT note (#PCDATA|to|from|header|message)*>

上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。

 

声明属性

属性声明拥使用下列语法:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

DTD 实例:

<!ATTLIST payment type CDATA "check">

XML 实例:

<payment type="check" />

以下是属性类型的选项:

类型 描述
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值

默认值参数可使用下列值:

解释
属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的

规定一个默认的属性值

DTD:

<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">

合法的 XML:

<square width="100" />

在上面的例子中,"square" 被定义为带有 CDATA 类型的 "width" 属性的空元素。如果宽度没有被设定,其默认值为0 。

#IMPLIED

语法

<!ATTLIST 元素名称 属性名称 属性类型 #IMPLIED>

例子

DTD:

<!ATTLIST contact fax CDATA #IMPLIED>

合法的 XML:

<contact fax="555-667788" />

合法的 XML:

<contact />

假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。

#REQUIRED

语法

<!ATTLIST 元素名称 属性名称 属性类型 #REQUIRED>

例子

DTD:

<!ATTLIST person number CDATA #REQUIRED>

合法的 XML:

<person number="5677" />

非法的 XML:

<person />

假如您没有默认值选项,但是仍然希望强制作者提交属性的话,请使用关键词 #REQUIRED。

#FIXED

语法

<!ATTLIST 元素名称 属性名称 属性类型 #FIXED "value">

例子

DTD:

<!ATTLIST sender company CDATA #FIXED "Microsoft">

合法的 XML:

<sender company="Microsoft" />

非法的 XML:

<sender company="W3School" />

如果您希望属性拥有固定的值,并不允许作者改变这个值,请使用 #FIXED 关键词。如果作者使用了不同的值,XML 解析器会返回错误。

列举属性值

语法:

<!ATTLIST 元素名称 属性名称 (en1|en2|..) 默认值>

DTD 例子:

<!ATTLIST payment type (check|cash) "cash">

XML 例子:

<payment type="check" />

或者

<payment type="cash" />

如果您希望属性值为一系列固定的合法值之一,请使用列举属性值。


实体是用于定义用于定义引用普通文本或特殊字符的快捷方式的变量。

实体引用是对实体的引用。

实体可在内部或外部进行声明。

一个内部实体声明

语法:

<!ENTITY 实体名称 "实体的值">

例子:

DTD 例子:

<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

XML 例子:

<author>&writer;&copyright;</author>

注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。

一个外部实体声明

语法:

<!ENTITY 实体名称 SYSTEM "URI/URL">

例子:

DTD 例子:

<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">

XML 例子:

<author>&writer;&copyright;</author>

 

通过 XML 解析器进行验证

当您试图打开某个 XML 文档时,XML 解析器有可能会产生错误。通过访问 parseError 对象,就可以取回引起错误的确切代码、文本甚至所在的行。

注释:load( ) 方法用于文件,而 loadXML( ) 方法用于字符串。

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.validateOnParse="true"
xmlDoc.load("note_dtd_error.xml")

document.write("<br>Error Code: ")
document.write(xmlDoc.parseError.errorCode)
document.write("<br>Error Reason: ")
document.write(xmlDoc.parseError.reason)
document.write("<br>Error Line: ")
document.write(xmlDoc.parseError.line)

 

关闭验证

通过把 XML 解析器的 validateOnParse 设置为 "false",就可以关闭验证。

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.validateOnParse="false"
xmlDoc.load("note_dtd_error.xml")

document.write("<br>Error Code: ")
document.write(xmlDoc.parseError.errorCode)
document.write("<br>Error Reason: ")
document.write(xmlDoc.parseError.reason)
document.write("<br>Error Line: ")
document.write(xmlDoc.parseError.line)

Try it Yourself

通用的 XML 验证器

为了帮助您验证 XML 文件,我们创建了此链接,这样你就可以验证任何 XML 文件了。

parseError 对象

 

电视节目表 DTD

 

<!DOCTYPE TVSCHEDULE [

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

]>

报纸文章 DTD

 

<!DOCTYPE NEWSPAPER [ 

<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)> 

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">

]>

产品目录 DTD

拷贝自:http://www.php.cn/

<!DOCTYPE CATALOG [

<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte" 
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">

<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>

]>

 

以上就是疯狂XML学习笔记(3)-----------XML与DTD 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

 

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
RSSドキュメント形式:RSS 2.0以降の探索RSSドキュメント形式:RSS 2.0以降の探索Apr 26, 2025 am 12:22 AM

RSS2.0は、コンテンツパブリッシャーが構造化された方法でコンテンツを配布できるようにするオープン標準です。タイトル、リンク、説明、リリース日などの豊富なメタデータが含まれているため、サブスクライバーは迅速にコンテンツを参照してアクセスできます。 RSS2.0の利点は、そのシンプルさとスケーラビリティです。たとえば、カスタム要素を許可します。つまり、開発者は著者、カテゴリなどのニーズに基づいて追加情報を追加できます。

RSSの理解:XMLの視点RSSの理解:XMLの視点Apr 25, 2025 am 12:14 AM

RSSは、頻繁に更新されるコンテンツを公開するために使用されるXMLベースの形式です。 1。RSSFeedは、タイトル、リンク、説明などを含むXML構造を通じて情報を整理します。2。rssfeedの作成には、言語やリリース日などのメタデータを追加するXML構造での書き込みが必要です。 3.高度な使用法には、マルチメディアファイルと分類された情報を含めることができます。 4.デバッグ中にXML検証ツールを使用して、必要な要素が存在し、正しくエンコードされていることを確認します。 5. RSSFeedの最適化は、構造をシンプルに保つことで、ページング、キャッシュ、および保持することで実現できます。この知識を理解して適用することにより、コンテンツを効果的に管理および配布できます。

XMLのRSS:タグ、属性、および構造のデコードXMLのRSS:タグ、属性、および構造のデコードApr 24, 2025 am 12:09 AM

RSSは、コンテンツを公開および購読するために使用されるXMLベースの形式です。 RSSファイルのXML構造には、ルート要素、要素、および複数の要素が含まれ、それぞれがコンテンツエントリを表します。 XMLパーサーを介してRSSファイルを読み取り、解析すると、ユーザーは最新のコンテンツを購読して取得できます。

RSSにおけるXMLの利点:技術的なディープダイビングRSSにおけるXMLの利点:技術的なディープダイビングApr 23, 2025 am 12:02 AM

XMLには、RSSの構造化データ、スケーラビリティ、クロスプラットフォームの互換性、解析検証の利点があります。 1)構造化されたデータにより、コンテンツの一貫性と信頼性が保証されます。 2)スケーラビリティにより、コンテンツのニーズに合わせてカスタムタグを追加できます。 3)クロスプラットフォームの互換性により、さまざまなデバイスでシームレスに動作します。 4)分析および検証ツールは、フィードの品質と完全性を確保します。

XMLのRSS:コンテンツシンジケーションのコアを発表しますXMLのRSS:コンテンツシンジケーションのコアを発表しますApr 22, 2025 am 12:08 AM

XMLでのRSSの実装は、構造化されたXML形式を使用してコンテンツを整理することです。 1)RSSは、チャネル情報やプロジェクトリストなどの要素を含むデータ交換形式としてXMLを使用します。 2)RSSファイルを生成する場合、コンテンツは仕様に従って整理し、サブスクリプションのためにサーバーに公開する必要があります。 3)RSSファイルは、読者またはプラグインを介してサブスクライブして、コンテンツを自動的に更新できます。

基本を超えて:高度なRSSドキュメント機能基本を超えて:高度なRSSドキュメント機能Apr 21, 2025 am 12:03 AM

RSSの高度な機能には、コンテンツネームスペース、拡張モジュール、条件付きサブスクリプションが含まれます。 1)コンテンツネームスペースはRSS機能を拡張します。2)dublincoreやiTunesなどの拡張モジュールを拡張してメタデータを追加します。これらの関数は、情報収集の効率を改善するためにXML要素と属性を追加することにより実装されます。

XMLバックボーン:RSSフィードが構造化される方法XMLバックボーン:RSSフィードが構造化される方法Apr 20, 2025 am 12:02 AM

rssfeedsusexmltoStructurecontentupdates.1)xmlprovidesahierararchStructurefordata.2)theelementDefinesthefeed'sidentityandContainesements.3)letentionEntentividualContentPieces.4)

RSS&XML:Webコンテンツのダイナミックデュオを理解するRSS&XML:Webコンテンツのダイナミックデュオを理解するApr 19, 2025 am 12:03 AM

RSSとXMLは、Webコンテンツ管理のためのツールです。 RSSはコンテンツの公開と購読に使用され、XMLはデータの保存と転送に使用されます。コンテンツの公開、サブスクリプション、および更新プッシュで動作します。使用法の例には、RSS公開ブログ投稿やXML保存本情報が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。