JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java & XML、Web Service  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 設計一份 XML 的問題 [精華]
ffmm





發文: 46
積分: 0
於 2003-07-28 21:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問各位在設計一份 XML 的時候
例如描述一台 PC 的規格
什麼時候該用 Element 什麼時候該用 Attribute ?
這裡有一份 XML
<pc>
<ram>512MB</ram>
<cpu>P-III 500MHZ</cpu>
<name>SUN</name>
</pc>

我該把 ram / cpu / name 變成屬性放進去 pc 這個 element 裡面變成
<pc ram="512MB" cpu="P-III 500MHZ" name="SUN">
</pc>
有沒有什麼準則或是大方向可以遵循~?
請指教!!
謝謝唷!!


reply to postreply to post
作者 Re:設計一份 XML 的問題 [Re:ffmm]
linexpmail

好玩就好



發文: 456
積分: 15
於 2003-07-28 22:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
好像沒有特定規則說明 element 與 attribute 的使用,必須看應用
而定,一般都是將所謂的 Information about the data (meta-data)
放在 attribute 裡面。

cpu/ram 對 pc 來說是不是 meta-data 因人而異。NOVA 報價業務員來說,
cpu/ram 可以是說 meta-data ,但是財產管理的人可能不這樣認為,
cpu 幾顆,ram 幾條都必須成為 data ,而不是 meta-data。

Attribute 好處 xpath 定位較短,檔案也會比較小,本來 meta-data 就是描述
資料用的,不用迴圈好幾次繞來繞去才找到。

缺點是無法延展,cpu1/cpu2 來定義新的 SMP 機器嗎?這樣做變成
加東西每次都必須改 DTD/Schema ,或許你可以,其他部門不見得同意。
畢竟 DTD/Schema 是類似 Interface 的東西,不是說改就能改的。

一點意見,僅供參考。


reply to postreply to post
作者 Re:設計一份 XML 的問題 [Re:ffmm]
saijone

Web Services

版主

發文: 470
積分: 24
於 2003-07-29 11:29 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
使用 attribute 或是 sub-element 確實好像沒有一定的規則, 同事間也曾為了
這討論了多次, 亦無明確的結論. 如果資料簡單, 可以用一字串表達的, 個人比
較偏好用 attribute. 理由如同 linexpmail 所說的, 寫起來簡短.

然而 element 卻有很多 attribute 無法做到的功能, 這些可以作為在設計
XML Schema 或 DTD 上的參考:

1. multiplicity: 可以有多個同一類別(Type)的 element, 但同一名稱的
attribute 只能有一個:
1
2
3
4
5
    <girl>
        <boy-friend>A</boy-friend>
        <boy-friend>B</boy-friend>
        <boy-friend>C</boy-friend>
    </girl>

如果一定要用 attribute 的話:
1
    <girl boy-friends="A B C"/>

這樣擺在一塊, 用個特殊字元分開並不好看, 而且要取得有意義的 attribute
value, 你要自己 parse/tokenize.

2. strong typing: 可以用 Schema 或 DTD 來定義它的結構(但 attribute就只是一個 string):
1
2
3
4
5
6
7
8
9
    <girl>
        <!-- boy-friend is of type "boy" -->
        <boy-friend>
              <name>A</name>
              <!-- each girl-friend is of the same type as "girl" -->
              <girl-friend>X</girl-friend>
              <girl-friend>Y</girl-friend>
        </girl-friend>
    </girl>

如果在 Schema 或 DTD 中定義的 boy complex-type 不云許有多個
girl-friend element 的話, 那麼 parer(with validation truned on)會自己找出
不合法的結構加以拒絕. 如果以 attribute 來表達的話, 除了得自己寫 parsing
之外, 也要寫 code 去 check/validate.

ps. 上例純屬虛構, 無關性別歧視Big Smile

所以最重的是看你資料結構的需求去訂出 Schema(或 DTD), 現在一般的
XML 都用 Schema 定義為主, 因為 Schema 比 DTD 有更多的typing. 據說未
來 J2EE 的 deployment descriptor 除了以 Schema 定義外也多用 element.

關於以 Metadata 來解釋 XML attribut 個人則有所保留. 因為 XML attribut
是屬於一種 "instance attribute" (XML is instance of Schema/DTD). 而
instance attribute 比較像是 data, 但如果說是 Schema Annotation, 或者
是 .NET 中的 class attribues, method attributes 就應該算是Metadata.


saijone edited on 2003-07-29 11:41
reply to postreply to post
You don't need a reason to help people
作者 Re:設計一份 XML 的問題 [Re:saijone]
linexpmail

好玩就好



發文: 456
積分: 15
於 2003-07-29 12:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
是否使用屬性真的有很多考量,SVG 標準的 path 節點定義可供參考。

http://www.w3.org/TR/SVG11/paths.html

如 saijone 所說,這個 d 屬性需要再去 parse 方能用,但是
為何要這樣定?因為檔案實在小很多,越複雜線段差越多,
可以相差 50-200%。

雖說 parse 這個屬性是 svg viewer 去傷腦筋的事,
不過你如果要用 xslt 來轉這個 path 的 d 屬性就很煩了。


reply to postreply to post
作者 Re:設計一份 XML 的問題 [Re:linexpmail]
tempo



版主

發文: 645
積分: 7
於 2003-07-29 22:51 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
linexpmail wrote:
...
如 saijone 所說,這個 d 屬性需要再去 parse 方能用,但是
為何要這樣定?因為檔案實在小很多,越複雜線段差越多,
可以相差 50-200%。
...


我記得問題並不是在檔案比較小, 而是 sax parser 處理 attribute 比 element 的速度快很多..


reply to postreply to post
作者 Re:設計一份 XML 的問題 [Re:ffmm]
flashyang

我是巨嘴鳥咕咕~~^Q^



發文: 16
積分: 1
於 2004-08-18 11:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如同tempo所說的....在parse過程中.....是先parse到attribute再parse element....如果有必要..attribute可以做為判斷用的key來決定是否該繼續parse接下來的內容...

有錯麻煩糾正一下..


reply to postreply to post
=== JAVA - Java As Visual Art ===
» JWorld@TW »  Java & XML、Web Service

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8