對於幾乎任何足夠複雜且功能強大而有趣的語言,不同的人對使用該語言的最佳方式會有不同的看法。
你問「應該避免複雜類型嗎?」正如您所看到的,在文檔中,您指向Kohsuke Kawaguchi(他是設計XSD的工作組成員,並且已經編寫了幾個重要的XSD工具,包括第一個XSD驗證器),建議用戶避免使用XSD中的某些構造,包括複雜類型,通常理由是它們的優勢與劣勢的比例(特別是它們的複雜性)很差。你可以(並且你必須)在KK的論點的說服力上做出自己的想法。因爲(據我所知)你的問題相當於問「KK是對的嗎?」,我認爲你不會覺得自己完成了自己的想法,或者至少你是好奇的並且想要了解別人的想法。
一般而言,可以肯定地說許多XSD用戶以及許多XSD工具的創建者都不贊同KK。他們發現從其他複雜類型派生出複雜類型的能力很有幫助,並且他們使用它。
同樣可以肯定的是,許多人同意KK的觀點,即XSD的這個或那個構造過於複雜並且更好地避免。一些認爲這種方式的人編寫描述「最佳實踐」的文件,其中列出了使用和構建以避免的構造;有時這些文件的內容是有用的,有時不是。許多與KK最爲熱衷於XSD複雜類型的人士完全不同,他們可以避免使用XSD:他們更喜歡Relax NG(或在某些情況下,DTD或Schematron)。
換句話說:合格的觀察者的意見是不一樣的,就像那些不合格的觀察者那樣。我知道一些非常聰明的人在這個問題上不同意KK。而且我也知道KK本人以及一些同意他的人也非常聰明。我無意在這裏選擇一方。
最後,你問如果它有問題,爲什麼它首先存在於語言結構中?任何語言的任何構造都存在,因爲那些設計語言的人認爲它是值得包括的。在XSD和複雜類型的情況下,這意味着:複雜類型在XSD中作爲可命名對象,因爲基本上負責任的工作組中的每個人都希望他們使用該語言。這並不妨礙他們成爲問題:像其他人一樣,技術高超的人可能會犯錯誤,而那些必須尋求共識的團隊才能在適當的環境下產生沒有人真正喜歡的設計(但是每個人都更喜歡這種替代方案沒有任何問題;有時妥協是完成任務的唯一方法)。
我希望這會有所幫助。
這並不像我這樣一個問題的答案。Kohsuke Kawaguchi的觀點可以說服你或者說服不了你,但是通過向Stack Overflow的隨機讀者詢問他的意思,你期望獲得什麼? –
@ C.M.Sperberg-McQueen不問他的意思。問:1.應該真的需要避免complexType? 2.如果是這樣,爲什麼?它有一個固有的問題嗎? 3.如果它有問題,爲什麼它首先存在於語言結構中?謝謝。 – Withheld