📄 xml1_0 中文文档(第二版)---2_ 文件 - fanqiang_com.htm
字号:
#NT-extSubsetDecl?>extSubsetDecl</A>。</P></DIV>
<P>同内部子集一样,外部子集和任何 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-DeclSep">DeclSep</A>
中引用的外部参数实体,必须由一系列被非终结符 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-markupdecl"><CODE>markupdecl</CODE></A>
所允许的完整的标记声明组成,其中可以夹杂空白字符或<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-PERef">参数实体引用</A>。但是,外部子集和外部参数实体的部分内容可以通过使用<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-cond-section">条件段(conditional
section)</A>被有条件地忽略,在内部子集中则不允许这么做。</P>
<H5>外部子集</H5>
<TABLE class=scrap>
<TBODY>
<TR vAlign=baseline>
<TD><A name=NT-extSubset></A>[30] </TD>
<TD><CODE>extSubset</CODE></TD>
<TD>::= </TD>
<TD><CODE><A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-TextDecl">TextDecl</A>?
<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-extSubsetDecl">extSubsetDecl</A></CODE></TD></TR>
<TR vAlign=baseline>
<TD><A name=NT-extSubsetDecl></A>[31] </TD>
<TD><CODE>extSubsetDecl</CODE></TD>
<TD>::= </TD>
<TD><CODE>( <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-markupdecl">markupdecl</A>
| <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-conditionalSect">conditionalSect</A>
| <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-DeclSep">DeclSep</A>)*</CODE></TD>
<TD><I>/* */</I></TD></TR></TBODY></TABLE>
<P>外部子集和外部参数实体与内部实体不同之处还在于:在它们内,<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-PERef">参数实体引用</A>不仅可以出现在标记声明<EM>间</EM>,还可以出现在标记声明<EM>内</EM>。</P>
<P>有文件类型声明的 XML 文件的例子:</P>
<TABLE cellPadding=5 width="100%" bgColor=#80ffff border=1>
<TBODY>
<TR>
<TD><CODE><?xml version="1.0"?><GREETING>Hello,
world!</GREETING> </CODE></TD></TR></TBODY></TABLE>
<P><A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-sysid">系统标识符</A>
"<CODE>hello.dtd</CODE>" 给出了此文件的 DTD 的地址(一个 URI 引用)。</P>
<P>声明也可以如同下面这个例子一样直接(locally)给出:</P>
<TABLE cellPadding=5 width="100%" bgColor=#80ffff border=1>
<TBODY>
<TR>
<TD><CODE><?xml version="1.0" encoding="UTF-8" ?>]>
<GREETING>Hello, world!</GREETING> </CODE></TD></TR></TBODY></TABLE>
<P>如果同时使用外部和内部子集,子集子集被看成出现在外部子集之前,这意味着内部子集中的实体和属性表声明的优先级要比在外部子集中的高。</P>
<H3><A name=sec-rmd>2.9 独立文件声明</A></H3>
<P>当文件从 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-xml-proc">XML
处理器</A>递给应用时,标记声明可以影响它的内容,属性缺省值和实体声明是其中的例子。可以作为 XML
声明一个成分的独立文件声明,指明了是否存在着在<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-docent">文件实体</A>外或在参数实体中的声明。[定义:<B>外部标记声明</B>被定义为出现在外部子集或参数实体(外部或内部,包括内部参数实体是因为并不强制不进行验证的处理器读取其中的标记声明)中的标记声明。]</P>
<H5>独立文件声明</H5>
<TABLE class=scrap>
<TBODY>
<TR vAlign=baseline>
<TD><A name=NT-SDDecl></A>[32] </TD>
<TD><CODE>SDDecl</CODE></TD>
<TD>::= </TD>
<TD><CODE><A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-S">S</A>
'standalone' <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#NT-Eq">Eq</A>
(("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"'))
</CODE></TD>
<TD><A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#vc-check-rmd">[VC:
独立文件声明]</A></TD></TR></TBODY></TABLE>
<P>在一个独立文件声明中,值 "<CODE>yes</CODE>" 表示对于<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-docent">文件实体</A>没有<A
title="External Markup Declaration"
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-extmkpdecl">外部标记声明</A>(不论是在
DTD 外部子集中,还是在由内部实体引用的外部参数实体中)会影响从 XML 处理器传递给应用的信息。值
"<CODE>no</CODE>"
表示有或可能有这样的外部标记声明。注意,独立文件声明只是表示外部<EM>声明</EM>的存在,如果文件中存在对外部<EM>实体</EM>的引用,而这些实体已在内部声明时,不影响它的独立状态。</P>
<P>如果不存在外部标记声明,独立文件声明没有意义。如果存在外部标记声明,但没有独立文件声明,就假定取值
"<CODE>no</CODE>"。</P>
<P>某些网络传输应用也许需要独立的文件,任何满足 <CODE>standalone="no"</CODE> 的 XML
文件可以通过一定的算法转换为独立文件。<A name=vc-check-rmd></A></P>
<P><B>有效性约束: 独立文件声明</B> 独立文件声明必须取值为
"<CODE>no</CODE>",如果任何外部标记声明中包含:</P>
<UL>
<LI>有<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-default">缺省</A>值的属性的声明,如果适用这些属性的元素出现在文件中而又没有给这些属性赋值的话。
<LI>(除了
<CODE>amp</CODE>,<CODE>lt</CODE>,<CODE>gt</CODE>,<CODE>apos</CODE>,<CODE>quot</CODE>
外的)实体的声明,而对这些实体的<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-entref">引用</A>出现在文件中的话。
<LI>其值需要<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#AVNormalize">规范化</A>的属性的声明,如果这些出现在文件中的属性的值会因规范化而改变的话。
<LI>具有<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-elemcontent">元素型内容</A>的元素类型的声明,如果在这些类型的任一实例中直接出现空白的话。
</LI></UL>
<P>具有独立文件声明的 XML 声明的例子:</P>
<TABLE cellPadding=5 width="100%" bgColor=#80ffff border=1>
<TBODY>
<TR>
<TD><CODE><?xml version="1.0" standalone='yes'?></CODE></TD></TR></TBODY></TABLE>
<H3><A name=sec-white-space>2.10 空白处理</A></H3>
<P>在编辑 XML
文件时,使用"空白"(空格,制表符,空行)来分开标记以获得更好的可读性是很方便的。通常在文件的交付版本中不想包含这些空白。另一方面,必须保留在交付版本中的有意义的空白是很常见的,如在诗歌和源码中的空白。</P>
<P><A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-xml-proc">XML
处理器</A>必须始终把不是标记的所有字符传递给应用。一个<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-validating">进行验证的
XML 处理器</A>必须同时通知应用这些字符中的那一些组成了出现在<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-elemcontent">元素型内容</A>中的空白。</P>
<P>可以在元素中附加一个名为 <CODE>xml:space</CODE> 的特殊<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-attr">属性</A>,以通知应用应该保留此元素中的空白。在有效的文件中,此属性和其他属性一样,使用时必须<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-attdecl">声明</A>。它必须被声明为<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-enumerated">枚举类型</A>,可以取值
"<CODE>default</CODE>" 和 "<CODE>preserve</CODE>"
两者之一,也可以两个都取。例如:</P>
<TABLE class=eg cellPadding=5 width="100%" bgColor=#99ffff
border=1><TBODY>
<TR>
<TD><PRE><!ATTLIST poem xml:space (default|preserve) 'preserve'>
<!-- -->
<!ATTLIST pre xml:space (preserve) #FIXED 'preserve'></PRE></TD></TR></TBODY></TABLE>
<P>"<CODE>default</CODE>"
表示可以对此元素使用应用的缺省空白处理模式,"<CODE>preserve</CODE>"
表示应用应该保留所有的空白。这适用于其所处元素的内容中的所有元素,除非被另一个 <CODE>xml:space</CODE>
属性的实例所覆盖。</P>
<P>任何文件的<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-root">根元素</A>被认为对应用的空白处理方式不作要求,除非它给此属性赋了值或将此属性声明为带缺省值。</P>
<H3><A name=sec-line-ends>2.11 行尾处理</A></H3>
<P>为编辑的方便起见,存储 XML <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-parsedent">已析实体</A>的计算机文件经常用行来组织。通常这些行用回车符(#xD)和换行符(#xA)的一些组合来分隔。</P>为了使应用的工作简单化,XML
处理器应在将字符传给应用前,将外部已析实体(包括文件实体)中的两字符序列 "#xD#xA" 或没有尾随 #xA 的 #xD
在进行语法分析前转换成单个 #xA 字符。
<H3><A name=sec-lang-tag>2.12 语言标识</A></H3>
<P>在进行文件处理时,标识出其内容所使用的自然或形式化语言经常是很有用的。可以在文件中插入一个名为
<CODE>xml:lang</CODE> 的特殊<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-attr">属性</A>用于指出
XML 文件中任何元素的内容和属性所使用的语言。在有效的文件中,此属性和其他属性一样,使用时必须<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#dt-attdecl">声明</A>。此属性的值是
<A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#RFC1766">[IETF
RFC 1766]</A>,<CITE>Tags for the Identification of Languages</CITE>
或其后的 ITEF 标准中定义的语言标识符。</P>
<DIV class=note>
<P class=prefix><B>注:</B></P>
<P><A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#RFC1766">[IETF
RFC 1766]</A> 中的标签由 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#ISO639">[ISO
639]</A> 中定义的两字母语言码和 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#ISO3166">[ISO
3166]</A> 中定义的两字母国家码构成,或者由 Internet Assigned Numbers Authority <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#IANA-LANGCODES">[IANA-LANGCODES]</A>
注册的语言标识符构成。 预计 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#RFC1766">[IETF
RFC 1766]</A> 的后继标准将会引入三字母语言码用于表示 <A
href="http://fanqiang.chinaunix.net/program/html/2001-05-17/2004.shtml#ISO639">[ISO
639]</A> 中没有涉及的语言。</P></DIV>
<P>(产生式 33 到 38 已被删除。)</P>
<P>举例如下:</P>
<TABLE border=1 A>内的参数实体引觲idth="100%" bgcolor="#80FFFF">
<TBODY>
<TR>
<TD><CODE>
<P xml:lang="en">The quick brown fox jumps over the lazy
dog.</P>
<P xml:lang="en-GB">What colour is it?</P>
<P xml:lang="en-US">What color is it?</P><SP xml:lang="de"
desc="leise" who="Faust"><L>Habe nun, ach! Philosophie,</L>
<L>Juristerei, und Medizin</L> <L>und leider auch
Theologie</L> <L>durchaus studiert mit hei遝m Bem黨'n.</L>
</SP></CODE></TD></TR></TBODY></TABLE>
<P><CODE>xml:lang</CODE> 所表示的语言选择适用于它所处元素的所有属性和内容,除非被此内容中的元素内的另一个
<CODE>xml:lang</CODE> 的实例所覆盖。</P>
<P><CODE>xml:lang</CODE> 的一个简单声明可以采用如下形式:</P>
<TABLE cellPadding=5 width="100%" bgColor=#80ffff border=1>
<TBODY>
<TR>
<TD><CODE>xml:lang NMTOKEN #IMPLIED</CODE></TD></TR></TBODY></TABLE>
<P>但是如果合适的话,也可以给出特定的缺省值。在一本供英国学生使用的法文诗歌集中,评注和注解使用英语,xml:lang
属性可以这样声明:</P>
<TABLE cellPadding=5 width="100%" bgColor=#80ffff border=1>
<TBODY>
<TR>
<TD><CODE><!ATTLIST poem xml:lang NMTOKEN 'fr'><!ATTLIST gloss xml:lang NMTOKEN 'en'><!ATTLIST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -