以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [转帖]XML属性:XML属性和实体  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=21726)


--  作者:anchen0617
--  发布时间:9/1/2005 1:51:00 AM

--  [转帖]XML属性:XML属性和实体
XML属性:XML属性和实体


我写这篇文章是因为我真诚地关心你对我的看法。我担心的是:如果你读过我写的XML简介然后准备开始写自己的XML文档。于是你开始寻找一个已经建立的DTD来表示你的信息。你找到一个,如下所示:

<!ATTLIST fn

%attr.lang;

value CDATA #FIXED "TEXT">

<!ENTITY % attr.img "

img.type CDATA #REQUIRED

img.data ENTITY #REQUIRED">


马上你就会认为Jay一定是一个白痴。他没有说关于ATTLIST和ENTITY的任何事 - 不管它们是什么。

那么让我们谈谈这件事,先有一点耐心。

上面这些行可能不好看,但实际上没什么。它们被用在DTD中来定义XML文档中的属性和实体。了解HTML的人会对这很清楚。属性是带有HTML标记符的条目,用来更准确地描述标记符。在经常出现的<img src="my.gif" height="20" width="20">中,有两个属性:height和width。你在后面会看到,在XML文档使用属性与之很相似。

对实体也没有什么新东西。如果你用过&,你就已经掌握了最基本的东西。一个被&和分号包围起来的字符串用来表示另一个或一套字符。(这里有ISO实体的完整清单。)

当然,XML中属性和实体还有其它功能。这就不可避免地要引入语法,虽然不太多。一旦知道了这些,就会不费劲地使用XML文档。


--  作者:anchen0617
--  发布时间:9/1/2005 1:52:00 AM

--  
如果你决定自己写DTD,可能需要一本解释ATTLIST语句中所有组合的XML的书。但是如果借用DTD,或许只知道CDATA和另外三种属性就性了。

第一个是ID。它要求属性的值在文档中不重复。使用过数据库的人都知道唯一标志符的必要性。DTD ATTLIST语句看起来象这样:

<!ATTLIST element_name attribute_name ID #REQUIRED>

很难想象没有#REQUIRED缺省值的ID属性类型。如果那样,任何重复的或空的ID都会迫使处理器返回一个错误。ID必须以字母或下划线开始并且不能包含任何空格。

NMTOKEN类型也使用上面的命名规则。但是允许重复。它被用做传递数据给应用程序的保障。大多数程序语言,包括Java和JavaScript,在模块名中不能有空格。大多数情况下,最好保证属性符合它们的规则。

最后是枚举类型,不需要特定的关键字。而是用"|"符号包含在括号内的值,例如:

<!ATTLIST sibling (brother | sister) #REQUIRED>

如果有有限的可能的属性值,可以用这种方式。

不会认为今天的课程无趣吧,那么就接着读吧!


--  作者:anchen0617
--  发布时间:9/1/2005 1:53:00 AM

--  
实体

有五种预定义的XML实体,HTML编码者应该熟悉。XML文档中的字符&、<、>、"和'被分别表示为&、@lt;、>、"和&apos;。

XML很大程度上扩展了实体的功能 - 允许在DTD中定义实体以便在文档的其余部分使用。例如,我在XML文档中需要频繁使用词组"Wired Digital",可以在DTD中这样表示:

<!ENTITY wd "Wired Digital">

这样当我使用这个词组时,可以敲入&wd;。于是可以避免拼错和重复敲入相同的信息。实体可以起到字处理器中宏的作用。

被替换的文本可以任意长,但是如果真是很长,可能要把信息存储在另一个文件中。可以通过外部实体参考来实现 - 在实体名和文件的URL中使用关键字SYSTEM:

<!ENTITY text SYSTEM "http://my.url.here">

这些特征功能强大,但有一个缺点:在一个DTD内不能被扩展。为了实现扩展功能,需要一个称为参数实体的特殊工具。它在实体定义中通过在实体名前插入"%"实现。一旦被定义,参数定义可以通过用百分号和分号包围参数名来实现。

为什么这么做?看看下面的代码:


<!ELEMENT vCard (%prop.man;, (%prop.id; | %prop.del; |

%prop.tel; | %prop.geo; | %prop.org; |

%prop.exp; | %prop.sec;)*)>


这段代码来自一个公用的XML名片草稿。当定义根元素时,作者发现更容易把信息分离到不同的参数实体中。如果看看其中的一个实体表现,我们就会知道为什么了。看看下面的prop.id实体:


<!ENTITY % prop.id "

(nickname | photo | bday)">


如果每个实体都用这么长的字符串表示,元素定义将很难阅读。

现在可以读一些DTD了。


--  作者:anchen0617
--  发布时间:9/1/2005 1:54:00 AM

--  
Jay Greenspan ISO-8859-1 Entities
Named
Entity Numeric
Entity Glyph Description
�-
 unused
horizontaltab
linefeed
unused
space
! ! exclamationmark
" " " doublequotationmark
# # numbersign
$ $ dollarsign
% % percentsign
& & & amperstand
' ' apostrophe
( ( leftparenthesis
) ) rightparenthesis
* * asterisk
+ + plussign
, , comma
- - hyphen
. . period(fullstop)

Named
Entity Numeric
Entity Glyph Description

/ / solidus(slash)
0-
9 digits0-9
: : colon
; ; semicolon
< < < less-thansign
= = equalssign
> > > greater-thansign
? ? questionmark
@ @ commercialat
A-
Z letters A-Z
[ [ leftsquarebracket
\ \ reversesolidus(backslash)
] ] rightsquarebracket
^ ^ caret
_ _ horizontalbar(underscore)
` ` acuteaccent
a-
z letters a-z
{ { leftcurlybrace
| | verticalbar

Named
Entity Numeric
Entity Glyph Description
} } rightcurlybrace
~ ~ tilde
-
Ÿ unused
    non-breakingspace
&iexcl; &iexcl; invertedexclamation
&cent; &cent; centsign
&pound; &pound; poundsterling
¤ ¤ generalcurrencysign
&yen; &yen; yensign
&brvbar; &brvbar; brokenverticalbar
§ § sectionsign
¨ ¨ umlaut(dieresis)
&copy; &copy; &copy; copyright
&ordf; &ordf; feminineordinal
&laquo; &laquo; leftanglequote, guillemotleft
&not; &not; notsign
&shy; &shy; softhyphen
&reg; &reg; registeredtrademark
&macr; &macr; macronaccent

Named
Entity Numeric
Entity Glyph Description
° ° degreesign
± ± plusorminus
&sup2; &sup2; superscripttwo
&sup3; &sup3; superscriptthree
&acute; &acute; acuteaccent
&micro; &micro; microsign
&para; &para; paragraphsign
· · middledot
&cedil; &cedil; cedilla
&sup1; &sup1; superscriptone
&ordm; &ordm; masculineordinal
&raquo; &raquo; rightanglequote, guillemotright
&frac14; &frac14; one-fourth
&frac12; &frac12; one-half
&frac34; &frac34; three-fourths
&iquest; &iquest; invertedquestionmark
&Agrave; &Agrave; &Agrave; uppercaseA, graveaccent
&Aacute; &Aacute; &Aacute; uppercaseA, acuteaccent
&Acirc; &Acirc; &Acirc; uppercaseA, circumflexaccent

Named
Entity Numeric
Entity Glyph Description
&Atilde; &Atilde; &Atilde; uppercaseA, tilde
&Auml; &Auml; &Auml; uppercaseA, dieresisorumlautmark
&Aring; &Aring; &Aring; uppercaseA, ring
&AElig; &AElig; &AElig; uppercaseAEdipthong(ligature)
&Ccedil; &Ccedil; &Ccedil; uppercaseC, cedilla
&Egrave; &Egrave; &Egrave; uppercaseE, graveaccent
&Eacute; &Eacute; &Eacute; uppercaseE, acuteaccent
&Ecirc; &Ecirc; &Ecirc; uppercaseE, circumflexaccent
&Euml; &Euml; &Euml; uppercaseE, dieresisorumlautmark
&Igrave; &Igrave; &Igrave; uppercaseI, graveaccent
&Iacute; &Iacute; &Iacute; uppercaseI, acuteaccent
&Icirc; &Icirc; &Icirc; uppercaseI, circumflexaccent
&Iuml; &Iuml; &Iuml; uppercaseI, dieresisorumlautmark
&ETH; &ETH; &ETH; uppercaseEth, Icelandic
&Ntilde; &Ntilde; &Ntilde; uppercaseN, tilde
&Ograve; &Ograve; &Ograve; uppercaseO, graveaccent
&Oacute; &Oacute; &Oacute; uppercaseO, acuteaccent
&Ocirc; &Ocirc; &Ocirc; uppercaseO, circumflexaccent
&Otilde; &Otilde; &Otilde; uppercaseO, tilde

Named
Entity Numeric
Entity Glyph Description
&Ouml; &Ouml; &Ouml; uppercaseO, dieresisorumlautmark
× × multiplysign
&Oslash; &Oslash; &Oslash; uppercaseO, slash
&Ugrave; &Ugrave; &Ugrave; uppercaseU, graveaccent
&Uacute; &Uacute; &Uacute; uppercaseU, acuteaccent
&Ucirc; &Ucirc; &Ucirc; uppercaseU, circumflexaccent
&Uuml; &Uuml; &Uuml; uppercaseU, dieresisorumlautmark
&Yacute; &Yacute; &Yacute; uppercaseY, acuteaccent
&THORN; &THORN; &THORN; uppercaseTHORN, Icelandic
&szlig; &szlig; &szlig; lowercasesharps, German(szligature)
à à à lowercasea, graveaccent
á á á lowercasea, acuteaccent
&acirc; &acirc; &acirc; lowercasea, circumflexaccent
&atilde; &atilde; &atilde; lowercasea, tilde
&auml; &auml; &auml; lowercasea, dieresisorumlautmark
&aring; &aring; &aring; lowercasea, ring
&aelig; &aelig; &aelig; lowercaseaedipthong(ligature)
&ccedil; &ccedil; &ccedil; lowercasec, cedilla
è è è lowercasee, graveaccent

Named
Entity Numeric
Entity Glyph Description
é é é lowercasee, acuteaccent
ê ê ê lowercasee, circumflexaccent
&euml; &euml; &euml; lowercasee, dieresisorumlautmark
ì ì ì lowercasei, graveaccent
í í í lowercasei, acuteaccent
&icirc; &icirc; &icirc; lowercasei, circumflexaccent
&iuml; &iuml; &iuml; lowercasei, dieresisorumlautmark
&eth; &eth; &eth; lowercaseeth, Icelandic
&ntilde; &ntilde; &ntilde; lowercasen, tilde
ò ò ò lowercaseo, graveaccent
ó ó ó lowercaseo, acuteaccent
&ocirc; &ocirc; &ocirc; lowercaseo, circumflexaccent
&otilde; &otilde; &otilde; lowercaseo, tilde
&ouml; &ouml; &ouml; lowercaseo, dieresisorumlautmark
÷ ÷ divisionsign
&oslash; &oslash; &oslash; lowercaseo, slash
ù ù ù lowercaseu, graveaccent
ú ú ú lowercaseu, acuteaccent
&ucirc; &ucirc; &ucirc; lowercaseu, circumflexaccent

Named
Entity Numeric
Entity Glyph Description
ü ü ü lowercaseu, dieresisorumlautmark
&yacute; &yacute; &yacute; lowercasey, acuteaccent
&thorn; &thorn; &thorn; lowercasethorn, Icelandic
&yuml; &yuml; &yuml; lowercasey, dieresisorumlautmark


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms