网页编程-XML文法分析详解
在进行XML文法分析之前,首先有必要了解XML语法的基本规则:
词法特征:1)XML区分大小写,如元素名在打开和关闭标记中应保持大小写一致
2)XML保留标记字符为:< > &,保留字符不允许出现在元素名、元素文本、属性名、属性值中,< 用户打开标记,>用于关闭标记,&用于转意,常见的转意为 <生成<,>生成>,&生成&,&apos生成’,"生成”
3)元素名以下划线或字母开始,可包含字母、数字、句点、连字符、下划线、冒号和用于其他语言的扩展字符,元素名中不能有空格符(分格符、跳格符、换行符、回车符),元素名可以由名域前缀。如:
4)属性名的规则同元素名,属性值由单引号或双引号括约其中,可由除XML保留字符以外的字符串组成,如:
句法特征:1)XML文档由一个XML说明、多个可选的文档说明、多个可选的XML指令、多个可选的XML注释和一个根元素的数据体组成,此外还可以有嵌入语句中的CDATA段,如:
<?xml …?> /*XML说明*/ <!DOCTYPE …> /*XML文档说明*/ <!-- … --> /*XML注释*/ <?xml-stylesheet …?> /*XML指令*/ <root> /*根数据元素*/ <child> …<![CDATA[…]]> </child> </root>
2)XML说明由标关闭,其中包含版本、编码等可选说明,如:
3)XML文档说明由关闭,如:
4)XML指令由关闭,如:
5)XML注释由关闭,如:
6)XML元素由<元素名>打开,由/>,或元素名>关闭,元素的打开和关闭标记相互匹配,如
7)CDTATA段由打开,由]]>关闭,用于使居于其中的语句规避XML解析规则。如:
根据以上的XML文法特征,可以构造出用于词法分析的正则式和用于句法分析的下推自动机结构。
XML词法正则式:
#define digit [1,2,…,9] /*数字字符*/
#define letter [a,b,…,z,A,B,…,Z] /*字母字符*/
#define signs [~, ! , @, #, %, ^, &,*,(, ), ?, :, ;, “, ‘, ,, ., /,-, _, +, =, |, /] /*符号字符*/
#define ascii2 [0x80,…,0xFF] /*ASCII chart2 扩展字符*/
#define space [0x20, /t, /r, /n] /*空格符,跳格符,回车符,换行符*/
#define reserve [< , >, &] /*XML保留字符*/
1) 元素名的正则式:
element_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*
2) 元素文本的正则式:
element_text -> (ε| not reserve)*
3) 属性名的正则式:
proper_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*
4) 属性文本的正则式:
proper_value -> (ε| not reserve)*
XML句法结构:
xml_document -> xml_header (ε| xml_declare | xml_instruct | xml_comments)* xml_element xml_header -> [<?xml](space)*(proper_token)*(space)* [?>] xml_declare -> [<!]reserve_word(space)*(token)*(space)*[>] xml_instruct -> [<?]reserve_word(space)* (proper_token)* (space)*[?>] xml_comments -> [<!--](ε| digit | letter | signs | ascii2 | space)*[-- >] xml_element -> [<]element_name (space)*( ε| proper_token)*(space)*[/>] | [<]element_name(space)*( ε | proper_token)*(space)*[>] [ε| <![CDATA[ ]element_text[ε| ]]>] (ε | xml_element)*(space)*[</]element_name[>] proper_token -> proper_name(space)*[=](space)* [ε| <![CDATA[ ] [‘ | “]proper_value[‘ | “] [ε| ]]>] reserve_word -> [DOCTYPE | ELEMENT | NOTATION | …] token -> (ε| not reserve)*
分析XML文法需要构造一个下推自动机,它的结构定义如下:
1)STACK_DFA mata_xml_doc =
Q: {…} /*详见后面的状态集合*/ Σ: /*指向待解析的XML元素词串*/ σ: Q×Σ->Q /*状态转移函数,见状态转移列表*/ q: {NIL_SKIP} /*初始状态*/ Γ: {NIL_FAILED,NIL_SUCCEED} /*终结状态集合*/ S: {Q/*状态*/, N/*DOM节点*/>,<…>} /*下推栈*/
2)栈顶符集合用于反映当前分析节点的类型:
T:{NIL/*空*/, TG/*标记*/, NS/*元素*/, IS/*指令*/, DS/*声明*/, CD/*CDATA界段*/,CM/*注释*/}
3)状态集合反映了分析的某一阶段特征,与栈顶符对应:
NIL: NIL_FAILED /*失败*/ NIL_SKIP /*忽略*/ NIL_SUCCEED /*成功*/ CM: CM_BEGIN /*注释开始*/ CM_END /*注释结束*/ TG: TG_OPEN /*标记打开*/ TG_INT_CLOSE /*标记中断*/ TG_PRE_CLOSE /*标记准备关闭*/ TG_CLOSE /*标记关闭*/ NS: NS_NAME_BEGIN /*元素名开始*/ NS_NAME_END /*元素名结束*/ NS_KEY_BEGIN /*属性名开始*/ NS_KEY_END /*属性名结束*/ NS_ASIGN /*属性赋值*/ NS_VAL_BEGIN /*属性值开始*/ NS_VAL_END /*属性值结束*/ NS_TEXT_BEGIN /*元素文本开始*/ NS_TEXT_END /*元素文本结束*/ IS: IS_OPEN /*指令打开*/ IS_NAME_BEGIN /*指令名开始*/ IS_NAME_END /*指令名结束*/ IS_KEY_BEGIN /*指令键开始*/ IS_KEY_END /*指令键结束*/ IS_ASIGN /*赋值符*/ IS_VAL_BEGIN /*指令值开始*/ IS_VAL_END /*指令值结束*/ IS_CLOSE /*指令关闭*/ DS: DS_OPEN /*声明打开*/ DS_SKIP /*越过申明节*/ DS_CLOSE /*声明关闭*/ CD: CD_BEGIN /*CDATA界段开始*/ CD_END /*CDATA界段结束*/
Atas ialah kandungan terperinci 网页编程-XML文法分析详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Butiran artikel ini mengubahsuai nilai atribut XML, menonjolkan batasan yang berpunca daripada pembentukan yang baik, pengesahan skema/DTD, dan pengekodan aksara. Ia menekankan perangkap seperti ketidakpatuhan yang tidak enak dan tidak sepadan dengan data, dan menangani Securit

Artikel ini menerangkan cara menggunakan suapan RSS untuk pengagregatan berita yang efisien dan pengkhususan kandungan. Butirannya melanggan suapan, menggunakan pembaca RSS (seperti feedly dan inoreader), menganjurkan suapan, dan memanfaatkan ciri -ciri untuk kandungan yang disasarkan. Bene

Mengubah kandungan XML memberi kesan kepada prestasi aplikasi, terutamanya dengan fail besar. Parsing, manipulasi DOM, siri, dan operasi I/O menyumbang kepada ini. Strategi pengoptimuman termasuk menggunakan parser streaming, meminimumkan d

Artikel ini menangani pengubahsuaian fail XML yang cekap. Ia menonjolkan ketidakcekapan pemprosesan dalam memori, menyokong pendekatan streaming seperti sax dan stax parsing. Strategi untuk pengoptimuman termasuk parsing tambahan, data yang dioptimumkan s

Artikel ini memperincikan kaedah penukaran data XML. Ia menangani cabaran dalam mengubah format data dalam dokumen XML, menonjolkan teknik yang cekap seperti XSLT dan pemprosesan aliran. Artikel ini juga meliputi perangkap yang berpotensi, seperti SCH

Butiran artikel ini melaksanakan sindikasi kandungan menggunakan suapan RSS. Ia meliputi mewujudkan suapan RSS, mengenal pasti laman web sasaran, mengemukakan suapan, dan memantau keberkesanan. Cabaran seperti kawalan terhad dan sokongan media yang kaya juga diskus

Butiran artikel ini mendapatkan suapan RSS terhadap akses yang tidak dibenarkan. Ia mengkaji pelbagai kaedah termasuk pengesahan HTTP, kekunci API dengan pengehadan kadar, HTTPS, dan Obfuscation Kandungan (tidak digalakkan). Amalan terbaik melibatkan sekatan IP, membalikkan

Artikel ini meneroka mengintegrasikan teknologi web XML dan semantik. Isu teras adalah pemetaan data berstruktur XML untuk tiga kali ganda untuk interoperabilitas semantik. Amalan terbaik melibatkan definisi ontologi, pendekatan pemetaan strategik, berhati -hati
