專利名稱:文檔標(biāo)記方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及內(nèi)容框架、文檔格式以及可以利用這兩者的相關(guān)方法和系統(tǒng)。
背景技術(shù):
當(dāng)今,通常有多種不同類型的內(nèi)容框架來表示內(nèi)容,且有多種不同類型的文檔格式來格式化各種類型的文檔。這些框架和格式中的每一種往往需要其自己的相關(guān)聯(lián)軟件來構(gòu)建、產(chǎn)生、處理或消耗相關(guān)聯(lián)的文檔。對(duì)于在適當(dāng)?shù)脑O(shè)備上安裝了特定的相關(guān)聯(lián)軟件的那些人而言,構(gòu)建、產(chǎn)生、處理或消耗相關(guān)聯(lián)文檔并不是很大的問題。對(duì)于沒有適當(dāng)?shù)能浖哪切┤硕?,?gòu)建、產(chǎn)生、處理或消耗相關(guān)聯(lián)文檔通常是不可能的。
針對(duì)這一事件背景,考慮到文檔的產(chǎn)生和消耗,對(duì)普遍性有持續(xù)的需求。
發(fā)明概述描述了模塊化內(nèi)容框架和文檔格式方法與系統(tǒng)。所描述的框架和格式定義了一組用于排版、打包、分發(fā)和呈現(xiàn)以文檔為中心的內(nèi)容的構(gòu)件塊。這些構(gòu)件塊定義了使軟件和硬件系統(tǒng)能夠可靠且一致地生成、交換和顯示文檔的文檔格式的平臺(tái)無關(guān)框架。該框架和格式是以靈活且可擴(kuò)展方式來設(shè)計(jì)的。
除該通用框架和格式之外,使用該通用框架定義了一種稱為影響范圍包(reachpackage)格式的特定格式。影響范圍包格式是一種用于儲(chǔ)存分頁文檔的格式。影響范圍包的內(nèi)容可在各種各樣環(huán)境中以及跨各種各樣情形的設(shè)備和應(yīng)用程序之中以完全的保真度來顯示或打印。
附圖簡(jiǎn)述
圖1是根據(jù)一個(gè)實(shí)施例的示例性框架和格式的組件的框圖。
圖2是根據(jù)一個(gè)實(shí)施例的容納包括多個(gè)部件的文檔的示例性包的框圖。
圖3是示出根據(jù)一個(gè)實(shí)施例的產(chǎn)生包的示例性編寫器和讀取包的閱讀器的框圖。
圖4示出了將三個(gè)單獨(dú)的頁面綁定在一起的示例部件。
圖5是示出根據(jù)一個(gè)實(shí)施例的被安排成產(chǎn)生同時(shí)包含報(bào)表的英語表示和法語表示兩者的財(cái)務(wù)報(bào)表的示例性選擇器和序列的圖。
圖6示出了根據(jù)一個(gè)實(shí)施例的共同工作以交流包的編寫器和閱讀器的某些示例。
圖7示出了交錯(cuò)文檔的多個(gè)部件的示例。
圖8和9示出了將圖7所示的文檔的多個(gè)部件打包的不同示例。
圖10示出了根據(jù)一個(gè)實(shí)施例的示例性影響范圍包以及可構(gòu)成該包或在該包中找到的每一有效部件類型。
圖11示出了根據(jù)一個(gè)實(shí)施例的公共語言運(yùn)行庫概念到XML的示例性映射。
圖12示出了根據(jù)一個(gè)實(shí)施例的豎直和橫向字形度量。
圖13示出了根據(jù)一個(gè)實(shí)施例的一對(duì)一群集映射。
圖14示出了根據(jù)一個(gè)實(shí)施例的多對(duì)一群集映射。
圖15示出了根據(jù)一個(gè)實(shí)施例的一對(duì)多群集映射。
圖16示出了根據(jù)一個(gè)實(shí)施例的多對(duì)多群集映射。
較佳實(shí)施例的詳細(xì)描述綜述本發(fā)明描述了一種模塊化內(nèi)容框架和文檔格式。該框架和格式定義了一組用于排版、打包、分發(fā)和呈現(xiàn)以文檔為中心的內(nèi)容的構(gòu)件塊。這些構(gòu)件塊定義了一種使軟件和硬件系統(tǒng)能夠可靠并一致地生成、交換和顯示文檔的文檔格式的平臺(tái)無關(guān)框架。該框架和格式是以靈活且可擴(kuò)展的方式來設(shè)計(jì)的。在各實(shí)施例中,對(duì)可包括的內(nèi)容類型、如何呈現(xiàn)內(nèi)容或構(gòu)建用于處理內(nèi)容的客戶端的平臺(tái)沒有任何限制。
除這一通用框架之外,還使用該通用框架定義了一種特定格式。該格式在本發(fā)明中被稱為影響范圍包(reach package)格式,并且是用于儲(chǔ)存分頁或預(yù)分頁文檔的格式。影響范圍包的內(nèi)容可以在各種各樣環(huán)境中以及跨各種各樣情形的設(shè)備和應(yīng)用程序之中用完全的保真度來顯示或打印。
下文描述的框架的目標(biāo)之一是確保獨(dú)立編寫的軟件和硬件系統(tǒng)在讀取或?qū)懭敫鶕?jù)下文描述的框架和格式產(chǎn)生的內(nèi)容時(shí)的互操作性。為實(shí)現(xiàn)這一互操作性,所描述的格式定義了讀取或?qū)懭雰?nèi)容的系統(tǒng)必須滿足的形式要求。
下文的討論是沿以下線條來組織的,并在兩個(gè)主要章節(jié)中提出-一個(gè)名為“框架”,另一個(gè)名為“影響范圍包格式”。
名為“框架”的一節(jié)提出了一種說明性的打包模型,并描述了構(gòu)成框架包的各個(gè)部件和關(guān)系。討論了關(guān)于使用框架包中的描述性元數(shù)據(jù)的信息,以及映射到物理容器、擴(kuò)展框架標(biāo)記的過程,以及對(duì)框架版本化機(jī)制的使用。
名為“影響范圍包格式”的一節(jié)研究了被稱為影響范圍包的一種特定類型的框架構(gòu)建包的結(jié)構(gòu)。該節(jié)也描述了對(duì)固定的有效載荷專用的包部件,并定義了一種影響范圍包標(biāo)記模型和繪制模型。本節(jié)以示例性影響范圍標(biāo)記元素及其屬性(propery)連同所示的樣例一起結(jié)束。
作為以下討論的高級(jí)綜述,考慮圖1,它概括地在100處示出了本發(fā)明的框架和格式的各方面。框架的某些示例性組件在102處示出,而影響范圍包格式的某些組件在104處示出。
框架102包括示例性組件,這些組件包括但不限于,關(guān)系組件、可插容器組件、交錯(cuò)/流組件以及版本化/可擴(kuò)充性組件,其每一個(gè)都在下文中更詳細(xì)地研究。影響范圍包格式104包括組件,這些組件包括選擇器/定序器組件以及包標(biāo)記定義組件。
在以下討論中,將周期性地回頭參考圖1,使得讀者可以維持關(guān)于所描述的組件在何處適合框架和包格式的觀點(diǎn)。
框架在以下討論中,提供了對(duì)通用框架的描述。各個(gè)初級(jí)小標(biāo)題包括“包模型”、“排版部件選擇器和序列”、“描述性元數(shù)據(jù)”、“物理模型”、“物理映射”、以及“版本化和可擴(kuò)充性”。每一初級(jí)小標(biāo)題具有一個(gè)或多個(gè)相關(guān)小標(biāo)題。
包模型本節(jié)描述了包模型,并包括描述包和部件、驅(qū)動(dòng)程序、關(guān)系、包關(guān)系和起始部件的小標(biāo)題。
包和部件在所示和描述的模型中,內(nèi)容被容納在包內(nèi)。包(package)是容納相關(guān)部件(part)的集合的邏輯實(shí)體。包的目的是將文檔的所有片段(或其它類型的內(nèi)容)收集到程序員和最終用戶易于操作的一個(gè)對(duì)象中。例如,考慮圖2,示出了容納包括若干部件的文檔的示例性包200,部件包括表示文檔的XML標(biāo)記部件202、描述文檔中使用的字體的字體部件204、描述文檔的頁面的多個(gè)頁面部件206、以及表示文檔內(nèi)的圖片的圖片部件。表示文檔的XML標(biāo)記部件202在它可準(zhǔn)許容易的可搜索性和參考,而無需對(duì)包的整個(gè)內(nèi)容進(jìn)行語法分析方面是有利的。這將在下文變得顯而易見。
貫穿本發(fā)明,引入并討論了閱讀器(也稱為消費(fèi)器)和編寫器(也稱為生產(chǎn)器)的概念。本發(fā)明中使用的術(shù)語閱讀器指的是讀取基于模塊化內(nèi)容格式的文件或包的實(shí)體。本發(fā)明中使用的術(shù)語編寫器指的是寫入基于模塊化內(nèi)容格式的文件或包的實(shí)體。作為一個(gè)示例,考慮圖3,示出了產(chǎn)生包的編寫器和讀取包的閱讀器。通常,編寫器和閱讀器被具體化為軟件。在至少一個(gè)實(shí)施例中,與創(chuàng)建和格式化包相關(guān)聯(lián)的大多數(shù)處理開銷和復(fù)雜性被施加于編寫器上。這進(jìn)而從閱讀器中消除了大多數(shù)處理復(fù)雜性和開銷,如本領(lǐng)域的技術(shù)人員所理解的,這是偏離許多現(xiàn)有模型的。這一方面將在下文中變得顯而易見。
根據(jù)至少一個(gè)實(shí)施例,單個(gè)包包含容納在包內(nèi)的內(nèi)容的一個(gè)或多個(gè)表示。通常,包是單個(gè)文件,在本申請(qǐng)中被稱為容器。這給予最終用戶例如一種以文檔的所有組成片段(圖像、字體、數(shù)據(jù)等)來分發(fā)其文檔的便利方法。盡管包通常直接對(duì)應(yīng)于單個(gè)文件,然而不必要總是如此。包是可以用各種方式來物理地表示的邏輯實(shí)體(例如,但不限于,以單個(gè)文件、松散文件的集合、以數(shù)據(jù)庫、通過網(wǎng)絡(luò)連接的短暫傳輸?shù)鹊?。由此,容器容納包,但是并非所有的包都儲(chǔ)存在容器內(nèi)。
抽象模型獨(dú)立于任何物理存儲(chǔ)機(jī)制來描述包。例如,抽象模型并不涉及“文件”、“流”或與包所處的物理領(lǐng)域有關(guān)的其它物理術(shù)語。如下文所討論的,抽象模型允許用戶為各種物理格式、通信協(xié)議等創(chuàng)建驅(qū)動(dòng)程序。用類推的方法,當(dāng)應(yīng)用程序希望打印圖像時(shí),它使用打印機(jī)的抽象(由理解特定種類的打印機(jī)的驅(qū)動(dòng)程序呈現(xiàn))。由此,不要求應(yīng)用程序知道特定的打印設(shè)備或如何與打印設(shè)備通信。
容器提供了除松散、斷開的文件集合之外的許多好處。例如,類似的組件可以被聚積,并且內(nèi)容可以被索引和壓縮。另外,組件之間的關(guān)系可以被標(biāo)識(shí),并且權(quán)限管理、數(shù)字簽名、加密和元數(shù)據(jù)可以被應(yīng)用于各組件。當(dāng)然,容器可用于并具體化上文未具體列出的其它特征。
公共部件屬性在所示并描述的實(shí)施例中,部件包括公共屬性(如,名稱)和字節(jié)流。這類似于文件系統(tǒng)中的文件或HTTP服務(wù)器上的資源。除其內(nèi)容之外,每一部件具有某些公共部件屬性(common part property)。這包括名稱(name)-它是部件的名稱,以及內(nèi)容類型(contenttype)-它是儲(chǔ)存在部件中的內(nèi)容的類型。部件也可以具有一個(gè)或多個(gè)相關(guān)聯(lián)的關(guān)系,如下文所討論的。
部件名(part name)是在必須在某些方面涉及到部件的任何時(shí)刻使用的。在所示和描述的實(shí)施例中,名稱被組織成分層結(jié)構(gòu),這類似于文件系統(tǒng)中的路徑或URI中的路徑。以下是部件名的示例/document.xml/tickets/ticket.xml/images/march/summer.jpeg/pages/page4.xml如從以上可以見到的,在這一實(shí)施例中,部件名具有以下特征●部件名類似于傳統(tǒng)文件系統(tǒng)中的文件名。
●部件名以正斜杠(“/”)開始。
●與文件系統(tǒng)中的路徑或URI中的路徑一樣,部件名可以按照一組類似目錄的名稱(在以上示例中,為tickets、images/march和pages)被組織成分層結(jié)構(gòu)。
●該分層結(jié)構(gòu)包括由正斜杠定界的段。
●名稱的最后一段類似于傳統(tǒng)文件系統(tǒng)中的文件名。
重要的是注意,用于命名部件的規(guī)則,尤其是可用于部件名的有效字符,對(duì)本發(fā)明中描述的框架是專用的。這些部件名規(guī)則基于互聯(lián)網(wǎng)標(biāo)準(zhǔn)的URI命名規(guī)則。根據(jù)本實(shí)施例,本實(shí)施例中用于指定部件名的語法完全與RFC 2396,UniformResource Identifiers(URIGeneric Syntax)(統(tǒng)一資源標(biāo)識(shí)符(URI通用句法))規(guī)范的節(jié)3.3(Path Component(路徑分量))5(Relative URI References(相關(guān)URI引用))中定義的abs_path句法相匹配。
以下附加約束作為有效的部件名應(yīng)用于abs_path●如節(jié)3(URI Syntactic Components(URI句法分量))和3.4(QueryComponent(查詢分量))中定義的查詢分量不適用于部件名。
●如節(jié)4.1(Fragment Identifier(段標(biāo)識(shí)符))中描述的段標(biāo)識(shí)符不適用于部件名。
●任何部件具有通過向現(xiàn)有部件的部件名追加*(“/”segment)來創(chuàng)建的名稱是不合法的。
部件名的語法如下示出part_name =″/″segment*(″/″segment)segment =*pcharpchar=unreserved|escaped|″:″|″@″|″&″|″=″|″+″|″$″|″,″unreserved=alphanum|markescaped =″%″hex hexhex =digit|″A″|″B″|″C″|″D″|″E″|″F″|″a″|″b″|″c″|″d″|″e(cuò)″|″f″mark =″-″|″_″|″·″|″!″|″~″|″*″|″′″|″(″|″)″alpha =lowalpha|upalphalowalpha =″a″|″b″|″c″|″d″|″e(cuò)″|″f″|″g″|″h″|″i″|″j″|″k″|″l″|″m″|″n″|″o″|″p″|″q″|″r″|″s″|″t″|″u″|″v″|″w″|″x″|″y″|″z″upalpha=″A″|″B″|″C″|″D″|″E″|″F″|″G″|″H″|″I″|″J″|″K″|″L″|″M″|″N″|″O″|″p″|″Q″|″R″|″S″|″T″|″U″|″V″|″W″|″X″|″Y″|″Z″digit=″0″|″1″|″2″|″3″|″4″|″5″|″6″|″7″|″8″|″9″alphanum =alpha | digit可以看到包中所有部件的名稱的段形成了樹。這類似于文件系統(tǒng)中所發(fā)生的,其中,樹中的所有非葉節(jié)點(diǎn)是文件夾,而葉節(jié)點(diǎn)是包含內(nèi)容的實(shí)際文件。名稱樹中這些類似文件夾的節(jié)點(diǎn)(即,非葉節(jié)點(diǎn))提供組織包中的部件的類似功能。然而,重要的是記住,這些“文件夾”僅作為命名分層結(jié)構(gòu)中的概念而存在-它們沒有持久格式的其它表現(xiàn)。部件名不能在“文件夾”級(jí)存活。具體地,部件命名分層結(jié)構(gòu)中的非葉節(jié)點(diǎn)(“文件夾”)不能包含具有相同名稱的部件和子文件夾。
在所示并描述的實(shí)施例中,每一部件具有內(nèi)容類型(content type),它標(biāo)識(shí)了什么類型的內(nèi)容儲(chǔ)存在部件中。內(nèi)容類型的示例包括image/jpegtext/xmltext/plain;charset=″us-ascii″內(nèi)容類型在RFC 2045(Multipurpose Intemet Mail Extensions(多用途互聯(lián)網(wǎng)郵件擴(kuò)展);(MIME))中定義的所示框架中使用。具體地,每一內(nèi)容類型包括媒體類型(例如,text(文本))、子類型(例如,plain(純文本))以及關(guān)鍵字=值形式的可任選參數(shù)集(例如,charset=″us-ascii″);多個(gè)參數(shù)由分號(hào)分隔。
部件定址通常部件包含對(duì)其它部件的引用。作為一個(gè)簡(jiǎn)單的示例,想象具有兩個(gè)部件的容器標(biāo)記文件和圖像。標(biāo)記文件希望容納對(duì)圖像的引用,使得當(dāng)處理標(biāo)記文件時(shí),可標(biāo)識(shí)和定位相關(guān)聯(lián)的圖像。內(nèi)容類型和XML模式的設(shè)計(jì)者可使用URI來表示這些引用。為使其成為可能,需要定義部件名的領(lǐng)域和URI領(lǐng)域之間的映射。
為允許在包內(nèi)使用URI,當(dāng)評(píng)估基于包的內(nèi)容中的URI時(shí),必須使用特殊的URI解釋規(guī)則包本身應(yīng)當(dāng)作為URI引用的“授權(quán)機(jī)構(gòu)”來處理,而URI的路徑分量用于導(dǎo)航包內(nèi)的部件名分層結(jié)構(gòu)。
例如,給定包URI http://www.example.com/foo/something.package,將對(duì)/abc/bar.xml的引用解釋為意味著稱為/abc/bar.xml的部件,而非URIhttp://www.example.com/abc/bar.xml。
當(dāng)必須具有從容器中的一個(gè)部件到另一個(gè)部件的引用時(shí),應(yīng)當(dāng)使用相對(duì)URI。使用相對(duì)引用允許將容器的內(nèi)容一起移到不同的容器(或移到來自例如文件系統(tǒng)的容器),而不修改部件間的引用。
來自部件的相對(duì)引用相對(duì)于包含該引用的部件的“基礎(chǔ)URI”來解釋。默認(rèn)地,部件的基礎(chǔ)URI是該部件的名稱。
考慮包括具有以下名稱的部件的容器/markup/page.xml/image/picture.jpeg/images/other_picture.jpeg如果“/markup/page.xml”部件包含對(duì)“../images/picture.jpeg”的URI引用,則根據(jù)上述規(guī)則,該引用必須被解釋為涉及部件名“/images/picture.jpeg”。
某些內(nèi)容類型提供了通過指定內(nèi)容中的不同基礎(chǔ)來覆蓋默認(rèn)基礎(chǔ)URI的方法。當(dāng)存在這些覆蓋之一時(shí),應(yīng)當(dāng)使用明確指定的基礎(chǔ)URI而非默認(rèn)的基礎(chǔ)URI。
有時(shí)候,對(duì)部件中的一部分或一特定點(diǎn)進(jìn)行“定址”是有用的。在URI領(lǐng)域中,使用了段標(biāo)識(shí)符[見例如RFC2396]。在容器中,該機(jī)制以同樣的方式工作。具體地,段是包含定址的部分的內(nèi)容類型的上下文中理解的額外信息的串。例如,在視頻文件中,段可標(biāo)識(shí)幀,在XML文件中,它可通過xpath標(biāo)識(shí)XML文件的一部分。
段標(biāo)識(shí)符結(jié)合對(duì)部件定址的URI一起使用,來標(biāo)識(shí)定址的部件的段。段標(biāo)識(shí)符是可任選的,并且用交叉線(“#”)字符與URI分離。由此,它不是URI的一部分,但是通常結(jié)合URI一起使用。
以下描述提供了部件命名的某些指導(dǎo),因?yàn)榘筒考P褪窍喈?dāng)靈活的。該靈活性允許框架包的各種各樣應(yīng)用。然而,重要的是認(rèn)識(shí)到,框架被設(shè)計(jì)成允許其中多個(gè)不相關(guān)軟件系統(tǒng)可操作“其自己的”包部件而不會(huì)彼此抵觸的情形。為允許這一情形,提供了某些方針,如果遵循這些方針,這種情形將成為可能。
此處給出的方針描述了用于最小化或至少減少部件命名沖突的出現(xiàn),并在沖突的確出現(xiàn)時(shí)處理它們的機(jī)制。創(chuàng)建包內(nèi)的部件的編寫器必須采取措施來檢測(cè)并處理與包中現(xiàn)有部件的命名沖突。在發(fā)生命名沖突的情況下,編寫器可能無法盲目地替換現(xiàn)有部件。
在保證包由單個(gè)編寫器操縱的情況下,該編寫器可背離這些方針。然而,如果有多個(gè)獨(dú)立的編寫器共享一個(gè)包的可能性,則所有的編寫器必須遵循這些方針。然而,推薦的是所有的編寫器在任何情況下都遵循這些方針。
●要求將部件添加到現(xiàn)有容器的編寫器在命名分層結(jié)構(gòu)的新“文件夾”中這樣做,而非直接將部件置于根或預(yù)先存在的文件夾中。以此方式,名稱沖突的可能性被限于部件名的第一段。在該新文件夾內(nèi)創(chuàng)建的部件可以在沒有與現(xiàn)有部件沖突的風(fēng)險(xiǎn)的情況下來命名。
●在文件夾的“較佳”名稱已經(jīng)被現(xiàn)有部件使用的情況下,編寫器必須采用某一策略來選擇替換的文件夾名稱。編寫器應(yīng)當(dāng)使用向較佳名稱追加數(shù)字直到找到可用文件夾名的策略(可能在幾次不成功迭代之后采取GUID)。
●這一策略的一個(gè)結(jié)果是閱讀器不許試圖通過“魔法”或“公知”的部件名來定位部件。相反,編寫器必須創(chuàng)建與它們所創(chuàng)建的每一文件夾中的至少一個(gè)部件的包關(guān)系。閱讀器必須使用這些包關(guān)系來定位部件而非依賴于公知的名稱。
●一旦閱讀器找到了文件夾中的至少一個(gè)部件(通過上述包關(guān)系之一),則它可使用關(guān)于該文件夾內(nèi)的公知部件名的約定來找到其它部件。
驅(qū)動(dòng)程序此處描述的文件格式可以由不同的應(yīng)用程序、不同的文檔類型等來使用-它們中的許多具有沖突的用途、沖突的格式等等。使用一個(gè)或多個(gè)驅(qū)動(dòng)程序(driver)來解決各種沖突,例如文件格式中的差異、通信協(xié)議中的差異等等。例如,不同的文件格式包括松散文件和復(fù)合文件,而不同的通信協(xié)議包括http、網(wǎng)絡(luò)和無線協(xié)議。一組驅(qū)動(dòng)程序?qū)⒏鞣N文件格式和通信協(xié)議抽象成單個(gè)模型??蓪?duì)不同的情形、不同的消費(fèi)者要求、不同的物理配置等提供多個(gè)驅(qū)動(dòng)程序。
關(guān)系包中的部件可包含對(duì)該包中的其它部件的引用。然而,一般而言,這些引用以對(duì)該部件的內(nèi)容類型專用的方式在引用部件內(nèi)表示;即,以任意的標(biāo)記或應(yīng)用程序?qū)S镁幋a來表示。這有效地隱藏了來自不理解包含這些引用的部件的內(nèi)容類型的閱讀器的部件之間的內(nèi)部鏈接。
即使對(duì)于公共內(nèi)容類型(如影響范圍包一節(jié)中描述的固定有效載荷標(biāo)記),閱讀器需要對(duì)部件中的所有內(nèi)容進(jìn)行語法分析,以發(fā)現(xiàn)并解析對(duì)其它部件的引用。例如,當(dāng)實(shí)現(xiàn)一次一頁打印文檔的打印系統(tǒng)時(shí),可能期望標(biāo)識(shí)包含在特定頁面中的圖片和字體?,F(xiàn)有的系統(tǒng)必須對(duì)每一頁的所有信息進(jìn)行語法分析,這是耗時(shí)的,而且必須理解每一頁的語言,這可能不是某些設(shè)備或閱讀器的情況(例如,當(dāng)在去設(shè)備的途中通過處理器管線時(shí)在文檔上執(zhí)行中間處理的設(shè)備或閱讀器)。相反,此處描述的系統(tǒng)和方法使用了關(guān)系來標(biāo)識(shí)部件之間的關(guān)系,并描述那些關(guān)系的特性(attribute)。關(guān)系語言是簡(jiǎn)單的,并被定義一次,使得閱讀器可以理解關(guān)系,而無需多個(gè)不同語言的知識(shí)。在一個(gè)實(shí)施例中,關(guān)系以XML表示為個(gè)別的部件。每一部件具有相關(guān)聯(lián)的關(guān)系部件,它包含該部件是源的關(guān)系。
例如,電子表格應(yīng)用程序使用這一格式并將不同的電子表格儲(chǔ)存為部件。完全不知道電子表格語言的應(yīng)用程序仍能夠發(fā)現(xiàn)與電子表格相關(guān)聯(lián)的各種關(guān)系。例如,應(yīng)用程序可發(fā)現(xiàn)電子表格中的圖像以及與電子表格相關(guān)聯(lián)的元數(shù)據(jù)。提供一個(gè)示例關(guān)系模式如下<?xml version=″1.0″?>
<xsd:schema xmlns:mmcfrels=″http://mmcfrels-PLACEHOLDER″xmlns:xsd=″http://www.w3.org/2001/XMLSchema″>
<xsd:attribute name=″Target″type=″xsd:string″/>
<xsd:attribute name=″Name″type=″xsd:string″/>
<xsd:element name=″Relationships″>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref=″Relationship″minOccurs=″0″maxOccurs=″unbounded″/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=″Relationship″>
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base=″xsd:string″>
<xsd:attribute ref=″Target″/>
<xsd:attribute ref=″Name″/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>
該模式定義了兩個(gè)XML元素,一個(gè)被稱為“relationships”,另一個(gè)被稱為“relationship”?!皉elationship”元素用于描述此處所描述的單個(gè)關(guān)系,并且具有以下特性(1)“target”,它指示了源部件要關(guān)系到的部件,(2)“name”,它指示了關(guān)系的類型或特性。定義了“relationships”元素以允許它容納零個(gè)或多個(gè)“relationship”元素,并僅用于將這些“relationship”元素搜集在一起成一個(gè)單元。
此處所描述的系統(tǒng)和方法引入了更高級(jí)的機(jī)制,以解決稱為“關(guān)系”的問題。關(guān)系提供了表示包中的源部件和目標(biāo)部件之間的連接種類的另外的方法。關(guān)系令部件之間的連接可以被直接“發(fā)現(xiàn)”,而不需要查看部件中的內(nèi)容,因此,它們獨(dú)立于內(nèi)容專用模式,并且能夠更快地被解析。另外,這些關(guān)系是協(xié)議無關(guān)的。各種不同的關(guān)系可以與特定的部件相關(guān)聯(lián)。
關(guān)系提供了第二個(gè)重要的功能允許部件相關(guān)而不需要修改它們。有時(shí)候,這一信息擔(dān)當(dāng)“注釋”的形式,其中,“注釋的”部件的內(nèi)容類型不定義附加給定信息的方法??赡艿氖纠ǜ郊拥拿枋鲂栽獢?shù)據(jù)、打印票據(jù)和真實(shí)注釋。最后,某些情況要求信息被特別地附加到現(xiàn)有的部件而不修改該部件-例如,當(dāng)部件被加密并且不能被解密,或者當(dāng)部件被數(shù)字地簽署并且改變它將使簽名無效時(shí)。在另一示例中,用戶可能希望將注釋附加到JPEG圖像文件。JPEG圖像格式當(dāng)前不提供對(duì)標(biāo)識(shí)注釋的支持。改變JPEG格式以適應(yīng)這一用戶需求是不實(shí)際的。然而,此處討論的系統(tǒng)和方法允許用戶向JPEG文件提供注釋而不修改JPEG圖像格式。
在一個(gè)實(shí)施例中,使用關(guān)系部件中的XML來表示關(guān)系。容器中作為一個(gè)或多個(gè)關(guān)系的源的每一部件具有相關(guān)聯(lián)的關(guān)系部件。該關(guān)系部件容納(使用內(nèi)容類型application/PLACEHOLDER(應(yīng)用程序/占位符)以XML表達(dá))用于該源部件的關(guān)系列表。
以下圖4示出了環(huán)境400,其中“脊骨(spine)”部件402(類似于固定面板)將三個(gè)頁面406、408和410綁定在一起。由脊骨綁定在一起的該組頁面具有相關(guān)聯(lián)的“打印票據(jù)”404。另外,頁面2具有其自己的打印票據(jù)412。從脊骨部件402到其打印票據(jù)404的連接以及從頁面2到其打印票據(jù)412的連接使用關(guān)系來表示。在圖4的排列中,脊骨部件402具有相關(guān)聯(lián)的關(guān)系部件,它包含將脊骨連接到票據(jù)1的關(guān)系,如以下示例中所示。
<Relationships xmlns=”http://mmcfrels-PLACEHOLDER”>
<RelationshipTarget=”../tickets/ticketl.xml”Name=”http://mmcf-printing-ticket/PLACEHOLDER”/>
</Relationships>
關(guān)系使用單個(gè)<Relationships>元素中嵌套的<Relationship>元素來表示。這些元素在http://mmcfrels(PLACEHOLDER)名稱空間中定義。見以上示例模式,以及以下對(duì)示例關(guān)系的相關(guān)討論。relationship元素具有以下附加特性
Name(名稱)特性不必要是實(shí)際的地址。不同類型的關(guān)系按其名稱來標(biāo)識(shí)。這些名稱以對(duì)XML名稱空間定義名稱空間的同一方式來定義。具體地,通過使用模仿因特網(wǎng)域名空間的名稱,非協(xié)調(diào)方可安全地創(chuàng)建不沖突的關(guān)系名稱-正如它們可以對(duì)XML名稱空間所做的一樣。
不允許關(guān)系部件參與其它關(guān)系。然而,在所有其它意義上它是第一類部件(例如,它是URI可定址的、它可以被打開、讀取、刪除等等)。關(guān)系通常不指向包外部的事物。用于標(biāo)識(shí)關(guān)系目標(biāo)的URI一般不包括URI模式。
部件及其相關(guān)聯(lián)的關(guān)系部件通過命名約定來連接。在這一示例中,脊骨的關(guān)系部件將儲(chǔ)存在/content/_rels/spine.xml.rels中,而頁面2的關(guān)系將儲(chǔ)存在/content/_rels/p2.xml.rels中。注意,此處使用了兩個(gè)特殊的命名約定。首先,名稱分層結(jié)構(gòu)中給定“文件夾”中的某些(其它)部件的關(guān)系部件儲(chǔ)存在稱為_rels的“子文件夾”中(以標(biāo)識(shí)關(guān)系)。其次,這一關(guān)系容納部件的名稱通過向原始部件的名稱追加.rels擴(kuò)展名來形成。在特定的實(shí)施例中,關(guān)系部件是內(nèi)容類型application/xml+relationshipsPLACEHOLDER(應(yīng)用程序/xml+關(guān)系占位符)。
關(guān)系表示兩個(gè)部件之間的有向連接。由于表示關(guān)系的方式,從其源部件開始遍歷關(guān)系是有效的(因?yàn)檎页鋈魏谓o定部件的關(guān)系部件是無足輕重的)。然而,從關(guān)系的目標(biāo)開始反向遍歷關(guān)系不是有效的(因?yàn)檎页鰧?duì)部件的所有關(guān)系的方法是徹底檢查容器中的所有關(guān)系)。
為使關(guān)系的反向遍歷成為可能,使用了一種新關(guān)系來表示其它(可遍歷)方向。這是關(guān)系類型的設(shè)計(jì)者可以使用的一種建模技術(shù)。繼續(xù)以上示例,如果重要的是能夠找出附加了票據(jù)1的脊骨,則將使用從票據(jù)連接到脊骨的第二關(guān)系,如在content/_rels/pl.xml.rels中<Relationships xmlns=”http://mmcfrels-PLACEHOLDER”>
<RelationshipTarget=”/content/spine.xml”Name=”http://mmcf-printing-spine/PLACEHOLDER”/>
</Relationships>
包關(guān)系“包關(guān)系”用于找出包中公知的部件。該方法避免了依賴于用于找出包中的部件的命名約定,并確保了在不同有效載荷中的相同部件名之間沒有沖突。
包關(guān)系是一種特殊的關(guān)系,其目標(biāo)是部件,而其源不是部件源是整個(gè)包。具有“公知”的部件實(shí)際上是具有有助于找出該部件的“公知”關(guān)系名稱。這能夠起作用是因?yàn)橛卸x明確的機(jī)制以允許由非協(xié)調(diào)方來命名關(guān)系,而某些實(shí)施例不包含這樣的部件名機(jī)制-那些實(shí)施例被限于一組方針。包關(guān)系在包關(guān)系部件中找到,并且使用關(guān)系部件的標(biāo)準(zhǔn)命名約定來命名。由此,它被命名為“/_rels/.rels”。
該包關(guān)系部件中的關(guān)系在找出公知部件時(shí)是有用的。
起始部件包級(jí)的公知部件的一個(gè)示例是包“起始”部件。這是通常在打開包時(shí)處理的部件。它表示儲(chǔ)存在包內(nèi)的文檔內(nèi)容的邏輯根。包的起始部件通過遵循公知包關(guān)系來定位。在一個(gè)示例中,該關(guān)系具有以下名稱http://mmcf-start-part-PLACEHOLDER。
排版部件選擇器和序列所描述的框架定義了用于從部件構(gòu)建更高階結(jié)構(gòu)的兩種機(jī)制選擇器和序列。
選擇器是在多個(gè)其它部件之間“選擇”的部件。例如,選擇器部件可以在表示文檔的英語版本的部件和表示文檔的法語版本的部件之間“選擇”。序列是對(duì)多個(gè)其它部件“定序”的部件。例如,序列部件可以組合兩個(gè)部件(成一個(gè)線性序列),其中一個(gè)表示五頁文檔,而另一個(gè)表示十頁文檔。
這兩種類型的排版部件(composition parts)(序列和選擇器)以及用于組裝它們的規(guī)則構(gòu)成了排版模型(composition model)。排版部件可對(duì)其它排版部件進(jìn)行排版,因此例如,可具有在兩種排版之間進(jìn)行選擇的選擇器。作為一個(gè)示例,考慮圖5,它示出了包含英語表示和法語表示的財(cái)務(wù)報(bào)表的一個(gè)示例。這些表示中的每一個(gè)進(jìn)一步由介紹(封面)以及其后的財(cái)務(wù)(電子表格)組成。在這一示例中,選擇器500在報(bào)表的英語和法語表示之間進(jìn)行選擇。如果選擇了英語表示,則序列502將英語介紹部件506與英語財(cái)務(wù)部件508定序在一起?;蛘撸绻x擇了法語部分,則序列504將法語介紹部件510與法語財(cái)務(wù)部件512定序在一起。
排版部件XML在所示并描述的實(shí)施例中,排版部件是使用少數(shù)XML元素來描述的,它們都取自公共的排版名稱空間。作為一個(gè)示例,考慮以下元素<selection>
特性無允許的子元素<item>
元素<sequence>
特性無允許的子元素<item>
元素<item>
特性Target-排版中的部件的部件名作為一個(gè)示例,以下是上文圖5的示例的XMLMainDocument. XML<selection>
<item target =”EnglishRollup.xml”/>
<item target=”FrenchRollup.xml”/>
</selection>
EnglishRollup.XML<sequence>
<item target=”Englishlntroduction.xml”/>
<item target=”EnglishFinancials.xml”/>
</sequence>
FrenchRollup.XML<sequence>
<item target=”FrenchIntroduction.xml”>
<item target=”FrenchFinancials.xml”>
</sequence>
在這一XML中,MainDocument.xml表示包中的整個(gè)部件,并且根據(jù)“selection”標(biāo)簽,指示了要在由“item”標(biāo)簽封裝的不同項(xiàng),即“EnglishRollup.xml”和“FrenchRollup.xml”之間作出選擇。
根據(jù)“sequence”標(biāo)簽,EnglishRollup.xml和FrenchRollup.xml是將由其各自的“item”標(biāo)簽封裝的各個(gè)項(xiàng)定序在一起的序列。
由此,提供了簡(jiǎn)單的XML語法來描述選擇器和序列。這一排版塊中的每一部件被構(gòu)建,并執(zhí)行一個(gè)操作-選擇或定序。通過使用部件的分層結(jié)構(gòu),可構(gòu)建選擇和序列的不同的健壯集合。
排版塊包的排版塊包括可從包的起始部件影響范圍的所有排版部件(選擇器或序列)的集合。如果包的起始部件既非選擇器又非序列,則認(rèn)為該排版塊為空。如果起始部件是排版部件,則遞歸地遍歷那些排版部件中的子<item>,以產(chǎn)生排版部件的有向非循環(huán)圖(當(dāng)遇到非排版部件時(shí)停止遍歷)。該圖是排版塊(根據(jù)本實(shí)施例,它必須是非循環(huán)的,以使包有效)。
確定排版語義建立了上述相對(duì)直接的XML語法之后,以下討論描述了表示信息使得可基于內(nèi)容類型作出選擇的方法。即,上述XML提供了足夠的信息,以允許閱讀器定位被組裝成一種排版的部件,但是未提供足夠的信息來幫助閱讀器知道關(guān)于排版的特性的更多信息。例如,給定對(duì)兩個(gè)部件進(jìn)行排版的選擇,閱讀器如何知道基于什么基準(zhǔn)(例如,語言、紙張大小等)來作出選擇?答復(fù)是這些規(guī)則與排版部件的內(nèi)容類型相關(guān)聯(lián)。由此,用于基于語言在表示之間進(jìn)行選取的選擇器部件具有與基于紙張大小在表示之間進(jìn)行選取的選擇器部件不同的相關(guān)聯(lián)的內(nèi)容類型。
通用框架為這些內(nèi)容類型定義了通用形式Application/XML+Selector-SOMETHING(應(yīng)用程序/XML+選擇器-某一事物)Application/XML+Sequence-SOMETHING(應(yīng)用程序/XML+序列-某一事物)這些內(nèi)容類型中的SOMETHING由指示選擇或序列的特性的詞來替換,例如,頁面大小、顏色、語言、閱讀器設(shè)備上的常駐軟件等等。因此,在此框架中,可發(fā)明各種各類的選擇器和序列,并且每一個(gè)可具有截然不同的語義。
所描述的框架也為所有閱讀器或閱讀設(shè)備必須理解的選擇器和序列定義了以下公知內(nèi)容類型。
作為一個(gè)示例,考慮如下。假定包包含具有頁面的文檔,并且在頁面的中間有要出現(xiàn)視頻的區(qū)域。在此示例中,頁面的視頻部件可包括Quicktime視頻形式的視頻。這一情形的一個(gè)問題是Quicktime視頻不是被普遍理解的。然而,假定根據(jù)本框架,尤其是下文描述的影響范圍包格式,存在被普遍理解的圖像格式-JPEG。當(dāng)產(chǎn)生包含上述文檔的包時(shí),除將視頻定義為包的部件之外,生產(chǎn)器還為頁面定義了JPEG圖像,并提出了一種SupportedContentType(支持的內(nèi)容類型)選擇器,使得如果用戶的計(jì)算機(jī)具有理解Quicktime視頻的軟件,則選擇Quicktime視頻,否則選擇JPEG圖像。
由此,如上所述,框架級(jí)選擇器和序列組件允許構(gòu)建健壯的分層結(jié)構(gòu),在此示例中,它是以XML定義的。另外,存在使用內(nèi)容類型來標(biāo)識(shí)選擇器和序列的行為的定義明確的方法。另外,根據(jù)一個(gè)實(shí)施例,該通用框架包括一個(gè)特定的內(nèi)容類型,它是預(yù)定義的,并允許基于消費(fèi)器(例如,閱讀器或閱讀設(shè)備)理解什么和不理解什么來處理和使用包。
其它排版部件內(nèi)容類型可使用類似的規(guī)則來定義,其示例在下文描述。
描述性元數(shù)據(jù)根據(jù)一個(gè)實(shí)施例,描述性元數(shù)據(jù)部件向包的編寫器或生產(chǎn)器提供儲(chǔ)存屬性值的方法,它使包的閱讀器能夠可靠地發(fā)現(xiàn)該值。這些屬性通常用于記錄關(guān)于整個(gè)包以及容器內(nèi)的個(gè)別部件的附加信息。例如,包內(nèi)的描述性元數(shù)據(jù)部件可容納諸如包的作者、關(guān)鍵字、概要等的信息。
在所示并描述的實(shí)施例中,描述性元數(shù)據(jù)以XML來表達(dá)、被儲(chǔ)存在公知內(nèi)容類型的部件中、并可使用公知關(guān)系類型來找到。
描述性元數(shù)據(jù)容納元數(shù)據(jù)屬性(metadata property)。元數(shù)據(jù)屬性由屬性名和一個(gè)或多個(gè)屬性值來表示。屬性值具有簡(jiǎn)單的數(shù)據(jù)類型,因此每一數(shù)據(jù)類型由單個(gè)XML qname來描述。描述性元數(shù)據(jù)屬性具有簡(jiǎn)單類型的這一事實(shí)并不意味著不能在包內(nèi)儲(chǔ)存復(fù)雜的XML類型的數(shù)據(jù)。在這一情況下,必須將信息作為完整的XML部件來儲(chǔ)存。當(dāng)完成時(shí),移除關(guān)于僅使用簡(jiǎn)單類型的所有約束,但是“平面”描述性元數(shù)據(jù)屬性模型的簡(jiǎn)單性丟失。
除用于定義屬性集的通用機(jī)制以外,有一種特定的、定義明確的、使用該機(jī)制儲(chǔ)存的文檔核心屬性(document core property)集。這些文檔核心屬性通常用于描述文檔,并包括如標(biāo)題、關(guān)鍵字、作者等的屬性。
最后,容納這些文檔核心屬性的元數(shù)據(jù)部件也可容納除文檔核心屬性之外的附加的、用戶定義的屬性。
元數(shù)據(jù)格式根據(jù)一個(gè)實(shí)施例明,描述性元數(shù)據(jù)部件具有內(nèi)容類型,并且根據(jù)以下規(guī)則用關(guān)系來定目標(biāo)
根據(jù)一個(gè)實(shí)施例,以下XML模式用于表示描述性元數(shù)據(jù)。關(guān)于標(biāo)記的每一分量的細(xì)節(jié)在樣例后的表格中給出。
<mcs:properties xmlns:mcs=″http://mmcf-core-services/PLACEHOLDER″xmlns:xsd=″http://www.w3.org/2001/XMLSchema″>
<mcs:property prns:name = ″property name″xmlns:prns=″property namespace″mcs:type=″datatype″mcs:multivalued=″true|false″>
<mcs:value>...value...</mcs:value>
</mcs:property>
</mcs:properties>
文檔核心屬性以下是包括屬性名、屬性類型和描述的文檔核心屬性的表格。
物理模型物理模型定義了編寫器和閱讀器使用包的各種方法。該模型基于三個(gè)組件編寫器(writer)、閱讀器(reader)以及它們之間的管道(pipe)。圖6示出了共同工作以交流包的編寫器和閱讀器的某些示例。
管道將數(shù)據(jù)從編寫器傳送到閱讀器。在許多情況下,管道可以僅包括閱讀器作出的從本地文件系統(tǒng)讀取包的API調(diào)用。這被稱為直接訪問。
然而,通常閱讀器和編寫器必須通過某一類型的協(xié)議彼此通信。例如,這一通信可跨進(jìn)程邊界或在服務(wù)器和臺(tái)式計(jì)算機(jī)之間發(fā)生。這被稱為聯(lián)網(wǎng)訪問(netwroked access),并且由于管道的通信特征(尤其是速度和請(qǐng)求等待時(shí)間),這是重要的。
為允許最大的性能,物理包設(shè)計(jì)必須考慮三個(gè)重要領(lǐng)域內(nèi)的支持訪問樣式(access style)、布局樣式(layout style)和通信樣式(communication style)。
訪問樣式流式消費(fèi)由于編寫器和閱讀器之間使用聯(lián)網(wǎng)訪問的通信不是瞬時(shí)的,因此重要的是允許包的漸進(jìn)創(chuàng)建和消費(fèi)。具體地,根據(jù)本實(shí)施例,推薦任何物理包格式被設(shè)計(jì)成允許閱讀器在包的所有比特通過管道傳送之前,當(dāng)它接收到數(shù)據(jù)(例如,部件)時(shí)開始解釋并處理該數(shù)據(jù)。這一能力被稱為流式消費(fèi)(streaming consumption)。
流式創(chuàng)建當(dāng)編寫器開始創(chuàng)建包時(shí),它并不總是知道它將會(huì)在包中放入什么。作為一個(gè)示例,當(dāng)應(yīng)用程序開始構(gòu)建打印假脫機(jī)文件包時(shí),它可能不知道有多少頁需要被放入包中。作為另一示例,服務(wù)器上動(dòng)態(tài)生成報(bào)表的程序可能無法認(rèn)識(shí)到該報(bào)表有多長(zhǎng),或者報(bào)表具有多少圖片-直到它完全生成了該報(bào)表。為允許這類編寫器,物理包應(yīng)當(dāng)允許編寫器在已經(jīng)添加了其它部件之后動(dòng)態(tài)地添加部件(例如,編寫器必須不被要求在開始編寫時(shí)預(yù)先規(guī)定它將創(chuàng)建多少部件)。另外,物理包應(yīng)當(dāng)允許編寫器在不知道該部件的最終長(zhǎng)度的情況下開始編寫部件的內(nèi)容。這些要求共同啟用了流式創(chuàng)建(streaming creation)。
同時(shí)創(chuàng)建和消費(fèi)在高度管線化的體系結(jié)構(gòu)中,流式創(chuàng)建和流式消費(fèi)可對(duì)特定的包同時(shí)發(fā)生。當(dāng)設(shè)計(jì)物理包時(shí),支持流式創(chuàng)建和支持流式消費(fèi)可能在相反的方向上擠壓設(shè)計(jì)。然而,找出支持兩者的設(shè)計(jì)常常是可能的。由于管線化體系結(jié)構(gòu)中的好處,推薦物理包支持同時(shí)創(chuàng)建和消費(fèi)(simultaneous creation and consumption)。
布局樣式物理包容納部件的集合。這些部件可以用以下兩種樣式之一來布局簡(jiǎn)單排序和交錯(cuò)。采用簡(jiǎn)單排序,包內(nèi)的部件用定義的排序來布局。當(dāng)以純線性方式傳送這樣的包時(shí),從包內(nèi)的第一字節(jié)開始直到最后一個(gè)字節(jié),第一部件的所有字節(jié)首先到達(dá),然后第二部件的所有字節(jié)到達(dá),依此類推。
采用交錯(cuò)布局,多個(gè)部件的字節(jié)是交錯(cuò)的,這在某些情況下允許改進(jìn)的性能。從交錯(cuò)中顯著獲益的兩個(gè)情況是多媒體回放(例如,同時(shí)傳送視頻和音頻)和內(nèi)聯(lián)資源引用(例如,標(biāo)記文件的中間對(duì)圖像的引用)。
交錯(cuò)通過用于組織交錯(cuò)部件的內(nèi)容的特殊約定來處理。通過將部件分割成片段并交錯(cuò)這些片段,可能達(dá)到期望的交錯(cuò)結(jié)果,同時(shí)仍可能容易地重建原始的較大部件。為理解交錯(cuò)是如何工作的,圖7示出了涉及以下兩個(gè)部件的簡(jiǎn)單示例content.xml 702和image.jpeg 704。第一部件content.xml描述了頁面的內(nèi)容,并且在該頁的中間是對(duì)應(yīng)當(dāng)出現(xiàn)在該頁面上的圖像(image.jpeg)的引用。
為理解交錯(cuò)為何是有價(jià)值的,考慮如何使用簡(jiǎn)單排序在包內(nèi)排列這些部件,如圖8所示。處理該包(并且順序地接收字節(jié))的閱讀器在接收到所有的content.xml部件以及image.jpeg之前將無法顯示圖片。在某些情況下(例如,小或簡(jiǎn)單的包,或快速通信鏈路)這可能不是問題。在其它情況下(例如,如果content.xml非常大或者通信鏈路非常慢),則需要讀完所有的content.xml部件來獲得圖像將導(dǎo)致不可接受的性能或?qū)﹂喿x器系統(tǒng)施加不合理的存儲(chǔ)器需求。
為更接近理想的性能,能夠分割content.xml部件并緊接著引用圖片之處將image.jpeg部件插入到中間將是較佳的。這允許閱讀器更早地開始處理圖像一旦它遇到引用,圖像數(shù)據(jù)就在后面。例如,這將產(chǎn)生圖9所示的包布局。由于性能利益,通常期望物理包支持交錯(cuò)。根據(jù)使用的物理包的種類,可以支持或不支持交錯(cuò)。不同的物理包可不同地處理交錯(cuò)的內(nèi)部表示。不管物理包如何處理交錯(cuò),重要的是記住,交錯(cuò)是在物理層上發(fā)生的優(yōu)化,并且被分割成物理文件中的多個(gè)片段的部件仍是一個(gè)邏輯部件;片段本身不是部件。
通信樣式編寫器和閱讀器之間的通信可以基于部件的順序傳送(sequential delivery)或按對(duì)部件的隨機(jī)訪問(random-access)來進(jìn)行,從而允許它們不按順序來訪問。使用這些通信樣式中的哪一個(gè)取決于管道和物理包格式的能力。一般而言,所有的管道支持順序傳送。物理包必須支持順序傳送。為支持隨機(jī)訪問情形,使用的管道和物理包都必須支持隨機(jī)訪問。某些管道基于允許隨機(jī)訪問的協(xié)議(例如,具有字節(jié)范圍支持的HTTP 1.1)。為在使用這些管道時(shí)允許最大性能,推薦物理包支持隨機(jī)訪問。在缺少這一支持的情況下,閱讀器將簡(jiǎn)單地等待,直到它們需要的部件被順序地傳送。
物理映射邏輯打包模型定義了包抽象;包的實(shí)際實(shí)例基于包的某一特定物理表示。打包模型可以被映射到物理持久格式以及各種傳輸(例如,基于網(wǎng)絡(luò)的協(xié)議)。物理包格式可以被描述為從抽象打包模型的分量到特定的物理格式特征的映射。打包模型未指定應(yīng)當(dāng)使用哪些物理包格式來歸檔、分發(fā)或假脫機(jī)操作包。在一個(gè)實(shí)施例中,僅指定了邏輯結(jié)構(gòu)。包可以由松散文件的集合、.ZIP文件檔案、復(fù)合文件或某一其它格式“物理地”具體化。所選擇的格式由目標(biāo)消費(fèi)設(shè)備支持,或由設(shè)備的驅(qū)動(dòng)程序支持。
被映射的分量每一物理包格式為以下分量定義了映射。某些分量是可任選的,并且特定的物理包格式可能不支持這些可任選的分量。
公共映射模式
存在許多物理存儲(chǔ)格式,其特征部分地與打包模型分量相匹配。在定義從打包模型到這類存儲(chǔ)格式的映射時(shí),可能期望利用打包模型和物理存儲(chǔ)介質(zhì)之間的任何能力相似性,同時(shí)使用映射的層來提供物理存儲(chǔ)介質(zhì)中不固有存在的附加能力。例如,某些物理包格式可將個(gè)別的部件儲(chǔ)存為文件系統(tǒng)中的個(gè)別文件。以這一物理格式,將許多部件名直接映射到相同的物理文件名稱是自然的。使用不是有效文件系統(tǒng)文件名的字符的部件名可能需要某種類型的轉(zhuǎn)義機(jī)制。
在許多情況下,不同物理包格式的設(shè)計(jì)者可能面對(duì)單個(gè)公共的映射問題。公共映射問題的兩個(gè)示例是在將任意的內(nèi)容類型與部件相關(guān)聯(lián)時(shí),以及當(dāng)支持交錯(cuò)布局樣式時(shí)產(chǎn)生的。本說明書建議了對(duì)這類公共映射問題的公共解決方案??梢怨膭?lì),但并不要求特定物理包格式的設(shè)計(jì)者使用此處定義的公共映射解決方案。
標(biāo)識(shí)部件的內(nèi)容類型物理包格式映射定義了用于儲(chǔ)存每一部件的內(nèi)容類型的機(jī)制。某些物理包格式具有用于表示內(nèi)容類型的本機(jī)機(jī)制(例如,MIME中的“Content-Type”標(biāo)題)。對(duì)于這些物理包,推薦映射使用本機(jī)機(jī)制來表示部件的內(nèi)容類型。對(duì)于其它物理包格式,使用某些其它機(jī)制來表示內(nèi)容類型。推薦的用于表示這些包中的內(nèi)容類型的機(jī)制是通過在包內(nèi)包括特別命名的XML流,稱為類型流。該流不是部件,并且因此其本身不是URI可定址的。然而,它可以在物理包內(nèi)使用用于交錯(cuò)部件的相同機(jī)制來交錯(cuò)。
類型流包含具有頂級(jí)“Types”元素以及一個(gè)或多個(gè)“Default”和“Override”子元素的XML。“Default”元素定義了從部件名擴(kuò)展名到內(nèi)容類型的默認(rèn)映射。這利用了文件擴(kuò)展名通常對(duì)應(yīng)于內(nèi)容類型的這一事實(shí)?!癘verride”元素用于指定不被默認(rèn)映射覆蓋或不與默認(rèn)映射一致的部件上的內(nèi)容類型。包編寫器可使用“Default”元素來減少每一部件“Override”元素的數(shù)量,但是不要求如此。
“Default”元素具有以下特性
“Override”元素具有以下特性
以下是包含在類型流中的XML的一個(gè)示例<Types xmlns=″http://mmcfcontent-PLACEHOLDER″>
<Default Extension=″txt″ContentType=″plain/text″/>
<Default Extension=″jpeg″ContentType=″image/jpeg″/>
<De fault Extension= ″picture″ContentType=″image/gif″/>
<Override PartName=″/a/b/sample4.picture″ContentType=″image/jpeg″/>
</Types>
以下表格示出了部件及其由以上類型流定義的對(duì)應(yīng)內(nèi)容類型的樣本列表
對(duì)于包內(nèi)的每一部件,類型流包含以下的任一個(gè)(a)一個(gè)匹配的“Default”元素,(b)一個(gè)匹配的“Override”元素,或者(c)匹配的“Default”元素和匹配的“Override”元素兩者(在這一情況下,“Override”元素優(yōu)先)。一般而言,對(duì)任一給定的擴(kuò)展名,最多有一個(gè)“Default”元素,并且對(duì)任一給定的部件名,最多有一個(gè)“Override”元素。
類型流中“Default”和“Override”元素的順序不是重要的。然而,在交錯(cuò)包中,“Default”和“Override”元素在物理包中出現(xiàn)在它們對(duì)應(yīng)的部件之前。
交錯(cuò)并非所有的物理包都本機(jī)地支持部件的數(shù)據(jù)流的交錯(cuò)。在一個(gè)實(shí)施例中,到任一這樣的物理包的映射使用了本節(jié)中描述的通用機(jī)制以允許部件的交錯(cuò)。通用機(jī)制通過將部件的數(shù)據(jù)流分割成可與其它部件的片段或整個(gè)部件交錯(cuò)的多個(gè)片段來工作。部件的各個(gè)片段在物理映射中存在,并且在邏輯打包模型中不是可定址的。片段可具有零尺寸。
定義了以下從部件名到部件的個(gè)別片段的名稱的唯一映射,使得閱讀器可以按其原始的順序?qū)⑵慰p合在一起以形成部件的數(shù)據(jù)流。
用于導(dǎo)出給定部件名的片段名的語法piece_name=part_name″/″″[″1*digit″]″[″.last″]″.piece″以下有效性約束對(duì)由該語法生成的piece_names存在●片段號(hào)以0開始,并且是正的、連續(xù)的整數(shù)。片段號(hào)可以被左零填充(left-zero-padded)。
●部件的片段集的最后一個(gè)片段包含片段名中“.piece”之前的“.last”。
●片段名在映射到物理包中的名稱之前從邏輯部件的名稱生成。
盡管不必要以其自然順序儲(chǔ)存片段,但是這樣的存儲(chǔ)可提供優(yōu)化的效率。包含交錯(cuò)(分段)的部件的物理包也可包含非交錯(cuò)(單片段)部件,因此以下示例是有效的spine.xaml/
.piecepages/page0.xamlspine.xaml/[1].piecepages/page1.xamlspine.xaml/[2].last.piecepages/page2.xaml特定映射下文定義了對(duì)以下物理格式的特定映射Windows文件系統(tǒng)中的松散文件。
到Windows文件系統(tǒng)中的松散文件的映射為更好地理解如何將邏輯模型的元素映射到物理格式,考慮將Metro包表示為Windows文件系統(tǒng)中的松散文件的集合的基本情況。邏輯包中的每一部件將包含在單獨(dú)的文件(流)內(nèi)。邏輯模型中的每一部件名對(duì)應(yīng)于文件名。
部件名被轉(zhuǎn)換成有效的Windows文件名,如以下表格中示出的。
以下給出的是兩個(gè)字符集,它們對(duì)于邏輯部件名段(URI段)和Windows文件名是有效的。該表格揭示了兩個(gè)重要的內(nèi)容存在兩個(gè)有效的URI符號(hào),冒號(hào)()和星號(hào)(*),在將URI轉(zhuǎn)化成文件名時(shí)需要對(duì)這兩個(gè)符號(hào)轉(zhuǎn)義。
存在有效的文件名符號(hào)^{}[]#,它們不能以URI呈現(xiàn)(它們可用于特殊的映射目的,如交錯(cuò))。
“轉(zhuǎn)義”用作在部件名包含不能在文件名中使用的字符時(shí)產(chǎn)生有效文件名稱符的技術(shù)。為對(duì)字符轉(zhuǎn)義,使用了脫字符號(hào)(^),其后跟隨字符的十六進(jìn)制表示。為從abs_path(部件名)映射到文件名首先刪除/將所有的/轉(zhuǎn)化成\對(duì)冒號(hào)和星號(hào)字符轉(zhuǎn)義例如,部件名/a:b/c/d*.xaml變?yōu)橐韵挛募鸻^25b\c\d^2a.xaml。
為執(zhí)行反向映射將所有的\轉(zhuǎn)化成/向串的起始添加/通過用對(duì)應(yīng)的字符替換^[十六進(jìn)制代碼]對(duì)字符解轉(zhuǎn)義(unescape)
版本化和可擴(kuò)充性與其它技術(shù)規(guī)范一樣,此處包含的規(guī)范可用未來的增強(qiáng)來進(jìn)展。這一規(guī)范的第一版的設(shè)計(jì)包括用于基于第一版編寫的軟件系統(tǒng)以及為未來版本編寫的軟件系統(tǒng)之間的文檔的未來互換的計(jì)劃。類似地,該規(guī)范允許第三方創(chuàng)建對(duì)該規(guī)范的擴(kuò)展。這一擴(kuò)展可以例如允許構(gòu)造充分利用某一特定打印機(jī)的特征的文檔,同時(shí)仍維持與不知道該打印機(jī)的存在的其它閱讀器的兼容性。
使用固定有效載荷標(biāo)記的新版本或?qū)?biāo)記的第三方擴(kuò)展的文檔要求閱讀器進(jìn)行關(guān)于行為(例如,如何可視地呈現(xiàn)某事物)的適當(dāng)判斷。為指導(dǎo)閱讀器,文檔的作者(或生成該文檔的工具)應(yīng)當(dāng)為遇到其它未識(shí)別元素或特性的閱讀器標(biāo)識(shí)適當(dāng)?shù)男袨?。?duì)于影響范圍文檔,這一類型的指導(dǎo)是重要的。
新的打印機(jī)、瀏覽器和其它客戶端可實(shí)現(xiàn)對(duì)未來特征的各種支持。利用新版本或擴(kuò)展的文檔作者必須仔細(xì)地考慮不知道那些擴(kuò)展版本的閱讀器的行為。
版本化名稱空間XML標(biāo)記識(shí)別基于名稱空間URL。對(duì)于任一XML名稱空間,期望閱讀器識(shí)別所有的XML元素以及該名稱空間中定義的XML特性,或不識(shí)別任何東西。如果閱讀器不識(shí)別新的名稱空間,則閱讀器需要執(zhí)行文檔中指定的后退呈現(xiàn)操作。
XML名稱空間URI“http://PLACEHOLDER/version-control”包括用于構(gòu)造固定有效載荷標(biāo)記的XML元素和特性,該標(biāo)記是版本自適應(yīng)和擴(kuò)展自適應(yīng)的。固定有效載荷不需要在其中具有版本化元素。然而,為構(gòu)建自適應(yīng)的內(nèi)容,必須使用<ver:Compatibility.Rules>和<ver:AltemativeContent>XML元素中的至少一個(gè)。
這一固定有效載荷標(biāo)記規(guī)范具有與其相關(guān)聯(lián)的xmlns URI“http://PLACEHOLDER/pdl”。在固定有效載荷中使用該名稱空間將指示閱讀器應(yīng)用程序僅使用該規(guī)范中定義的元素。該規(guī)范的未來版本將具有其自己的名稱空間。熟悉新名稱空間的閱讀器應(yīng)用程序?qū)⒅廊绾沃С窒惹暗陌姹局卸x的元素或特性的超集。不熟悉新版本的閱讀器應(yīng)用程序?qū)⑿掳姹镜腢RI考慮成它是對(duì)PDL的某一未知擴(kuò)展的URL一樣。這些應(yīng)用程序可能不知道在名稱空間之間存在關(guān)系,即一個(gè)是另一個(gè)的超集。
后向和“前向”兼容性在支持此處所討論的系統(tǒng)和方法的應(yīng)用程序或設(shè)備的環(huán)境中,兼容性由客戶端對(duì)使用規(guī)范的先前版本或規(guī)范的未知擴(kuò)展或版本創(chuàng)作的文檔進(jìn)行語法分析和顯示的能力來指示。各種版本化機(jī)制解決了“后向兼容性”,允許客戶端的未來實(shí)現(xiàn)能夠支持基于規(guī)范的下級(jí)版本的文檔,如下文所示出的。
當(dāng)諸如打印機(jī)等已實(shí)現(xiàn)的客戶端接收到使用標(biāo)記語言的未來版本構(gòu)建的文檔時(shí),客戶端能夠?qū)捎贸尸F(xiàn)選項(xiàng)進(jìn)行語法分析并理解它們。根據(jù)規(guī)范的較舊版本編寫的客戶端軟件使用較新版本特征處理某些文檔的能力通常被稱為“前向兼容性”。被編寫成允許前向兼容性的文檔被描述為“版本自適應(yīng)的”。
此外,由于已實(shí)現(xiàn)的客戶端也需要能夠支持具有表示新元素或?qū)傩缘奈粗獢U(kuò)展的文檔,因此各種語義支持“擴(kuò)展自適應(yīng)的”文檔的更一般情況。
如果打印機(jī)或查看器遇到未知的擴(kuò)展,它將查找連同擴(kuò)展的使用一起嵌入的信息,以找出關(guān)于自適應(yīng)地呈現(xiàn)環(huán)繞的內(nèi)容的指導(dǎo)。這一自適應(yīng)涉及用理解的內(nèi)容替換未知的元素或特性。然而,自適應(yīng)可采用其它形式,包括單純地忽略未知內(nèi)容。在缺乏明確指導(dǎo)的情況下,閱讀器應(yīng)當(dāng)將標(biāo)記中未識(shí)別的擴(kuò)展的存在視為出錯(cuò)條件。如果未提供指導(dǎo),則假定擴(kuò)展對(duì)理解內(nèi)容是基本的。呈現(xiàn)失敗將被捕捉并報(bào)告給用戶。
為支持這一模型,標(biāo)記語言的新的和擴(kuò)展的版本應(yīng)當(dāng)邏輯上組合名稱空間中的相關(guān)擴(kuò)展。以此方式,文檔作者能夠使用最少數(shù)量的名稱空間來利用擴(kuò)展的特征。
版本化標(biāo)記用于支持?jǐn)U展自適應(yīng)行為的XML詞匯包括以下元素
<Compatibility.Rules>元素Compatibility.Rules可以被附加到可容納附加的特性的任一元素上,以及附加到Xaml根元素上。<Compatibility.Rules>元素控制語法分析器如何對(duì)未知元素或特性反應(yīng)。通常這些項(xiàng)被報(bào)告為出錯(cuò)。向Compatibility.Rules屬性添加Ignorable(可忽略)元素通知了編譯器來自某些名稱空間的項(xiàng)可被忽略。
Compatibility.Rules可包含元素Ignorable和MustUnderstand(必須理解)。默認(rèn)地,所有的元素和特性被假定為MustUnderstand。元素和特性可以通過將Ignorable元素添加到其容器的Compatibility.Rules屬性中來變成Ignorable。元素或?qū)傩钥梢酝ㄟ^將MustUnderstand元素添加到嵌套容器之一再一次變成MustUnderstand。一個(gè)Ignorable或MustUnderstand指同一Compatibility.Rules元素中的特定名稱空間URI。
<Compatibility.Rules>元素影響容器的內(nèi)容,而非容器自己的標(biāo)簽或特性。為影響容器的標(biāo)簽或特性,其容器必須包含兼容性規(guī)則。Xaml根元素可用于為否則將成為根元素的元素,如Canvas指定兼容性規(guī)則。Compatibility.Rules復(fù)合特性是容器中的第一個(gè)元素。
<Ignorable>元素<Ignorable>元素聲明了所封入的名稱空間URI是可忽略的。如果在當(dāng)前塊或容器塊中在項(xiàng)的前方聲明了<Ignorable>標(biāo)簽,并且名稱空間URI對(duì)語法分析器是未知的,則該項(xiàng)可認(rèn)為是可忽略的。如果URI已知,則可不予處理Ignorable標(biāo)簽,并且所有的項(xiàng)都是理解的。在一個(gè)實(shí)施例中,未被明確聲明為Ignorable的所有項(xiàng)必須被理解。Ignorable元素可包含<ProcessContent>和<CarryAlong>元素,它們用于修改如何忽略元素以及向文檔編輯工具給予應(yīng)當(dāng)如何在編輯的文檔中保存這些內(nèi)容的指導(dǎo)。
<ProcessContent>元素<ProcessContent>元素聲明了如果元素被忽略,則元素的內(nèi)容將如同它由被忽略的元素的容器包含那樣被處理。
<ProcessContent>特性
<CarryAlong>元素可任選的<CarryAlong>元素向文檔編輯工具指示當(dāng)修改文檔時(shí)是否應(yīng)當(dāng)保存可忽略的內(nèi)容。編輯工具保存或丟棄可忽略內(nèi)容的方法是在編輯工具的域中。如果多個(gè)<CarryAlong>元素指名稱空間中的同一元素或特性,則指定的最后一個(gè)<CarryAlong>優(yōu)先。
<CarryAIong>特性
<MustUnderstand>元素<MustUnderstand>是倒轉(zhuǎn)Ingorable元素的效果的元素。例如,當(dāng)與替換內(nèi)容結(jié)合時(shí),這一技術(shù)是有用的。在<MustUnderstand>元素定義的范圍外,元素保持Ignorable。
<MustUnderstand>特性
<AlternateContent>元素<AlternateContent>元素允許如果指定內(nèi)容的任一部分不被理解則提供替換內(nèi)容。AlternateContent塊使用了<Prefer>和<Fallback>塊。如果<Prefer>塊中的任何內(nèi)容不被理解,則使用<Fallback>塊中的內(nèi)容。名稱空間被聲明為<MustUnderstand>,以指示要使用后退。如果名稱空間被聲明為可忽略并且在<Prefer>塊中使用了該名稱空間,則不使用<Fallback>塊中的內(nèi)容。
版本化標(biāo)記示例使用<Ignorable>
本示例使用了假想的標(biāo)記名稱空間http://PLACEHOLDER/Circle,它定義了其初始版本中的元素Circle,并使用了引入到標(biāo)記的未來版本(版本2)中的Circle的Opacity特性,以及引入到標(biāo)記的更后版本(版本3)中的Luminance屬性。這一標(biāo)記在版本1和2中,以及3和隨后的版本中保持可加載。另外,<CarryAlong>元素指定了當(dāng)編輯時(shí),甚至在編輯器不理解v3:Luminance時(shí),也必須保存v3:Luminance。
對(duì)于版本1閱讀器,忽略O(shè)pacity和Luminance對(duì)于版本2閱讀器,僅忽略Luminance對(duì)于版本3及以后的版本的閱讀器,使用所有的特性。
<FixedPanelxmlns=″http://PLACEHOLDER/fixed-content″xmlns:v=″http://PLACEHODER/versioned-content″xmlns:v1=″http://PLACEHODER/Circle/v1″xmlns:v2=″http://PLACEHODER/Circle/v2″xmlns:v3=″http://PLACEHODER/Circle/v3″>
<v:Compatibility. Rules>
<v:Ignorable NamespaceUri=″http://PLACEHODER/Circle/v2″/>
<v:Ignorable NamespaceUri=″http://PLACEHODER/Circle/v3″>
<v:CarryAlong Attributes=″Luminance″/>
</v:Ignorable>
</v:Compatibility.Rules>
<Canvas>
<Circle Center=″0,0″Radius=″20″Color=″Blue″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″25,0″Radius=″20″Color=″Black″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″50,0″Radius=″20″Color=″Red″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″13,20″Radius=″20″Color=″Yellow″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″38,20″Radius=″20″Color=″Green″v2:Opacity=″0.5″ v3:Luminance=″13″/>
</Canvas>
</FixedPanel>
使用<MustUnderstand>
以下示例闡明了對(duì)<MustUnderstand>元素的使用。
<FixedPanelxmlns=″http://PLACEHOLDER/fixed-content″xmlns:v=″http://PLACEHODER/versioned-content″xmlns:v1=″http://PLACEHODER/Circle/v1″xmlns:v2=″http://PLACEHODER/Circle/v2″xmlns:v3=″http://PLACEHODER/Circle/v3″>
<v:Compatibility.Rules>
<v:Ignorable NamespaceUri=″http://PLACEHODER/Circle/v2″/>
<v:Ignorable NamespaceUri=″http://PLACEHODER/Circle/v3″>
<v:CarryAlong Attributes=″Luminance″/>
</v:Ignorable>
</v:Compatibility.Rules>
<Canvas>
<v:Compatibility.Rules>
<v:MustUnderstand NamespaceUri=″http://PLACEHODER/Circle/v3″ />
</v:Compatbility.Rules>
<Circle Center=″0,0″Radius=″20″Color=″Blue″v2:0pacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″25,0″Radius=″20″Color=″Black″
v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″50,0″Radius=″20″Color=″Red″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″13,20″Radius=″20″Color=″Yellow″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″38,20″Radius=″20″Color=″Green″v2:Opacity=″0.5″v3:Luminance=″13″/>
</Canvas>
</FixedPanel>
對(duì)<MustUnderstand>元素的使用導(dǎo)致對(duì)v3:Luminance的引用錯(cuò)誤,即使它在根元素中被聲明為Ignorable。如果改為與使用例如添加到版本2中的Canvas的Luminance屬性(見下文)的替換內(nèi)容結(jié)合,則這一技術(shù)是有用的。在Canvas元素的范圍外,Circle的Luminance屬性再次是可忽略的。
<FixedPanelxmlns=″http://PLACEHOLDER/fixed-content″xmlns:v=″http://PLACEHODER/versioned-content″xmlns:v1=″http://PLACEHODER/Circle/v1″xmlns:v2=″http://PLACEHODER/Circle/v2″xmlns:v3=″http://PLACEHODER/Circle/v3″>
<v:Compatibility.Rules>
<v:Ignorable NamespaceUri=″http://PLACEHODER/Circle/v2″/>
<v:Ignorable NamespaceUri=″http://PLACEHODER/Circle/v3″>
<v:CarryAlong Attributes=″Luminance″/>
</v:Ignorable>
</v:Compatibility. Rules>
<Canvas>
<v:Compatibility.Rules>
<v:MustUnderstand NamespaceUri=″http://PLACEHODER/Circle/v3″/>
</v:Compatbility.Rules>
<v:AlternateContent>
<v:Prefer>
<Circle Center=″0,0″Radius=″20″Color=″Blue″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″25,0″Radius=″20″Color=″Black″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″50,0″Radius=″20″Color=″Red″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″13,20″Radius=″20″Color=″Yellow″v2:Opacity=″0.5″v3:Luminance=″13″/>
<Circle Center=″38,20″Radius=″20″Color=″Green″v2:Opacity=″0.5″v3:Luminance=″13″/>
</v:Prefer>
<v:Fallback>
<Canvas Luminance=″13″>
<Circle Center=″0,0″Radius=″20″Color=″Blue″v2:Opacity=″0.5″/>
<Circle Center=″25,0″Radius=″20″Color=″Black″v2:Opacity=″0.5″/>
<Circle Center=″50,0″Radius=″20″Color=″Red″v2:Opacity=″0.5″/>
<Circle Center=″13,20″Radius=″20″Color=″Yellow″v2:Opacity=″0.5″/>
<Circle Center=″38,20″Radius=″20″Color=″Green″v2:Opacity=″0.5″/>
</Canvas>
</v:Fallback>
</v:AlternateContent>
</Canvas>
</FixedPanel>
使用<AlternateContent>
如果任一元素或特性被聲明為<MustUnderstand>,但是在<AlternateContent>塊的<Prefer>塊中不被理解,則整體跳過<Prefer>塊,并如常地處理<Fallback>塊(即,遇到的任何MustUnderstand項(xiàng)被報(bào)告為錯(cuò)誤)。
<v:AlternateContent>
<v:Prefer>
<Path xmlns:m=″http://schemas.example.com/2008/metallic-finishes″m:Finish=″GoldLeaf″...../>
</v:Prefer>
<v:Fallback>
<Path Fill=″Gold″...../>
</v:Fallback>
</v:AlternateContent>
影響范圍包格式在以下的討論中,提供了對(duì)特定文件格式的描述。本節(jié)中的各個(gè)初級(jí)小標(biāo)題包括“對(duì)影響范圍包格式的介紹”、“影響范圍包結(jié)構(gòu)”、“固定有效載荷部件”、“固定頁標(biāo)記基礎(chǔ)”、“固定有效載荷元素和屬性”以及“固定頁標(biāo)記”。每一初級(jí)小標(biāo)題具有一個(gè)或多個(gè)相關(guān)的小標(biāo)題。
對(duì)影響范圍包格式的介紹在上文描述了示例性框架之后,以下的描述是使用上述工具提供的特定格式之一。要明白和理解,以下描述僅構(gòu)成了一個(gè)示例性格式,并不想要限制要求保護(hù)的本發(fā)明主題的應(yīng)用。
根據(jù)本實(shí)施例,單個(gè)包可包含多個(gè)有效載荷,其每一個(gè)擔(dān)當(dāng)文檔的不同表示。有效載荷(payload)是部件的集合,包括可標(biāo)識(shí)的“根”部件和該根部件的有效處理所需的所有部件。例如,有效載荷可以是文檔的固定表示、可回流的表示或任何任意的表示。
以下描述定義了被稱為固定有效載荷(fixedpayload)的特定表示。固定有效載荷具有包含固定面板(FixedPanel)標(biāo)記的根部件,它進(jìn)而引用固定頁(FixedPage)部件。這些共同描述了多頁文檔的精確呈現(xiàn)。
容納至少一個(gè)固定有效載荷,并遵循以下描述的其它規(guī)則的包被稱為影響范圍包(reach package)。影響范圍包的閱讀器和編寫器可基于影響范圍包格式的規(guī)范實(shí)現(xiàn)其自己的語法分析器和呈現(xiàn)引擎。
影響范圍包的特征根據(jù)所描述的實(shí)施例,影響范圍包解決了信息工作者對(duì)分發(fā)、歸檔和呈現(xiàn)文檔的需求。使用已知的呈現(xiàn)規(guī)則,影響范圍包可以從保存它們的格式中明白且明確地再現(xiàn)或打印,而無需將客戶端設(shè)備或應(yīng)用程序綁定到特定的操作系統(tǒng)或服務(wù)庫。另外,由于影響范圍有效載荷是以中立的、應(yīng)用程序無關(guān)的方式來表達(dá)的,因此文檔通??梢栽跊]有用于創(chuàng)建該包的應(yīng)用程序的情況下來查看和打印。為提供這一能力,在影響范圍包中引入并包含了固定有效載荷的概念。
根據(jù)所描述的實(shí)施例,固定有效載荷具有固定數(shù)量的頁,并且分頁符總是相同的。固定有效載荷中頁面上所有元素的布局是預(yù)定的。每一頁具有固定的大小和方向。由此,不必要在消費(fèi)方執(zhí)行布局計(jì)算,并且可簡(jiǎn)單地呈現(xiàn)內(nèi)容。這不僅適用于圖形,也適用于在固定有效載荷中用精確的排字布局來表示的文本。頁面的內(nèi)容(文本、圖形、圖像)使用更強(qiáng)大但是更簡(jiǎn)單的可視原語集來描述。
影響范圍包支持用于組織頁面的各種機(jī)制。一組頁面逐個(gè)被“粘合”在一起成“固定面板”。該組頁面大致等效于傳統(tǒng)的多頁文檔。固定面板然后可進(jìn)一步參與排版-構(gòu)建序列和選擇以組裝“復(fù)合”文檔的過程。
在所示并描述的實(shí)施例中,影響范圍包支持一種特定種類的序列,稱為固定面板序列(FixedPanel sequence),它可用于例如將一組固定面板粘合在一起成單個(gè)、較大的“文檔”。例如,想像將來自不同來源的兩個(gè)文檔粘合在一起一個(gè)兩頁的封面?zhèn)渫?固定面板)以及二十頁的報(bào)表(固定面板)。
影響范圍包支持可在構(gòu)建包含“相同”內(nèi)容的替換表示的文檔包時(shí)使用的多個(gè)特定選擇器。具體地,影響范圍包允許基于語言、顏色能力和頁面大小的選擇。由此,例如,可具有雙語言文檔,它使用選擇器在文檔的英語表示和法語表示之間選取。
除選擇器和序列對(duì)于影響范圍包中的排版的這些簡(jiǎn)單使用之外,重要的是注意,選擇器和序列還可指其它的選擇器和序列,由此允許構(gòu)建強(qiáng)大的聚積分層結(jié)構(gòu)。根據(jù)本實(shí)施例,關(guān)于什么可以完成以及什么不能完成的確切規(guī)則在下文名為“影響范圍包結(jié)構(gòu)”一節(jié)中指定。
另外,影響范圍包可包含附加的有效載荷,它們不是固定有效載荷,而是文檔的更豐富并且可能可編輯的表示。這允許包包含在編輯器應(yīng)用程序中運(yùn)作良好的豐富的、可編輯的文檔,以及視覺上準(zhǔn)確并可以在無編輯應(yīng)用程序的情況下查看的表示。
最后,根據(jù)該實(shí)施例,影響范圍包支持所謂的打印票據(jù)(print ticket)。打印票據(jù)提供了應(yīng)當(dāng)在打印包時(shí)使用的設(shè)置。這些打印票據(jù)可以用各種方式附加,以實(shí)現(xiàn)基本的靈活性。例如,打印票據(jù)可以被“附加”到整個(gè)包,并且其設(shè)置將影響整個(gè)包。打印票據(jù)還可以在結(jié)構(gòu)中的較低級(jí)別上附加(例如,附加到個(gè)別的頁),并且這些打印票據(jù)將提供在打印它們所附加的部件時(shí)使用的覆蓋設(shè)置。
影響范圍包結(jié)構(gòu)如上所述,影響范圍包支持一組特征,包括“固定”頁面、固定面板、排版、打印票據(jù)等等。這些特征在包內(nèi)使用包模型的核心組件部件和關(guān)系來表示。在本節(jié)及其相關(guān)的小節(jié)中,提供了對(duì)“影響范圍包”的完整定義,包括所有這些部件和關(guān)系必須如何被組裝、相關(guān)等的描述。
影響范圍包結(jié)構(gòu)綜述圖10示出了一個(gè)示例性影響范圍包,并且在本實(shí)施例中,示出了可構(gòu)成包或在包中找到的部件的每一有效類型。下文提供的表格列出了每一有效部件類型,并提供了每一個(gè)的描述
由于影響范圍包被設(shè)計(jì)成“在任何地方查看和打印”的文檔,因此影響范圍包的閱讀器和編寫器必須共享對(duì)什么構(gòu)成了“有效”影響范圍包的公共、清楚定義的期望。為提供“有效”影響范圍包的定義,下文首先定義若干概念。
影響范圍排版部件影響范圍包必須包含可通過從包的起始部件開始遍歷排版塊來“發(fā)現(xiàn)”的至少一個(gè)固定面板。根據(jù)所描述的實(shí)施例,發(fā)現(xiàn)過程遵循以下算法●從包的起始部件開始遞歸地遍歷排版部件圖。
●當(dāng)執(zhí)行該遍歷時(shí),僅遍歷到作為影響范圍排版部件(以下描述)的排版部件中。
●在圖的邊上定位所有的終端節(jié)點(diǎn)(沒有向外的弧的節(jié)點(diǎn))。
這些終端節(jié)點(diǎn)指的是(通過其<item>元素)一組被稱為影響范圍有效載荷根的部件。
固定有效載荷固定有效載荷是其根部件是固定面板部件的有效載荷。例如,圖10中的每一固定有效載荷具有相關(guān)聯(lián)的固定面板部件作為其根部件。有效載荷包括固定面板的有效處理所需的所有部件的完整閉包。這包括●固定面板本身;●從固定面板內(nèi)引用的所有固定頁;●由有效載荷中的任一固定頁(直接或通過選擇器間接)引用的所有圖像部件;●從有效載荷內(nèi)的任一固定頁內(nèi)使用的圖像刷直接或間接引用的所有影響范圍選擇器(reach selector)(下文描述);●由有效載荷中的任一固定頁引用的所有字體部件;●附加到固定有效載荷的任一部件的所有描述性元數(shù)據(jù)部件;以及●附加到固定有效載荷中的任一部件的任一打印票據(jù)。
用于影響范圍包的有效性規(guī)則適當(dāng)?shù)赜辛松鲜龆x,現(xiàn)在描述根據(jù)所描述的實(shí)施例描述“有效”影響范圍包的一致性規(guī)則●影響范圍包必須具有使用上述包關(guān)系的標(biāo)準(zhǔn)機(jī)制定義的起始部件;●影響范圍包的起始部件必須是選擇器或序列;●影響范圍包必須具有作為固定面板的至少一個(gè)影響范圍有效載荷根;●打印票據(jù)部件可以被附加到任一排版部件、固定面板部件或固定面板內(nèi)標(biāo)識(shí)的任一固定頁部件。在本示例中,這是通過http://PLACEHOLDER/HasPrintTicketRel關(guān)系來完成的;○打印票據(jù)可以被附加到這些部件的任一個(gè)或所有;○任一給定部件必須附加不多于一個(gè)的打印票據(jù);●描述性元數(shù)據(jù)部件可以被附加到包內(nèi)的任一部件;●固定有效載荷中的每一字體對(duì)象必須滿足“字體部件”一節(jié)中定義的字體格式規(guī)則;●從固定有效載荷中的任一固定頁內(nèi)對(duì)圖像的引用必須指向(可能通過其它選擇器遞歸地)作出選擇來找出要呈現(xiàn)的實(shí)際圖像部件的選擇器;●固定有效載荷中使用的每一圖像對(duì)象必須滿足“圖像部件”一節(jié)中定義的字體格式規(guī)則;●對(duì)于從固定頁(直接或通過選擇器間接)引用的任一字體、圖像或選擇器部件,必須有從引用固定頁到被引用的部件的“必需的部件”關(guān)系(關(guān)系名=http://mmcf-fixed-RequiredResource-PLACEHOLDER)。
影響范圍排版部件盡管影響范圍包可包含許多類型的排版部件,然而僅明確定義的排版部件的類型集具有根據(jù)該文檔明確定義的行為。這些具有明確定義的行為的排版部件被稱為影響范圍排版部件(reach composition part)。不同于這些的部件在確定影響范圍包的有效性時(shí)不是相關(guān)的。
以下排版部件類型被定義為影響范圍排版部件
影響范圍選擇器被定義為影響范圍排版部件的那些選擇器排版部件被稱為影響范圍選擇器(reach selector)。如上所述,語言選擇器(language selector)基于其自然語言,如英語或法語在表示之間選取。為發(fā)現(xiàn)該語言,選擇器調(diào)查其每一項(xiàng)。僅作為XML的那些項(xiàng)被考慮在內(nèi)。對(duì)于那些項(xiàng),調(diào)查每一項(xiàng)的根元素以確定其語言。如果xmllang特性不存在,則忽略該部件。選擇器然后依次考慮這些部件中的每一個(gè),選擇其語言與系統(tǒng)的默認(rèn)語言相匹配的第一個(gè)部件。
顏色選擇器(color selector)基于它們是單色還是彩色在表示之間選擇。頁面大小選擇器(page size selector)基于其頁面大小在表示之間選擇。內(nèi)容類型選擇器(content type selector)基于其內(nèi)容類型是否能被系統(tǒng)理解在表示之間選擇。
影響范圍序列被定義為影響范圍排版部件的那些序列排版部件被稱為影響范圍序列(reachsequence)。固定序列(fixed sequence)將作為固定內(nèi)容的子元素組合成序列。
固定有效載荷部件固定有效載荷能包括以下種類的部件固定面板部件、固定頁面部件、圖像部件、字體部件、打印票據(jù)部件以及描述性元數(shù)據(jù)部件,其每一個(gè)在下文其自己的小標(biāo)題下討論。
固定面板部件固定有效載荷的文檔結(jié)構(gòu)將固定頁面標(biāo)識(shí)為脊骨的一部分,如下文所描述的。脊骨部件和頁面部件之間的關(guān)系在脊骨的關(guān)系流內(nèi)定義。固定面板部件是內(nèi)容類型application/xml+PLACEHOLDER。
固定有效載荷內(nèi)容的脊骨通過在<Document>元素內(nèi)包括<FixedPanel>元素在標(biāo)記中指定。在下文的示例中,<FixedPanel>元素指定了脊骨中容納的頁的來源。
<!--脊骨-->
<Document$XMLNSFIXED$>
<FixedPanel>
<PageContent Source=″p1.xml″/>
<PageContent Source=″p2.xml″/>
</FixedPanel>
</Document>
<Document>元素<Document>元素沒有特性,并且必須只有一個(gè)子元素<FixedPanel>。
<FixedPanel>元素<FixedPanel>元素是文檔的脊骨,它邏輯上將已排序的頁面序列綁定在一起成單個(gè)多頁文檔。頁面總是指定了其自己的寬度和高度,但是<FixedPanel>元素也可任選地指定高度和寬度。該信息可用于各種各樣的目的,包括,例如基于頁面大小在替換表示之間選擇。如果<FixedPanel>元素指定了高度和寬度,則它通??膳c<FixedPane>內(nèi)的頁面的寬度和高度對(duì)齊,但是這些尺寸不指定個(gè)別頁的高度和寬度。
以下表格根據(jù)所描述的實(shí)施例總結(jié)了FixedPanel特性。
<PageContent>元素是<FixedPanel>元素唯一允許的子元素。<PageContent>元素是與文檔的頁順序相匹配的順序標(biāo)記次序。
<PageContent>元素每一<PageContent>元素指的是單個(gè)頁面的內(nèi)容的來源。為確定文檔中頁的數(shù)量,可對(duì)包含在<FixedPanel>中的<PageContent>子元素進(jìn)行計(jì)數(shù)。
<PageContent>元素沒有允許的子元素,并且有單個(gè)必需的特性-Source,它指的是頁的內(nèi)容的固定頁面部件。
如<FixedPanel>元素一樣,<PageContent>元素可任選地包括PageHeight和PageWidth特性,此處反映了單個(gè)頁面的大小。需要的頁面大小在固定頁面部件內(nèi)指定;<PageContent>上的可任選大小僅是建議性的。<PageContent>大小特性允許諸如文檔查看器等應(yīng)用程序?qū)τ谖臋n快速地做出可視布局估算,而不加載和語法分析所有的個(gè)別固定頁面部件。
下文提供的表格總結(jié)了<PageContent>特性并提供了特性的描述。
頁內(nèi)容的URI串必須引用內(nèi)容相對(duì)于包的部件位置。
固定頁面部件<FixedPanel>中的每一<PageContent>元素按名稱(URI)引用了固定頁面部件。每一固定頁面部件包含描述內(nèi)容的單個(gè)頁面的呈現(xiàn)的固定頁面標(biāo)記。固定頁面部件是內(nèi)容類型application/xml+PLACEHOLDER-FixedPage。
在標(biāo)記中描述固定頁面以下是源內(nèi)容的標(biāo)記如何查找上述樣本脊骨標(biāo)記(<PageContentSource=″p1.xml″/>)中引用的頁面的示例。
// /content/pl.xml<FixedPage PageHeight=″1056″PageWidth=″816″>
<GlyphsOriginX=″96″OriginY=″96″UnicodeString=″This is Page 1!″FontUri=″../Fonts/Times.TTF″FontRenderingEmSize=″16″/>
</FixedPage>
以下表格總結(jié)了FixedPage的屬性并提供了屬性的描述。
固定頁面標(biāo)記中的讀取順序在一個(gè)實(shí)施例中,包含在固定頁面內(nèi)的Glyphs子元素的標(biāo)記順序必須與頁面的文本內(nèi)容的期望讀取順序相同。該讀取順序可用于來自查看器中的固定頁面的順序文本的交互式選擇/復(fù)制,以及允許可訪問性技術(shù)對(duì)順序文本的訪問。確保標(biāo)記順序和讀取順序之間的這一對(duì)應(yīng)性是生成固定頁面標(biāo)記的應(yīng)用程序的責(zé)任。
圖像部件支持的格式根據(jù)所描述的實(shí)施例,影響范圍包中的固定頁面使用的圖像部件可以是固定數(shù)量的格式,例如PNG或JPEG,盡管可使用其它格式。
字體部件根據(jù)所描述的實(shí)施例,影響范圍包支持有限數(shù)量的字體格式。在所示并描述的實(shí)施例中,支持的字體格式包括TrueType格式和OpenType格式。
如本領(lǐng)域的技術(shù)人員所理解的,OpenType字體格式是TrueType字體格式的擴(kuò)展,添加了對(duì)PostScript字體數(shù)據(jù)和復(fù)雜的排字布局的支持。OpenType字體文件包含表格格式的數(shù)據(jù),它包括TrueType輪廓字體或PostScript輪廓字體。
根據(jù)所描述的實(shí)施例,影響范圍包內(nèi)不支持以下字體格式Adobe類型1、位圖字體、具有隱藏特性的字體(使用系統(tǒng)標(biāo)志來判斷是否枚舉它)、矢量字體以及EUDC字體(其字體家族名是EUDC)。
分設(shè)置字體固定有效載荷表示使用下文詳細(xì)描述的Glyphs元素的所有文本。由于在本實(shí)施例中格式是固定的,因此可能對(duì)字體進(jìn)行分設(shè)置以僅包含固定有效載荷所需的字形。因此,影響范圍包內(nèi)的字體可以基于字形使用率來分設(shè)置。盡管分設(shè)置的字體將不包含原始字體中的所有字形,然而分設(shè)置的字體必須是有效的OpenType字體文件。
打印票據(jù)部件打印票據(jù)部件提供了可在打印包時(shí)使用的設(shè)置。這些打印票據(jù)可以用各種方式附加,以實(shí)現(xiàn)實(shí)質(zhì)上的靈活性。例如,打印票據(jù)可被“附加”到整個(gè)包,并且其設(shè)置將影響整個(gè)包。打印票據(jù)可以在結(jié)構(gòu)中的較低級(jí)進(jìn)一步附加(例如,附加到個(gè)別的頁),并且這些打印票據(jù)將提供在打印它們所附加的部件時(shí)使用的覆蓋設(shè)置。
描述性元數(shù)據(jù)如上所述,描述性元數(shù)據(jù)部件向包的編寫器或生產(chǎn)器提供了儲(chǔ)存屬性值的方法,使包的閱讀器能夠可靠地發(fā)現(xiàn)這些值。這些屬性通常用于記錄關(guān)于整個(gè)包以及容器內(nèi)個(gè)別部件的附加信息。
固定頁面標(biāo)記基礎(chǔ)本節(jié)描述了與固定頁面標(biāo)記相關(guān)聯(lián)的某些基礎(chǔ)信息,并包括以下小節(jié)“固定有效載荷和其它標(biāo)記標(biāo)準(zhǔn)”、“固定頁面標(biāo)記模型”、“資源和資源引用”、以及“固定頁面繪制模型”。
固定有效載荷和其它標(biāo)記標(biāo)準(zhǔn)影響范圍包內(nèi)的固定有效載荷的固定面板和固定頁面標(biāo)記是來自Windows_Longhorn的Avalon XAML標(biāo)記的子集。即,盡管固定有效載荷標(biāo)記作為獨(dú)立的XML標(biāo)記格式(如在本文檔中編制的)是獨(dú)立的,但是它以與Longhorn系統(tǒng)相同的方式加載,并呈現(xiàn)了原始多頁文檔的WYSIWYG再現(xiàn)。
作為XAML標(biāo)記的某些背景,考慮以下。XAML標(biāo)記是允許用戶將對(duì)象的層次以及對(duì)象后的編程邏輯指定為基于XML的標(biāo)記語言的機(jī)制。這為對(duì)象模型提供了以XML描述的能力。這允許諸如微軟公司的.NET框架的公共語言運(yùn)行庫(CLR)中的類等可擴(kuò)充類以XML來訪問。XAML機(jī)制提供了XML標(biāo)簽到CLR對(duì)象的直接映射,以及以標(biāo)記表示相關(guān)代碼的能力。可以明白并理解,各個(gè)實(shí)現(xiàn)不需要特別地使用XAML的基于CLR的實(shí)現(xiàn)。相反,基于CLR的實(shí)現(xiàn)僅構(gòu)成了可在本文檔中描述的實(shí)施例環(huán)境中采用XAML的一種方法。
更具體地,考慮結(jié)合圖11的以下內(nèi)容,它示出了CLR概念(左側(cè)分量)到XML(右側(cè)分量)的示例性映射。名稱空間使用稱為反射的CLR概念在xmlns聲明中找到。類直接映射到XML標(biāo)簽。屬性和事件直接映射到特性。使用這一分層結(jié)構(gòu),用戶可指定XML標(biāo)記文件中的任一CLR對(duì)象的分層樹。xaml文件是具有.xaml擴(kuò)展名以及application/xaml+xml的媒體類型的xml文件。xaml文件具有一個(gè)根標(biāo)簽,它通常使用xmlns特性指定了名稱空間。名稱空間可以在其它類型的標(biāo)簽中指定。
繼續(xù),xaml文件中的標(biāo)簽一般映射到CLR對(duì)象。標(biāo)簽可以是元素、復(fù)合屬性、定義或資源。元素是一般在運(yùn)行時(shí)期間例示的CLR對(duì)象,并形成了對(duì)象的分層結(jié)構(gòu)。復(fù)合屬性標(biāo)簽用于設(shè)置父標(biāo)簽中的屬性。定義標(biāo)簽用于將代碼添加到頁并定義資源。資源標(biāo)簽提供了僅通過將樹指定為資源來重新使用對(duì)象樹的能力。定義標(biāo)簽也可在另一標(biāo)簽中被定義為xmlns特性。
一旦以標(biāo)記(通常由編寫器)合適地描述了文檔,可以(通常由閱讀器)對(duì)標(biāo)記進(jìn)行語法分析和處理。合適配置的語法分析器從根標(biāo)簽中確定應(yīng)當(dāng)搜索哪些CLR組裝和名稱空間來找出標(biāo)簽。在許多情況下,語法分析器進(jìn)行查找,并找出由xmlns特性指定的URL中的名稱空間定義文件。名稱空間定義文件提供了組裝的名稱及其安裝路徑和CLR名稱空間的列表。當(dāng)語法分析器遇到標(biāo)簽時(shí),語法分析器使用標(biāo)簽的xmlns以及該xmlns的xmlns定義文件來確定標(biāo)簽引用哪個(gè)CLR類。語法分析器按定義文件中指定組裝和名稱空間的順序進(jìn)行搜索。當(dāng)它找到匹配時(shí),語法分析器例示該類的對(duì)象。
由此,上文描述,并且在上文通過引用更完全結(jié)合在本申請(qǐng)中的機(jī)制允許使用標(biāo)記標(biāo)簽以基于XML文件來表示對(duì)象模型。這一將對(duì)象模型表示為標(biāo)記標(biāo)簽的能力可以用于異步或同步地創(chuàng)建矢量圖形繪圖、固定格式的文檔、自適應(yīng)流文檔和應(yīng)用程序UI。
在所示并描述的實(shí)施例中,固定有效載荷標(biāo)記是最小的,幾乎完全是呈現(xiàn)原語的Avalon XAML的節(jié)儉的子集。它用完全的保真度可視地表示了可以用Avalon表示的任何事物。固定有效載荷標(biāo)記是Avalon XAML元素和屬性的子集-加上附加的約定、正則形式或與Avalon XAML相比在使用率上的限制。
定義的完全最小固定有效載荷標(biāo)記集減少了與影響范圍包閱讀器,如打印機(jī)RIP或交互式查看器應(yīng)用程序的實(shí)現(xiàn)和測(cè)試相關(guān)聯(lián)的成本-并減少了相關(guān)聯(lián)的語法分析器的復(fù)雜度和存儲(chǔ)器覆蓋區(qū)。節(jié)儉的標(biāo)記集也最小化了分設(shè)置、錯(cuò)誤或影響范圍包編寫器和閱讀器之中的不一致性的機(jī)會(huì),從而令格式及其生態(tài)系統(tǒng)內(nèi)在地更健壯。
除最小的固定有效載荷標(biāo)記之外,影響范圍包將為附加的語義信息指定標(biāo)記,以支持具有諸如超鏈接、版面/大綱結(jié)構(gòu)和導(dǎo)航、文本選擇和文檔可訪問性等特征的查看器或影響范圍包文檔的呈現(xiàn)。
最后,使用上述版本化和可擴(kuò)充性機(jī)制,用用于特定的目標(biāo)消耗應(yīng)用程序、查看器或設(shè)備的更豐富的元素集來補(bǔ)充最小的固定有效載荷標(biāo)記是可能的。
固定頁面標(biāo)記模型在所示并描述的實(shí)施例中,固定頁面部件是基于XML元素、XML特性和XML名稱空間以基于XML的標(biāo)記語言來表達(dá)的。本文檔中定義了三個(gè)XML名稱空間以包括在固定頁面標(biāo)記中。一個(gè)這樣的名稱空間參考了本說明書中其它地方定義的版本控制元素和特性。用于固定頁面標(biāo)記中的元素和特性的原則名稱空間是“http://schemas.microsoft.com/MMCF-PLACEHOLDER-FixedPage”。最后,固定頁面標(biāo)記引入了“資源”的概念,它需要下文描述的第三個(gè)名稱空間。
盡管固定頁面標(biāo)記是使用XML元素和XML特性來表達(dá)的,然而其規(guī)范基于“內(nèi)容”和“屬性”的更高級(jí)抽象模型。固定頁面元素都被表達(dá)為XML元素。僅少數(shù)固定頁面元素可容納“內(nèi)容”,表達(dá)為XML子元素。但是屬性值可使用XML特性或使用XML子元素來表達(dá)。
固定頁面標(biāo)記也依賴于資源字典和資源引用的雙概念。資源字典和多個(gè)資源引用的組合允許單個(gè)屬性值由多個(gè)固定頁面標(biāo)記元素的多個(gè)屬性共享。
固定頁面標(biāo)記中的屬性在所示并描述的實(shí)施例中,有三種形式的標(biāo)記,它們可用于指定固定頁面標(biāo)記屬性的值。
如果屬性是使用資源引用來指定的,則屬性名用作XML特性名,并且特性值的特殊句法指示了資源引用的存在。用于表達(dá)資源引用的句法在名為“資源和資源引用”一節(jié)中描述。
未被指定為資源引用的任何屬性值可以使用標(biāo)識(shí)其值正被設(shè)置的屬性的嵌套XML子元素以XML來表達(dá)。該“復(fù)合屬性句法”在下文描述。
最后,某些非資源引用屬性值可被表達(dá)為簡(jiǎn)單文本串。盡管所有這樣的屬性值可以使用復(fù)合屬性句法來表達(dá),然而它們也可使用簡(jiǎn)單的XML特性句法來表達(dá)。
對(duì)于任一給定的元素,任一屬性可以被設(shè)置不多于一次,無論用于指定值的句法是什么。
簡(jiǎn)單特性句法對(duì)于可被表達(dá)為簡(jiǎn)單串的屬性值,可使用XML特性句法來指定屬性值。例如,給定稱為“SolidColorBrush(純色刷)”的固定頁面標(biāo)記元素,它具有名為“Color(顏色)”的屬性,可使用以下句法來指定屬性值<!--簡(jiǎn)單特性句法-->
<SolidColorBrush Color=″#FF0000″/>
復(fù)合屬性句法某些屬性值不能被表達(dá)為簡(jiǎn)單的串,例如XML元素用于描述屬性值。這一屬性值不能使用簡(jiǎn)單特性句法來表達(dá)。但是它們可使用復(fù)合屬性句法來表達(dá)。
在復(fù)合屬性句法中,使用了XML子元素,但是從父元素名和屬性名的組合導(dǎo)出XML元素名,以點(diǎn)分隔。給定固定頁面標(biāo)記元素<Path>(路徑),它具有屬性“Fill”,它可被設(shè)置到<SolidColorBrush>,可使用以下標(biāo)記來設(shè)置<Path>元素的“Fill”屬性<!--復(fù)合屬性句法-->
<Path>
<Path.Fill>
<SolidColorBrush Color=″#FF0000″/>
</Path.Fill>
</Path>
復(fù)合屬性句法即使在簡(jiǎn)單特性句法足以表達(dá)屬性值的情況下也可使用。因此,前一節(jié)的示例<!--簡(jiǎn)單特性句法-->
<SolidColorBrush Color=″#FF0000″/>
可替代地以復(fù)合屬性句法來表達(dá)
<!--復(fù)合屬性句法-->
<SolidColorBrush>
<SolidColorBrush.Color>#FF0000</SolidColorBrush.Color>
</SolidColorBrush>
當(dāng)使用復(fù)合屬性句法來指定屬性值時(shí),表示“屬性”的XML子元素必須出現(xiàn)在表示“內(nèi)容”的XML子元素之前。個(gè)別復(fù)合屬性XML子元素的順序不是重要的,只需它們一起出現(xiàn)在父元素的任何“內(nèi)容”之前。
例如,當(dāng)使用<Canvas>(畫布)元素(下文描述)的Clip(裁剪)和RenderTransform(渲染變換)屬性時(shí),這兩個(gè)屬性都必須出現(xiàn)在<Canvas>的任何<Path>和<Glyphs>內(nèi)容之前<Canvas>
<!--首先,屬性相關(guān)的子元素-->
<Canvas.RenderTransform>
<MatrixTransform Matrix=″1,0,0,1,0,0″>
</Canvas.RenderTransform>
<Canvas.Clip>
<PathGeometry>
…</PathGeometry>
</Canvas.Clip>
<!--然后,“內(nèi)容”-->
<Path...>
…</Path>
<Glyphs...>
…</Glyphs>
</Canvas>
資源和資源引用資源字典可用于容納可共享的屬性值,其每一個(gè)被稱為資源。其本身是固定頁面標(biāo)記元素的任一屬性值可以容納在資源字典中。資源字典中的每一資源攜帶一名稱。資源名可用于參考來自屬性的XML特性的資源。
在所示并描述的實(shí)施例中,<Canvas>和<FixedPage>元素可攜帶資源字典。資源字典是以標(biāo)記表達(dá)為名為“Resources(資源)”的屬性內(nèi)的<Canvas>和<FixedPage>元素的屬性。然而,個(gè)別的資源值直接嵌入在<FixedPage.Resources>或<Canvas.Resources>XML元素內(nèi)。句法上,<Canvas.Resources>和<FixedPage.Resource>的標(biāo)記類似于具有“內(nèi)容”的標(biāo)記元素。
根據(jù)本實(shí)施例,<Canvas.Resources>或<FixedPage.Resources>必須在<Canvas>或<FixedPage>的任何復(fù)合屬性句法屬性值之前。類似地,它們必須在<Canvas>或<FixedPage>的任何“內(nèi)容”之前。
定義固定有效載荷資源字典任何<FixedPage>或<Canvas>可攜帶資源字典,用<Canvas.Resources>XML元素來表達(dá)。單個(gè)資源字典內(nèi)的每一元素被給予一唯一的名稱,通過使用與該元素相關(guān)聯(lián)的XML特性來標(biāo)識(shí)。為將該“Name”特性與對(duì)應(yīng)于屬性的那些特性進(jìn)行區(qū)分,Name特性取自與固定格式元素的名稱空間不同的名稱空間。該XML名稱空間的URI是“http://schemas.microsoft.com/PLACEHOLDER-for-resources”。在以下示例中,定義了兩種幾何結(jié)構(gòu)一個(gè)是矩形,另一個(gè)是圓形。
<Canvas xmlns:def=″http://schemas.microsoft.com/PLACEHOLDER-for-resources″>
<Canvas.Resources>
<PathGeometry def:Name=″Rectangle″>
<PathFigure>
…</PathFigure>
</PathGeometry>
<PathGeometry def:Name=″Circle″>
<PathFigure>
…</PathFigure>
</PathGeometry>
</Canvas.Resources>
</Canvas>
引用資源為將屬性值設(shè)為上文定義的資源之一,使用在{}內(nèi)包含資源名的XML特性值。例如,“{Rectangle}”將表示要使用的該幾何結(jié)構(gòu)。在以下標(biāo)記樣例中,由字典中的幾何結(jié)構(gòu)對(duì)象定義的矩形區(qū)域?qū)⒂肧olidColorBrush來填充。
<Canvas>
<Canvas.Resources>
<PathGeometry def:Name=″Rectangle″>
…</PathGeometry>
</Canvas.Resources>
<Path>
<Path.Data>
<PathGeometry PathGeometry=″{Rectangle}″/>
</Path.Data>
<Path.Fill>
<SolidColorBrush Color=″#FF0000″/>
</Path.Fill>
</Path>
</Canvas>
根據(jù)本實(shí)施例,資源引用必須不出現(xiàn)在資源字典中的資源定義內(nèi)。
用于解析資源引用的轄區(qū)規(guī)則盡管在同一資源字典內(nèi)可能無法使用單個(gè)名稱兩次,然而同一名稱可以用在單個(gè)固定頁面部件內(nèi)的兩個(gè)不同的資源字典內(nèi)。此外,內(nèi)部<Canvas>的資源字典可重復(fù)使用某些外部<Canvas>或<FixedPage>的資源字典內(nèi)定義的名稱。
當(dāng)使用資源引用來設(shè)置元素的屬性時(shí),搜索各個(gè)資源字典來找出給定名稱的資源。如果具有屬性的元素是<Canvas>,則搜索該<Canvas>的資源字典(如果有的話)以找出期望名稱的資源。如果元素不是<Canvas>,則搜索以最接近的包含<Canvas>或<FixedPage>開始。如果在最初搜索的資源字典內(nèi)未定義期望的名稱,則咨詢下一最接近的包含<Canvas>或<FixedPage>。如果搜索繼續(xù)到根<FixedPage>元素,并且在與該<FixedPage>相關(guān)聯(lián)的資源字典內(nèi)未找到期望名稱的資源,則發(fā)生出錯(cuò)。
以下示例表示了這些規(guī)則。
<FixedPage xmlns:def=″http://schemas.microsoft.com/PLACEHOLDER-for-resources″PageHeight=″1056″PageWidth=″816″>
<FixedPage.Resources>
<Fill def:Name=″FavoriteColorFill″>
<SolidColorBrush Color=″#808080″/>
</Fill>
</FixedPage.Resources>
<Canvas>
<Canvas.Resources>
<Fill def:Name=″FavoriteColorFill″>
<SolidColorBrush Color=″#000000″/>
</Fill>
</Canvas.Resources>
<!--以下Path將用顏色#000000來填充-->
<Path Fill=″{FavoriteColorFill}″>
<Path.Data>
…</Path.Data>
</Path>
<Canvas>
<!--以下Path將用顏色#000000來填充-->
<Path Fill=″{FavoriteColorFill}″>
<Path.Data>
…</Path.Data>
</Path>
</Canvas>
</Canvas>
<--以下Path將用顏色#808080來填充-->
<Path Fill=″{FavoriteColorFill}″>
<Path.Data>
…
</Path.Data>
</Path>
</FixedPage>
固定頁面繪制模型固定頁面元素(或嵌套的畫布子元素)是在其上呈現(xiàn)其它元素的元素。內(nèi)容的排列由對(duì)固定頁面(或畫布)指定的屬性、對(duì)固定頁面(或畫布)上的元素指定的屬性、以及對(duì)固定有效載荷名稱空間定義的排版規(guī)則來控制。
使用畫布來定位元素在固定標(biāo)記中,所有的元素都相對(duì)于坐標(biāo)系統(tǒng)的當(dāng)前原點(diǎn)(0,0)來定位。當(dāng)前原點(diǎn)可通過向包含元素的固定頁面或畫布的每一元素應(yīng)用RenderTransform特性來移動(dòng)。
以下示例示出了通過RenderTransform對(duì)元素的定位。
<Canvas>
<Canvas.Resources>
<PathGeometry def:Name=″StarFish″>
<!--此處的各種PathFigures-->
…</PathGeometry>
<PathGeometry def:Name=″LogoShape″>
<!--此處的各種PathFigures-->
…</PathGeometry>
</Canvas.Resources>
<!--畫向右移動(dòng)100且向下移動(dòng)50的綠色StarFish和紅色LogoShape-->
<Canvas>
<Canvas.RenderTransform>
<MatrixTransform Matrix=″1,0,0,1,100,50″/>
</Canvas.RenderTransform>
<Path Fill=″#00FF00″Data=″{StarFish}″/>
<Path Fill=″#FF0000″Data=″{LogoShape}″/>
</Canvas>
<!--畫向右移動(dòng)200且向下移動(dòng)250的綠色StarFish和紅色LogoShape-->
<Canvas>
<Canvas.RenderTransform>
<MatrixTransform Matrix=″1,0,0,1,200,250″/>
</Canvas.RenderTransform>
<Path Fill=″#00FF00″Data=″{StarFish}″/>
<Path Fill=″#FF0000″Data=″{LogoShape}″/>
</Canvas>
</Canvas>
坐標(biāo)系統(tǒng)和單位根據(jù)所示并描述的實(shí)施例,最初設(shè)置坐標(biāo)系統(tǒng),使得該坐標(biāo)系統(tǒng)中的一個(gè)單位等于1英寸的1/96,被表達(dá)為浮點(diǎn)值,坐標(biāo)系統(tǒng)的原點(diǎn)(0,0)是固定頁面元素的左上角。
RenderTransform特性可以在任一子元素上指定,以向當(dāng)前坐標(biāo)系統(tǒng)應(yīng)用仿射變換。
頁面尺寸頁面尺寸由固定頁面元素上的“PageWidth(頁寬度)”和“PageHeight(頁高度)”參數(shù)來指定。
排版規(guī)則固定頁面使用了具有α通道的繪圖程序模型。根據(jù)所描述的實(shí)施例,排版必須根據(jù)這些規(guī)則,并且以以下順序發(fā)生●固定頁面(或任何嵌套的畫布)被認(rèn)為是無界的表面,向該表面上按它們出現(xiàn)在標(biāo)記中的次序繪制子元素。該表面的α通道被初始化為“0.0”(全部透明)。實(shí)際上,理想的無界表面可以被認(rèn)為是一種位圖緩沖區(qū),它足夠大以容納通過呈現(xiàn)所有的子元素產(chǎn)生的所有標(biāo)記。
●表面的內(nèi)容使用由固定頁面(或畫布)的渲染變換屬性指定的仿射變換來變換。
●所有的子元素被呈現(xiàn)到表面上、由固定頁面(或畫布)的裁剪屬性(也使用渲染變換屬性來變換)來裁剪。固定頁面另外裁剪到由(0,0,PageWitch,PageHeight)指定的矩形。如果子元素具有不透明(Opacity)屬性或不透明掩模(OpacityMask)屬性,則它在呈現(xiàn)到表面上之前被應(yīng)用到該子元素。
●最后,固定頁面(或畫布)的內(nèi)容被呈現(xiàn)到其包含元素上。在固定頁面的情況下,包含元素是物理映像表面。
呈現(xiàn)根據(jù)這些規(guī)則發(fā)生●在表面上產(chǎn)生標(biāo)記的唯一元素是“字形(Glyphs)”和“路徑(Path)”。
●所有其它的呈現(xiàn)效果可通過將“字形”和“路徑”元素定位到“畫布”上,并應(yīng)用其各種有效特性來實(shí)現(xiàn)。
固定有效載荷元素和屬性根據(jù)所示并描述的實(shí)施例,固定有效載荷包括在標(biāo)記中用于表示頁面及其內(nèi)容的一小組XML元素。固定面板部件中的標(biāo)記使用<Document>、<FixedPanel>和<PageContent>元素將文檔的頁面一起帶到一公共的、容易索引的根。每一固定頁面部件表示僅具有<Path>和<Glyphs>元素(它們共同完成所有的繪制)的<FixedPage>元素,以及組合它們的<Canvas>元素中的頁面內(nèi)容。
固定有效載荷標(biāo)記的元素分層結(jié)構(gòu)在以下名為“頂級(jí)元素”、“用于路徑、裁剪的幾何結(jié)構(gòu)”、“用于填充路徑、字形或不透明掩模的畫刷”、“用于固定頁面或畫布的資源字典”、“用于α透明性的不透明掩模”、“裁剪路徑”和“變換”的章節(jié)中總結(jié)。
頂級(jí)元素●<Document>[對(duì)每一固定面板部件只有一個(gè)]○特性■[無]○子元素■<FixedPanel>[只有一個(gè)]●<FixedPanel>
○特性■PageHeight[可任選]■PageWidth[可任選]○子元素■<PageContent>[這些子元素的1-N個(gè)]●<PageContent>
○特性■Source[必需]■PageHeight[可任選]■PageWidth[可任選]○子元素■[無]●<Fixedpage>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性
■PageHeight[必需(此處或作為子元素)]■PageWidth[必需(此處或作為子元素)]○表達(dá)為XML子元素的資源字典本身■<FixedPage.Resouces>
○通過XML子元素表達(dá)的屬性■<FixedPage.PageHeight>[必需(此處或作為特性)]■<FixedPage.PageWidth>[必需(此處或作為特性)]○通過XML子元素表達(dá)的內(nèi)容■<Canvas>
■<Path>
■<Glyphs>
●<Canvas>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity○通過資源字典引用表達(dá)的屬性■Clip■RenderTransform■OpacityMask○表達(dá)為XML子元素的資源字典本身■<Canvas.Resources>
○通過XML子元素表達(dá)的屬性■<Canvas.Opacity>
■<Canvas.Clip>
■<Canvas.RenderTransform>
■<Canvas.OpacityMask>
○通過XML子元素表達(dá)的內(nèi)容■<Canvas>
■<Path>
■<Glyphs>
●<Path>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性
■Opacity○通過資源字典引用表達(dá)的屬性■Clip■RenderTransfrom■OpacityMask■Fill○通過XML子元素表達(dá)的屬性■<Path.Opacity>
■<Path.Clip>
■<Path.RenderTransform>
■<Path.OpacityMask>
■<Path.Fill>
■<Path.Data>
●<Glyphs>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity■BidiLevel■FontFaceIndex■FontHintingEmSize■FontRenderingEmSize■FontUri■Indices■OriginX■OriginY■Sideways■StyleSimulations■UnicodeString○通過資源字典引用表達(dá)的屬性■Clip■RenderTransform■OpacityMask
■Fill○通過XML子元素表達(dá)的屬性■<Glyphs.Clip>
■<Glyphs.RenderTransfrom>
■<Glyphs.OpacityMask>
■<Glyphs.Fill>
■<Glyphs.Opacity>
■<Glyphs.BidiLevel>
■<Glyphs.FontFaceIndex>
■<Glyphs.FontHintingEmSize>
■<Glyphs.FontRenderingEmSize>
■<Glyphs.FontUri>
■<Glyphs.Indices>
■<Glyphs.OriginX>
■<Glyphs.OriginY>
■<Glyphs.Sideways>
■<Glyphs.StyleSimulations>
■<Glyphs.UnicodeString>
用于路徑、裁剪的幾何結(jié)構(gòu)●<Path.Data>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Path.Data總共只有這些子元素的一個(gè)]■<GeometryCollection>
■<PathGeometry>
●<GeometryCollection>
○特性■CombineMode○子元素 ■<GeometryCollection>
■<PathGeometry>
●<PathGeometry>
○特性■FillRule○子元素[1-N個(gè)子元素]■<PathFigure>
●<PathFigure>
○特性■[無]○子元素[首先出現(xiàn)StartSegment,最后出現(xiàn)CloseSegment,中間有1-N個(gè)Poly*]■<StartSegment>
■<PolyLineSegment>
■<PolyBezierSegment>
■<CloseSegment>
●<StartSegment>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Point○通過XML子元素表達(dá)的屬性■<StartSement.Point>
●<PolyLineSegment>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Points○通過XML子元素表達(dá)的屬性■<PolyLineSegment.Points>
●<PolyBezierSegment>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Points
○通過XML子元素表達(dá)的屬性■<PolyBezierSegment.Points>
用于填充路徑、字形或不透明掩模的畫刷●<Path.Fill>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Path.Fill只有這些子元素的一個(gè)]■<SolidColorBrush>
■<ImageBrush>
■<DrawingBrush>
■<LinearGradientBrush>
■<RadialGradientBrush>
●<Glyphs.Fill>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Glyphs.Fill只有這些子元素的一個(gè)]■<SolidColorBrush>
■<ImageBrush>
■<DrawingBrush>
■<LinearGradientBrush>
■<RadialGradientBrush>
●<SolidColorBrush>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity■Color○通過XML子元素表達(dá)的屬性■<SolidColorBrush.Opacity>
■<SolidColorBrush.Color>
●<ImageBrush>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity■HorizontalAlignment■VerticalAlignment■ViewBox■ViewPort■Stretch■TileMode■ContentUnits■ViewportUnits■ImageSource○通過資源字典引用表達(dá)的屬性■Transform○通過XML子元素表達(dá)的屬性■<ImageBrush.Opacity>
■<ImageBrush.Transform>
■<ImageBrush.HorizontalAlignment>
■<ImageBrush.VerticalAlignment>
■<ImageBrush.ViewBox>
■<ImageBrush.ViewPort>
■<ImageBrush.Stretch>
■<ImageBrush.TileMode>
■<ImageBrush.ContentUnits>
■<ImageBrush.ViewportUnits>
■<ImageBrush.ImageSource>
●<DrawingBrush>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity■HorizontalAlignment
■VerticalAlignment■ViewBox■ViewPort■Stretch■TileMode■ContentUnits■VeiwportUnits○通過資源字典引用表達(dá)的屬性■Transform■Drawing○通過XML子元素表達(dá)的屬性■<DrawingBrush.Opacity>
■<DrawingBrush.Transform>
■<DrawingBrush.HorizontalAlignment>
■<DrawingBrush.VerticalAlignment>
■<DrawingBrush.ViewBox>
■<DrawingBrush.ViewPort>
■<DrawingBrush.Stretch>
■<DrawingBrush.TileMode>
■<DrawingBrush.ContentUnits>
■<DrawingBrush.ViewportUnits>
■<DrawingBrush.Drawing>
●<DrawingBrush.Dtawing>
○通過XML子元素表達(dá)的內(nèi)容■<Canvas>
■<Path>
■<Glyphs>
●<LinearGradientBrush>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity■MappingMode
■SpreadMethod■StartPoint■EndPoint○通過資源字典引用表達(dá)的屬性■Transform■GradientStops○通過XML子元素表達(dá)的屬性■<LinearGradientBrush.Opacity>
■<LinearGradientBrush.Transform>
■<LinearGradientBrush.MappingMode>
■<LinearGradient.Brush.SpreadMethod>
■<LinearGradientBrush.StartPoint>
■<LinearGradientBrush.EndPoint>
■<LinearGradientBrush.GradientStops>
●<RadialGradientBrush>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Opacity■Center■Focus■RadiusX■RadiusY○通過資源字典引用表達(dá)的屬性■Transform■GradientStops○通過XML子元素表達(dá)的屬性■<RadialGradientBrush.Opacity>
■<RadialGradientBrush.Transform>
■<RadialGradientBrush.Center>
■<RadialGradientBrush.Focus>
■<RadialGradientBrush.RadiusX>
■<RadialGradientBrush.RadiusY>
■<RadialGradientBrush.GradientStops>
●<GradientStops>
○通過XML子元素表達(dá)的內(nèi)容■<GradientStop>[這些子元素的1-N個(gè)]●<GradientStop>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Color■Offset○通過XML子元素表達(dá)的屬性■<GradientStop.Color>
■<GradientStop.Offset>
用于固定頁面或畫布的資源字典●<FixedPage.Resources>
●<Canvas.Resources>
這些元素在上文討論資源字典的一節(jié)中已作了討論。
用于α透明性的不透明性掩?!?amp;lt;Canvas.OpacityMask>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Canvas.OpacityMask只有這些子元素的一個(gè)]■<SolidColorBrush>
■<ImageBrush>
■<DrawingBrush>
■<LinearGradientBrush>
■<RadialGradientBrush>
●<Path.OpacityMask>
○特性■[無]
○表達(dá)為單個(gè)XML子元素的屬性值[Path.OpacityMask只有這些子元素的一個(gè)]■<SolidColorBrush>
■<ImageBrush>
■<DrawingBrush>
■<LinearGradientBrush>
■<RadialGradientBrush>
●<Glyphs.OpacityMask>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Glyphs.OpacityMask只有這些子元素的一個(gè)]■<SolidColorBrush>
■<ImageBrush>
■<DrawingBrush>
■<LinearGradientBrush>
■<RadialGradientBrush>
裁剪路徑●<Canvas.Clip>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Canvas.Clip只有這些子元素的一個(gè)]■<GeometryCollection>
■<PathGeometry>
●<Path.Clip>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Path.Clip只有這些子元素的一個(gè)]
■<GeometryCollection>
■<PathGeometry>
●<Glyphs.Clip>
○特性■[無]○表達(dá)為單個(gè)XML子元素的屬性值[Glyphs.Clip只有這些子元素的一個(gè)]■<GeometryCollection>
■<PathGeometry>
變換●<Canvas.RenderTransform>
○表達(dá)為單個(gè)XML子元素的屬性值■<MatrixTransform>[必需]●<Path.RenderTransfrom>
○表達(dá)為單個(gè)XML子元素的屬性值■<MatrixTransform[必需]●<Glyphs.RenderTransform>
○表達(dá)為單個(gè)XML子元素的屬性值■<MatrixTransform>[必需]●<MatrixTransform>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■Matrix○通過XML子元素表達(dá)的屬性■<MatrixTransform.Matrix>
●<ImageBrush.Transform>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■MatrixTransform○通過XML子元素表達(dá)的屬性■<ImageBrush.Transform.MatrixTransform>
●<DrawingBrush.Transform>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■MatrixTransform○通過XML子元素表達(dá)的屬性■<DrawingBrush.Transform.MatrixTransform>
●<LinearGradientBrush.Transform>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■MatrixTransform○通過XML子元素表達(dá)的屬性■<LinearGradientBrush.Transform.MatrixTransform>
●<RadialGradientBrush.Transform>
○通過簡(jiǎn)單XML特性直接表達(dá)的屬性■MatrixTransform○通過XML子元素表達(dá)的屬性■<RadialGradientBrush.Transform.MatrixTransform>
固定頁面標(biāo)記每一固定頁面部件表示<FixedPage>元素中作為根的XML標(biāo)記中的頁面內(nèi)容。該固定頁面標(biāo)記提供了編寫器和閱讀器之間的文檔的WYSIWYG保真度,只有一小組元素和屬性<Path>和<Glyphs>元素(共同完成了所有的繪制),以及組合它們的<Canvas>元素。
公共元素屬性在討論對(duì)固定頁面標(biāo)記中的每一元素專用的特性之前,考慮對(duì)繪制和分組元素公共的特性O(shè)pacity、Clip、RenderTransform和OpacityMask。這些不僅是對(duì)頂級(jí)元素公共的唯一屬性,它們也是從父元素到子元素“聚積”其結(jié)果的唯一屬性,如上文“排版規(guī)則”一節(jié)中所描述的。聚積是應(yīng)用排版規(guī)則的結(jié)果。以下表格提供了這些公共特性的概括描述,以及隨后對(duì)每一特性的更完整討論。
Opacity特性O(shè)pacity(不透明性)用于在渲染時(shí)(α混合)透明地混合兩個(gè)元素。Opacity特性的范圍從0(完全透明)到1(完全不透明)。該閉區(qū)間外的值在標(biāo)記語法分析過程中被限制到該范圍內(nèi)。因此,有效地,[-∞...0]是透明的,而[1...∞]是不透明的。
Opacity特性通過以下計(jì)算來應(yīng)用(假定非自左乘源和目標(biāo)顏色,兩者都被指定為scRGB)OE元素的Opacity特性或OpacityMask中對(duì)應(yīng)位置處的α值A(chǔ)S源表面中存在的α值RS源表面中存在的紅值GS源表面中存在的綠值BS源表面中存在的藍(lán)值A(chǔ)D目標(biāo)表面中已經(jīng)存在的α值RD目標(biāo)表面中已經(jīng)存在的紅值GD目標(biāo)表面中已經(jīng)存在的綠值BD目標(biāo)表面中已經(jīng)存在的藍(lán)值A(chǔ)*對(duì)目標(biāo)表面所得的α值R*對(duì)目標(biāo)表面所得的紅值
G*對(duì)目標(biāo)表面所得的綠值B*對(duì)目標(biāo)表面所得的藍(lán)值用T下標(biāo)指定的所有值是臨時(shí)值(例如,RT1)。
步驟1將源α值與不透明性值相乘AS=AS*OE步驟2自左乘源αAT1=ASRT1=RS*ASGT1=GS*ASBT1=BS*AS步驟3自左乘目標(biāo)αAT2=ADRT2=RD*ADGT2=GD*ADBT2=BD*AD步驟3混合AT2=(1-AT1)*AT2+AT1RT2=(1-AT1)*RT2+RT1GT2=(1-AT1)*GT2+GT1BT2=(1-AT1)*BT2+BT1步驟4反轉(zhuǎn)自左乘如果AT2=0,則將所有的A*、R*、G*、B*設(shè)為0否則A*=AT2R*=RT2/AT2G*=GT2/AT2B*=BT2/AT2Clip屬性Clip屬性被指定為幾何結(jié)構(gòu)元素<GeometryCollection>或<PathGeomerty>之一(見Path.Data以知道細(xì)節(jié))Clip屬性用以下方式來應(yīng)用●所有落入由Clip子元素描述的幾何結(jié)構(gòu)元素內(nèi)的呈現(xiàn)內(nèi)容是可見的。
●所有落入由Clip子元素描述的幾何結(jié)構(gòu)元素外的呈現(xiàn)內(nèi)容是不可見的。
RenderTransform子元素MatrixTransform是對(duì)元素可用的唯一變換特性。它表達(dá)了仿射變換。句法如下<X.RenderTransform>
<MatrixTransform Matrix=″1,0,0,1,0,0″/>
</X.RenderTransform>
x表示向其應(yīng)用變換的元素。
Matrix特性中指定的六個(gè)數(shù)字是m00、m01、m10、m11、dx、dy。
完整的矩陣看似為m00 m01 0m10 m11 0dx dy 1給定坐標(biāo)X、Y通過應(yīng)用以下計(jì)算用RenderTransfrom變換來產(chǎn)生所得的坐標(biāo)X′、Y′X′=X*m00+Y*m10+dxY′=X*m01+Y*m11+dyOpacityMask子元素OpacityMask指定了畫刷(Brush),但是與填充畫刷(Fill Brush)相反,僅使用畫刷的α通道(見上述Opacity特性)作為用于呈現(xiàn)元素的附加參數(shù)。元素的每一像素的每一α值然后被額外地與OpacityMack畫刷中的對(duì)應(yīng)位置處的α值相乘。
<Canvas>元素<Canvas>元素用于將元素分組在一起。通常,當(dāng)固定頁面元素共享組成的公共特性(即,Opacity、Clip、RenderTransfrom或OpacityMask)時(shí),它們?cè)?amp;lt;Canvas>中被分組在一起。通過在畫布上將這些元素分組在一起,通常可將公共特性應(yīng)用到畫布而非個(gè)別的元素。
<Canvas>的特性和子元素<Canvas>元素只有先前描述的公共特性O(shè)pacity、Clip、RenderTransform和OpacityMask。它們?nèi)缦卤碇忻枋龅挠糜?amp;lt;Canvas>元素
以下標(biāo)記示例示出了對(duì)<Canvas>的使用。
<Canvas>
<Path Fill=″#0000FF″>
<Path.Data>
<PathGeometry>
<PathFigure>
<StartSegmentPoint=″0,0″/>
<PolylineSegment Points=″100,0 100,100 0,100 0,0″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
關(guān)于畫布標(biāo)記中的讀取順序,考慮以下內(nèi)容。如固定頁面一樣,包含在Canvas內(nèi)的Glyphs子元素的標(biāo)記順序必須與文本內(nèi)容的期望讀取順序相同。該讀取順序必須用于來自查看器中的固定頁面的順序文本的交互式選擇/復(fù)制,以及允許可訪問性技術(shù)對(duì)順序文本的訪問。確保標(biāo)記順序和讀取順序之間的這一對(duì)應(yīng)性是生成固定頁面標(biāo)記的應(yīng)用程序的責(zé)任。
包含在嵌套的Canvas元素內(nèi)的Glyphs子元素在出現(xiàn)在Canvas之前和之后的兄弟Glyphs元素之間內(nèi)嵌。
示例<FixedPage>
<Glyphs...UnicodeString=″Now is the time for″/>
<Canvas>
<Glyphs...UnicodeString=″all good men and women″/>
<Glyphs...UnicodeString=″to cometo the aid″/>
</Canvas>
<Glyphs...UnicodeString=″of the party.″/>
</FixedPage>
<Path>元素Path元素是描述幾何區(qū)域的基于XML的元素。幾何區(qū)域是可被填充,或者可用作裁剪路徑的形狀。諸如矩形和橢圓形等常見的幾何結(jié)構(gòu)類型可以使用路徑幾何結(jié)構(gòu)來表示。路徑通過指定需要的Geometry.Data子元素和諸如Fill或Opacity等渲染特性來描述。
<Path>的屬性和子元素以下屬性適用于下文描述的<Path>元素
為描述如何對(duì)由<Path.Data>子元素的幾何結(jié)構(gòu)描述的區(qū)域著色,使用了Fill屬性。為限制可在其上繪制<Path.Data>形狀的區(qū)域,使用了Clip屬性。
使用<Path>來描述幾何結(jié)構(gòu)路徑的幾何結(jié)構(gòu)被指定為<Path.Data>的一系列嵌套子元素,如下文所示。幾何結(jié)構(gòu)可以用包含一組<PathGeometry>子元素的<GeometryCollection>或包含<PathFigures>的單個(gè)<PathGeometry>子元素來表示。
<Path>
<Path.Data>
<GeometryCollection>
<PathGeometry>
<PathFigure>
…</PathFigure>
</PathGeometry>
</GeometryCollection>
</Path.Data>
<Path>
相同的<GeometryCollection>或<PathGeometry>元素定義了用于Canvas、Path或Glyphs的Clip屬性中使用的裁剪路徑的幾何結(jié)構(gòu)。
以下表格介紹了定義路徑幾何結(jié)構(gòu)的子元素的分層結(jié)構(gòu)。
GeometryCollectionGeometryCollection是一組被組合在一起來根據(jù)布爾CombineMode選項(xiàng)呈現(xiàn)的幾何結(jié)構(gòu)對(duì)象。GeometryCollection元素是固定頁面標(biāo)記中用于構(gòu)建幾何形狀的可視組合的機(jī)制。
CombineMode特性指定了用于組合GeometryCollection中的一組幾何形狀的布爾操作。根據(jù)模式,可包括或排除不同的區(qū)域。
CombineMode如下處理不可交換 Complement和Exclude不是可交換的,因此在GeometryCollection中的第一個(gè)幾何結(jié)構(gòu)和每一個(gè)別的剩余幾何結(jié)構(gòu)之間定義。例如,對(duì)于集合{g1,g2,g3},Exclude的CombineMode將被應(yīng)用為((g1排除g2))并且(g1排除g3))。
可交換 布爾操作Union、Xor、Intersect是可交換的,因此與順序無關(guān)地應(yīng)用于幾何結(jié)構(gòu)。
PathGeometryPathGeometry元素包含一組PathFigure元素。PathFigure的并集定義了PathGeometry的內(nèi)部。
關(guān)于FillRule特性,考慮以下內(nèi)容。PathGeomerty的填充區(qū)域是通過采用將其Filled特性設(shè)為真的所有包含的PathFigure,并應(yīng)用FillRule來確定閉合區(qū)域來定義的。FillRule選項(xiàng)指定了如何將Geometry內(nèi)包含的Figure元素的相交區(qū)域組合在一起形成Geometry的所得區(qū)域。
根據(jù)所描述的實(shí)施例,提供了奇偶填充(EvenOdd Fill)和非零填充(NonZeroFill)算法。
奇偶填充算法通過繪制從畫布上的一點(diǎn)到任一方向上的無窮大的射線,然后檢查穿過該射線的形狀的片段之處,來確定該點(diǎn)的“內(nèi)部性”。從計(jì)數(shù)零開始,從左到右每次添加一個(gè)穿過該射線的片段,并且從右到左每次減去一個(gè)穿過該射線的路徑片段。在對(duì)穿過進(jìn)行計(jì)數(shù)之后,如果結(jié)果是0,則該點(diǎn)在路徑外部。否則,該點(diǎn)在內(nèi)部。
非零填充算法通過繪制從畫布上的一點(diǎn)到任一方向上的無窮大的射線,并對(duì)該射線穿過的給定形狀的路徑片段數(shù)進(jìn)行計(jì)數(shù),來確定該點(diǎn)的“內(nèi)部性”。如果這一數(shù)字是奇數(shù),則該點(diǎn)在內(nèi)部;如果這一數(shù)字是偶數(shù),該點(diǎn)在外部。
PathFigurePathFigure元素包括一個(gè)或多個(gè)線段或曲線段的集合。線段元素定義了PathFigure的形狀。PathFigure必須總是定義閉合的形狀。
圖需要起始點(diǎn),之后每一線段或曲線段從添加的最后一個(gè)點(diǎn)繼續(xù)。PathFigure集合中的第一段必須是StartSegment,而CloseSegment必須是最后一段。StartSegment具有Point特性。CloseSegment沒有特性。
用于Path.Data幾何結(jié)構(gòu)的固定有效載荷標(biāo)記以下提供了用于繪制并填充畫布上的路徑的標(biāo)記。在以下具體示例中,在畫布上繪制矩形路徑,并用純綠色畫刷來填充。
<Canvas>
<Path Fill=″#0000FF″>
<Path.Data>
<PathGeometry>
<PathFigure>
<StartSegment Point=″0,0″/>
<PolylineSegment Points=″100,0 100,100 0,100 0,0″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
以下標(biāo)記描述了繪制立方貝賽爾(Bézier)曲線。即,除PolyLineSegment(折線段)之外,固定有效載荷標(biāo)記包括用于繪制立方貝賽爾曲線的PolyBezierSegment。
<Canvas>
<Path Fill=″#0000FF″>
<Path.Data>
<PathGeometry>
<PathFigure>
<StartSegment Point=″0,0″/>
<PolybezierSegmentPoints=″100,0 100,100 0,100 0,0″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
畫刷畫刷用于對(duì)由<Path>元素定義的幾何形狀的內(nèi)部進(jìn)行著色,并填充用<Glyphs>元素呈現(xiàn)的字符位圖。畫刷也用于定義<Canvas.OpacityMask>、<Path.OpacityMask>和<Glyphs.OpacityMask>中的α透明性掩模。固定頁面標(biāo)記包括以下畫刷
特性在各畫刷之間變化,盡管所有的畫刷都具有Opacity特性。ImageBrush和DrawingBrush共享平鋪顯示能力。兩個(gè)用漸變填充的畫刷也具有公共的特性。
對(duì)標(biāo)記中畫刷子元素的使用示出如下<Path>
<Path.Fill>
<SolidColorBrush Color=″#00FFFF″/>
</Path.Fill>
…</Path>
畫刷的公共屬性根據(jù)所描述的實(shí)施例,以下屬性適用于所有的畫刷,除簡(jiǎn)單畫刷SolidColorBrush之外,它具有更少的可任選子元素。
用于DrawingBrush和ImageBrush的公共特性
HorizontalAlignment(水平對(duì)齊)特性指定了畫刷如何在它所填充的區(qū)域內(nèi)水平對(duì)齊。VerticalAlignment(垂直對(duì)齊)特性指定了畫刷如何在它所填充的區(qū)域內(nèi)垂直對(duì)齊。ViewBox特性具有默認(rèn)值(0,0,0,0),被解釋為未設(shè)置。當(dāng)未設(shè)置時(shí),不作出任何調(diào)整,并且忽略Stretch特性。查看框(ViewBox)為內(nèi)容指定了新坐標(biāo)系統(tǒng),即,重新定義了查看口(ViewPort)的范圍和原點(diǎn)。Stretch(拉伸)特性幫助指定那些內(nèi)容如何映射入查看口。Viewbox特性的值是四個(gè)“無單位”數(shù)字<min-x>、<min-y>、<width>和<height>的列表,由空格和/或逗號(hào)分隔,并且是Rect類型。ViewBox rect指定了映射到邊框的用戶空間中的矩形。它與插入scaleX和scaleY一樣起作用。Stretch特性(在選項(xiàng)不同于無的情況下)提供了用于保持圖形的長(zhǎng)寬比的附加控制。附加變換被應(yīng)用到給定元素的所有子孫元素,以達(dá)到指定的效果。如果在Brush上有變換,則它在ViewBox映射“之上”應(yīng)用。
Stretch特性具有以下模式None、Fill、Uniform、UniformToFill。
簡(jiǎn)單畫刷及其特性Path.Brush和Canvas.Brush子元素包括以下SolidColorBrush、ImageBrush和DrawingBrush。
SolidColorBrush用純色填充定義的幾何區(qū)域。如果有顏色的α分量,則將它以相乘的方式與Brush中對(duì)應(yīng)的不透明性特性組合。
以下示例示出了如何對(duì)SolidColorBrush表達(dá)顏色特性。
<Path>
<Path.Fill>
<SolidColorBrush Color=″#00FFFF″/>
</Path.Fill>
…</Path>
ImageBrush可用于用圖像填充空間。ImageBrush的標(biāo)記允許指定URI。如果所有其它特性被設(shè)為其默認(rèn)值,則將拉伸圖像以填充區(qū)域的邊框。
ImageSource特性必須引用支持的影響范圍圖像格式之一或通往這些類型之一的圖像的選擇器。
DrawingBrush可用于用矢量圖來填充空間。DrawingBrush具有Drawing子元素,其在標(biāo)記中的使用在以下示出。
<Path>
<Path.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<Drawing>
<Path.../>
<Glyphs.../>
</Drawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Path.Fill>
</Path>
漸變畫刷及其特性漸變通過將一組漸變停點(diǎn)(stop)指定為漸變畫刷的XML子元素來繪制。這些漸變停點(diǎn)沿某一類行進(jìn)指定了顏色。本框架中支持兩種類型的漸變畫刷線性和徑向。
漸變是通過在指定的顏色空間內(nèi)的漸變停點(diǎn)之間完成內(nèi)插來繪制的。
LinearGradientBrush和RadialGradientBrush共享以下公共特性
對(duì)于SpreadMethod特性,考慮以下內(nèi)容。SpreadMethod選項(xiàng)指定了如何填充空間。默認(rèn)值是Pad。
MappingMode特性對(duì)于LinearGradientBrush,考慮以下內(nèi)容。LinearGradientBrush指定了沿一矢量的線性漸變畫刷。
以下標(biāo)記示例示出了對(duì)LinearGradientBrush的使用。用線性漸變填充了具有矩形路徑的頁面<FixedPanel>
<FixedPage>
<Path>
<Path.Fill>
<LinearGradientBrush StartPoint=″0,0″EndPoint=″1,0″>
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color=″#FF0000″Offset=″0″/>
<GradientStop Color=″#0000FF″Offset=″1″/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Path.Fill>
<Path.Data>
<PathGeometry>
<PathFigure>
<StartSegment Point=″0,0″/>
<PolyLineSegment Points=″100,0 100,100 0,100″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</FixedPage>
</FixedPanel>
該示例示出了用線性漸變填充的具有矩形路徑的頁面。路徑在裁剪它的八邊形的形狀內(nèi)也有裁剪屬性。
<FixedPanel>
<FixedPage>
<Path>
<Path.Clip>
<PathGeometry>
<PathFigure>
<StartSegmentPoint=″25,0″/>
<PolyLineSegmentPoints=″75,0 100,25 100,75 75,100 25,100 0,75 0,25″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Clip>
<Path.Fill>
<LinearGradientBrush StartPoint=″0,0″EndPoint=″1,0″>
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color=″#FF0000″Offset=″0″/>
<GradientStop Color=″#0000FF″Offset=″1″/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Path.Fill>
<Path.Data>
<PathGeometry>
<PathFigure>
<StartSegment Point=″0,0″/>
<PolyLineSegment Points=″100,0 100,100 0,100″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</FixedPage>
</FixedPanel>
RadialGradient(徑向漸變)在編程模型中與線性漸變相似。然而,線性漸變具有定義漸變矢量的起點(diǎn)和終點(diǎn),而徑向漸變具有圓周以及焦點(diǎn)來定義漸變行為。圓周定義了漸變的終點(diǎn)-換言之,1.0的漸變停點(diǎn)定義了圓周周界的顏色。焦點(diǎn)定義了漸變的中心。0.0的漸變停點(diǎn)定義了焦點(diǎn)處的顏色。
α和透明性根據(jù)所示并描述的實(shí)施例,每一元素的每一像素?cái)y帶范圍從0.0(完全透明)到1.0(完全不透明)的α值。當(dāng)混合元素以達(dá)到透明性的視覺效果時(shí),使用α值。
每一元素可具有Opacity(不透明性)特性,元素的每一像素的α值將與該特性均勻地相乘。
另外,OpacityMask允許指定每一像素的不透明性,它將控制如何將呈現(xiàn)的內(nèi)容混合成其目標(biāo)。由OpacityMask指定的不透明性與已經(jīng)碰巧在內(nèi)容的α通道中存在的任何不透明性用乘法組合。由OpacityMask指定的每一像素的Opacity通過查找掩模中每一像素的α通道來確定-忽略顏色數(shù)據(jù)。
OpacityMask的類型是Brush。這允許指定如何以各種不同的方式將Brush的內(nèi)容映射到內(nèi)容的范圍。如用于填充幾何結(jié)構(gòu)那樣,Brush默認(rèn)為填充整個(gè)內(nèi)容空間,在適當(dāng)時(shí)拉伸或復(fù)制其內(nèi)容。這意味著圖像刷將拉伸其圖像源以完全覆蓋內(nèi)容,而漸變刷將從邊延伸到邊。
α混合所需的計(jì)算在先前“Opacity特性”一節(jié)中描述。
以下示例示出了如何使用OpacityMask在Glyphs元素上創(chuàng)建“漸弱效果”。
本示例中的OpacityMask是從不透明的黑漸弱到透明的黑的線性漸變。
// /content/pl.xml<FixedPage PageHeight=″1056″PageWidth=″816″>
<GlyphsOriginX=″96″OriginY=″96″UnicodeString=″This is Page 1!″FontUri=″../Fonts/Times.TTF″FontRenderingEmSize=″16″>
<Glyphs.OpacityMask>
<LinearGradientBrush StartPoint=″0,0″EndPoint=″1,0″>
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color=″#FF000000″Offset=″0″/>
<GradientStop Color=″#00000000″Offset=″1″/>
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Glyphs.OpacityMask>
</Glyphs>
</FixedPage>
影響范圍文檔中的圖像在固定頁面上,圖像填充了閉合區(qū)域。為將圖像放置在固定頁面上,首先必須在頁面上指定區(qū)域。區(qū)域由Path元素的幾何結(jié)構(gòu)來定義。
Path元素的Fill屬性指定了所描述的區(qū)域的填充內(nèi)容。圖像是一種填充類型,由圖像刷畫到區(qū)域中。所有的畫刷具有默認(rèn)的行為,該行為將通過在適當(dāng)時(shí)拉伸或重復(fù)(平鋪)畫刷內(nèi)容來填充整個(gè)區(qū)域。在圖像刷的情況下,由ImageSource屬性指定的內(nèi)容將被拉伸以完全覆蓋該區(qū)域。
以下標(biāo)記示出了如何將圖像放到畫布上。
<Canvas>
<Path>
<Path.Data>
<GeometryCollection>
…</GeometryCollection>
</Path.Data>
<Path.Fill>
<ImageBrush ImageSource=″/images/dog.jpg″/>
</Path.Fill>
</Path>
</Canvas>
由于許多圖像是矩形的,包括在資源字典中的矩形路徑元素在簡(jiǎn)化標(biāo)記時(shí)是有用的。路徑然后可使用RenderTransform特性來定位(見上文)。
<Canvas>
<Canvas.Resources>
<PathGeometry def:Name=″Rectangle″>
<PathFigure>
<StartSegment Point=″0,0″/>
<PolylineSegment Points=″100,0 100,100 0,100″/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Canvas.Resources>
<Canvas>
<Canvas.RenderTransform>
<MatrixTransform Matrix=″1,0,0,1,100,100″/>
</Canvas.RenderTransform>
<Path Data=″{Rectangle}″>
<Path.Fill>
<ImageBrush ImageSource=″/images/dog.jpg″/>
</Path.Fill>
</Path>
</Canvas>
</Canvas>
顏色顏色可以在所示并描述的標(biāo)記中使用scRGB或sRGB表示法來指定。scRGE規(guī)范被稱為“IEC 61966-2-2 scRGB”,并且可從www.iec.ch獲得。
ARGB參數(shù)在下表中描述。
顏色映射當(dāng)前,考慮了用指定顏色背景的元數(shù)據(jù)來對(duì)彩色元素加標(biāo)簽。該元數(shù)據(jù)可包含ICC顏色概覽或其它顏色定義數(shù)據(jù)。
<Glyphs>元素文本在固定有效載荷中使用Glyphs元素來表示。該元素被設(shè)計(jì)成滿足用于打印和影響范圍文檔的需求。
Glyphs元素可具有以下屬性的組合。
文本標(biāo)記綜述字形度量每一字形定義了指定它如何與其它字形對(duì)齊的度量。根據(jù)一個(gè)實(shí)施例的示例性度量在圖12中示出。
前進(jìn)寬度和組合記號(hào)一般而言,字體內(nèi)的字形是基礎(chǔ)字形或可附加到基礎(chǔ)字形的組合記號(hào)?;A(chǔ)字形通常具有非零的前進(jìn)寬度,以及0,0的偏移矢量。而組合記號(hào)通常具有零前進(jìn)寬度。偏移矢量可用于調(diào)整組合記號(hào)的位置,并且因此對(duì)組合記號(hào)可具有非0,0值。
字形行程中的每一字形具有控制其位置的三個(gè)值。這些值指示了原點(diǎn)、前進(jìn)寬度和字形偏移,其每一個(gè)描述如下●原點(diǎn)每一字形被假定給予一名義原點(diǎn),對(duì)于行程中的第一個(gè)字形,這是行程的原點(diǎn)。
●前進(jìn)寬度每一字形的前進(jìn)寬度提供了下一字形相對(duì)于該字形原點(diǎn)的原點(diǎn)。前進(jìn)矢量總是在行程行進(jìn)的方向上繪制。
●字形偏移(基準(zhǔn)或記號(hào))字形偏移矢量相對(duì)于其名義原點(diǎn)調(diào)整該字形位置。
字符、字形和群集映射群集映射對(duì)每一Unicode碼點(diǎn)包含一個(gè)條目。條目中的值是GlyphIndices數(shù)組中表示該碼點(diǎn)的第一個(gè)字形的偏移。或者,當(dāng)碼點(diǎn)是一組表示不可分割的字符群集的碼點(diǎn)的一部分時(shí),GlyphIndices數(shù)組中的第一個(gè)字形表示代表該群集的第一個(gè)字形的偏移。
群集映射群集映射可表示碼點(diǎn)-字形映射,它可以是一對(duì)一、多對(duì)一、一對(duì)多或多對(duì)多。一對(duì)一映射是每一碼點(diǎn)僅由一個(gè)字形表示,圖13中的群集映射條目是0、1、2……。
多對(duì)一映射是兩個(gè)或更多個(gè)碼點(diǎn)映射到單個(gè)字形。那些碼點(diǎn)的條目指定了字形索引緩沖區(qū)中該字形的偏移。在圖14的示例中,“f”和“i”字符用連字(ligature)來替換,這在許多襯線字體中是常見的排字慣例。
對(duì)于一對(duì)多映射,結(jié)合圖15考慮以下內(nèi)容?!癝ara Am”包含位于先前的基礎(chǔ)字符(環(huán))上方的部分,以及位于基礎(chǔ)字符(勾)右側(cè)的部分。當(dāng)對(duì)泰文文本進(jìn)行微調(diào)時(shí),將勾與基礎(chǔ)字符分開,而環(huán)保留在基礎(chǔ)字符的上方,因此許多字體將環(huán)和勾編碼為單獨(dú)的字形。當(dāng)一個(gè)碼點(diǎn)映射到兩個(gè)或更多個(gè)字形時(shí),該碼點(diǎn)的ClusterMap(群集映射)中的值引用GlyphIndeces數(shù)組中表示該碼點(diǎn)的第一個(gè)字形。
對(duì)于多對(duì)多映射,結(jié)合圖16考慮以下內(nèi)容。在某些字體中,字符群集的一組不可分割的碼點(diǎn)映射到一個(gè)以上字形。例如,這在支持印度語腳本的字體中是常見的。當(dāng)該組不可分割的碼點(diǎn)映射到一個(gè)或多個(gè)字形時(shí),每一碼點(diǎn)的ClusterMap中的值引用GlyphIndeces數(shù)組中表示該碼點(diǎn)的第一個(gè)字形。
以下示例示出了泰米爾單詞
的Unicode和字形表示。前兩個(gè)碼點(diǎn)組合在一起以生成三個(gè)字形。
指定群集群集規(guī)范優(yōu)于非1∶1群集的第一個(gè)字形的字形規(guī)范(映射比一字符對(duì)一字形映射更復(fù)雜)。
每一群集規(guī)范具有以下形式(ClusterCodepointCount[:ClusterGlyphCount])
<Glyphs>標(biāo)記Glyphs元素將字體指定為URI、版面索引和一組上述的其它特性。例如<GlyphsFontUri =″file://c:/windows/fonts/times.ttf″FontFaceIndex=″0″ <!-- 默認(rèn)值0==>
FontRenderingEmSize =″20″<!--無默認(rèn)值-->
FontHintingEmSize=″12″<!--默認(rèn)值12 -->
StyleSimulations =″BoldSimulation″ <!--默認(rèn)值為None -->
Sideways =″false″ <!--默認(rèn)值為false -->
BidiLevel=″0″ <!--默認(rèn)值0 -->
Unicode =″...″ <!--Unicode表示-->
Indices =″...″ <!--見下文-->
剩余的特性...
/>
每一字形規(guī)范具有以下形式[Glyphlndex][,[Advance][,[uOffset][,[vOffset][,[Flags]]]]]字形規(guī)范的每一部分是可任選的
對(duì)于計(jì)算前進(jìn)而沒有舍入誤差聚積,考慮以下內(nèi)容。每一前進(jìn)值必須被計(jì)算為后來的字形的未舍入原點(diǎn)減去先前字形的已計(jì)算(即,已舍入)前進(jìn)寬度的總和。以此方式,每一字形被定位到其確切位置的0.5%em之內(nèi)。
字形標(biāo)記示例<Canvas xmlns=″http://schemas.microsoft.com/2005/xaml/″>
<GlyphsFontUri=″file://c:/windows/fonts/times.ttf″FontFaceIndex =″0″FontRenderingEmSize =″20″FontHintingEmSize =″12″StyleSimulations =″ItalicSimulation″Sideways =″false″BidiLevel =″0″OriainX=″75″OriginY=″75″Fill =″#00FF00″UnicodeString =″inner text ...″/>
<!--沒有縮距的′Hello Windows′-->
<GlyphsOriginX=″200″OriginY=″50″UnicodeString =″Hello,Windows!″FontUri=″file://C:/Windows/Fonts/Times.TTF″Fill =″#00FF00″FontRenderingEmSize =″20″
/>
<!--帶縮距的′Hello Windows′-->
<GlyphsOriginX=″200″OriginY=″150″UnicodeString =″Hello,Windows!″Indices=″;;;;;;;,89″FontUri=″file://C:/Windows/Fonts/Times.TTF″Fill =″#00FF00″FontRenderingEmSize =″20″/>
<!--沒有′fi′連字的′Open file′-->
<GlyphsOriginX=″200″OriginY=″250″UnicodeString =″Open file″FontUri=″file://C:/Windows/Fonts/Times.TTF″Fill =″#00FF00″FontRenderingEmSize =″20″/>
<!--帶′fi′連字的′Open file′-->
<GlyphsOriginX=″200″OriginY=″350″UnicodeString =″Open file″Indices=″;;;;;(2:1)191″FontUri=″file://C:/Windows/Fonts/Times.TTF″Fill =″#00FF00″FontRenderingEmSize =″20″/>
<!--使用預(yù)先合成的′ё′的′ёжик B TyMaHe′-->
<GlyphsOriginX=″200″OriginY=″450″xml:lang=″ru-RU″UnicodeString=″ёжик B TyMaHe″FontUri=″file://C:/Windows/Fonts/Times.TTF″Fill=″#00FF00″FontRenderingEmSize=″20″/>
<!--使用′e′和分音符的合成的′ёжик B TyMaHe′-->
<GlyphsOriginX=″200″OriginY=″500″xml:lang =″ru-RU″UnicodeString =″ёжик B TyMaHe″Indices=″(1:2)72;142,0,-45″FontUri=″C:/Windows/Fonts/Times.TTF″Fill =″#00FF00″FontRenderingEmSize =″20″/>
<!--′ёжик B TyMaHe′強(qiáng)制從右到左呈現(xiàn)示出按邏輯次序組合記號(hào)-->
<GiyphsOriginX=″200″OriginY=″550″BidiLevel =″1″xml:lang =″ru-RU″UnicodeString =″ёЖик B TyMaHe″Indices=″(1:2)72;142,0,-45″FontUri=″file://C:/Windows/Fonts/Times.TTF″Fill =″#00FF00″FontRenderingEmSize =″20″/>
</Canvas>
優(yōu)化字形標(biāo)記的大小如果目標(biāo)客戶端能可靠地重新生成標(biāo)記細(xì)節(jié),如字形索引和前進(jìn)寬度,則可從標(biāo)記中省略它們。以下選項(xiàng)允許常用簡(jiǎn)單腳本的顯著優(yōu)化。
優(yōu)化字形索引的標(biāo)記當(dāng)在Unicode串中的字符位置和字形串中的字形位置之間有一對(duì)一映射,并且字形索引是字體的CMAP(字符映射)表中的值,并且Unicode字符有明確的語義時(shí),字形索引可以從標(biāo)記中省略。
當(dāng)字符到字形的映射時(shí),應(yīng)當(dāng)在標(biāo)記中提供字形索引●不是一對(duì)一,如兩個(gè)或更多個(gè)碼點(diǎn)形成單個(gè)字形(連字),或者●一個(gè)碼點(diǎn)生成多個(gè)字形,或者●發(fā)生了任一其它形式的字形替換,如通過OpenType特征的應(yīng)用。
當(dāng)呈現(xiàn)引擎可能替換不同于字體的CMAP(字符映射)表中字形的字形時(shí),應(yīng)當(dāng)在標(biāo)記中提供字形索引。當(dāng)期望的字形表示不是字體的CMAP表中的字形時(shí),應(yīng)當(dāng)提供字形索引。
字形位置的優(yōu)化標(biāo)記當(dāng)所需要的前進(jìn)寬度的確是字體的HMTX(水平度量)或VMTX(垂直度量)表中的字形的前進(jìn)寬度時(shí),字形前進(jìn)寬度可以從標(biāo)記中省略。
當(dāng)為零時(shí),字形垂直偏移可以從標(biāo)記中省略。這對(duì)于基礎(chǔ)字符幾乎總是真的,并且對(duì)于較簡(jiǎn)單的腳本中的組合記號(hào),通常也是真。然而,對(duì)于諸如阿拉伯語和印度語等更復(fù)雜的腳本中的組合記號(hào),這通常是假。
字形標(biāo)志的優(yōu)化標(biāo)記對(duì)于具有正常調(diào)整優(yōu)先級(jí)的基礎(chǔ)字形,字形標(biāo)志可以被省略。
總結(jié)上述模塊化內(nèi)容框架和文檔格式方法與系統(tǒng)提供了一組構(gòu)件塊,用于排版、包裝、分發(fā)和呈現(xiàn)以文檔為中心的內(nèi)容。這些構(gòu)件塊定義了用于文檔格式的平臺(tái)無關(guān)框架,使軟件和硬件系統(tǒng)能夠可靠和一致地生成、交換和顯示文檔。所示并描述的影響范圍包格式提供了一種用于以在各種各樣環(huán)境中和跨各種各樣情形的設(shè)備和應(yīng)用程序之中用完全保真度顯示或打印影響范圍包的內(nèi)容的方式儲(chǔ)存已編頁碼或預(yù)編頁碼的文檔的格式。盡管以對(duì)結(jié)構(gòu)特征和/或方法步驟專用的語言描述了本發(fā)明,然而可以理解,所附權(quán)利要求書中定義的本發(fā)明不必要限于所描述的具體特征或步驟。相反,這些具體特征和步驟是作為實(shí)現(xiàn)要求保護(hù)的本發(fā)明的較佳形式來公開的。
權(quán)利要求
1.一種系統(tǒng),包括一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì);駐留在所述介質(zhì)上的軟件指令,當(dāng)被執(zhí)行時(shí),所述軟件指令能夠用一標(biāo)記表示來表示文檔,所述標(biāo)記表示包括將一有序的頁面序列邏輯地綁定成單個(gè)多頁文檔的第一元素;以及各自為所述第一元素的子元素且引用所述文檔的單個(gè)頁面的內(nèi)容源的一個(gè)或多個(gè)第二元素。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述元素共同描述一固定有效載荷。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述元素可被映射到一相關(guān)聯(lián)的對(duì)象類。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第一元素可具有包括頁面高度和頁面寬度的特性。
5.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第二元素可具有包括所述單個(gè)頁面的頁面高度和頁面寬度的特性。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第二元素引用一包含固定頁面標(biāo)記的固定頁面部件,所述固定頁面標(biāo)記描述了與呈現(xiàn)所述文檔相關(guān)聯(lián)的屬性和附加元素。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第二元素引用一包含固定頁面標(biāo)記的固定頁面部件,所述固定頁面標(biāo)記描述了與呈現(xiàn)所述文檔相關(guān)聯(lián)的屬性和附加元素,并且其中,所述固定頁面標(biāo)記包括必需的頁面高度屬性和必需的頁面寬度屬性。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第二元素引用一包含固定頁面標(biāo)記的固定頁面部件,所述固定頁面標(biāo)記描述了與呈現(xiàn)所述文檔相關(guān)聯(lián)的屬性和附加元素,并且其中,所述固定頁面標(biāo)記的屬性可用多種方式來表達(dá)。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是XML特性。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是通過資源字典引用。
11.如權(quán)利要求8所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是通過資源字典引用,并且其中,引用的資源字典容納由所述資源字典引用所引用的一個(gè)或多個(gè)復(fù)雜屬性。
12.如權(quán)利要求8所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為被表達(dá)為XML子元素的資源字典。
13.如權(quán)利要求8所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML子元素。
14.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述第二元素引用一包含固定頁面標(biāo)記的固定頁面部件,所述固定頁面標(biāo)記描述了與呈現(xiàn)所述文檔相關(guān)聯(lián)的屬性和附加元素,其中,所述附加元素中的至少一些包括描述描述如何進(jìn)行繪圖的一個(gè)或多個(gè)元素以及將其它元素分組的至少一個(gè)分組元素。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,繪圖和分組元素具有包括Opacity特性、Clip特性、RenderTransform特性和OpacityMask特性的公共特性。
16.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述分組元素對(duì)共享一公共特性的元素分組。
17.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述分組元素具有可用多種方式來表達(dá)的屬性。
18.如權(quán)利要求17所述的系統(tǒng),其特征在于,可表達(dá)分組元素屬性的一種方式是作為XML特性。
19.如權(quán)利要求17所述的系統(tǒng),其特征在于,可表達(dá)分組元素屬性的一種方式是通過資源字典引用。
20.如權(quán)利要求17所述的系統(tǒng),其特征在于,可表達(dá)分組元素屬性的一種方式是作為被表達(dá)為XML子元素的資源字典,其中資源字典條目可用由所述分組元素分組的元素來引用。
21.如權(quán)利要求17所述的系統(tǒng),其特征在于,可表達(dá)分組元素屬性的一種方式是作為XML子元素。
22.如權(quán)利要求17所述的系統(tǒng),其特征在于,所述分組元素可包括描述如何進(jìn)行繪圖的子元素以及對(duì)其它元素分組的分組元素。
23.如權(quán)利要求14所述的系統(tǒng),其特征在于,描述如何進(jìn)行繪圖的所述附加元素之一包括描述幾何區(qū)域的元素。
24.如權(quán)利要求23所述的系統(tǒng),其特征在于,所述一個(gè)元素具有可用多種方式來表達(dá)的屬性。
25.如權(quán)利要求24所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML特性。
26.如權(quán)利要求24所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML特性,其中屬性用于定義文本或幾何區(qū)域的外觀。
27.如權(quán)利要求24所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是通過資源字典引用。
28.如權(quán)利要求24所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是通過資源字典引用,其中屬性用于定義文本或幾何區(qū)域的外觀。
29.如權(quán)利要求24所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML子元素。
30.如權(quán)利要求24所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML子元素,其中屬性用于定義文本或幾何區(qū)域的外觀。
31.如權(quán)利要求14所述的系統(tǒng),其特征在于,描述如何進(jìn)行繪圖的所述附加元素之一包括描述幾何區(qū)域的元素,其中所述一個(gè)元素具有可用多種方式來表達(dá)的屬性,其中圖像是用幾何區(qū)域來表達(dá)的,且ImageBrush屬性可用多種方式來表達(dá)。
32.如權(quán)利要求14所述的系統(tǒng),其特征在于,描述如何進(jìn)行繪圖的所述附加元素之一包括表示文本的元素。
33.如權(quán)利要求32所述的系統(tǒng),其特征在于,所述一個(gè)元素具有可用多種方式來表達(dá)的屬性。
34.如權(quán)利要求32所述的系統(tǒng),其特征在于,所述一個(gè)元素具有可用多種方式來表達(dá)的屬性,其中屬性用于定義文本或幾何區(qū)域的外觀。
35.如權(quán)利要求33所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML特性。
36.如權(quán)利要求33所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML特性,其中屬性用于定義文本或幾何區(qū)域的外觀。
37.如權(quán)利要求33所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是通過資源字典引用。
38.如權(quán)利要求33所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是通過資源字典引用,并且其中,屬性用于定義文本或幾何區(qū)域的外觀。
39.如權(quán)利要求33所述的系統(tǒng),其特征在于,可表達(dá)屬性的一種方式是作為XML子元素。
40.一種方法,包括用標(biāo)記表示來表示文檔,所述標(biāo)記表示包括將一有序頁面序列邏輯地綁定成單個(gè)多頁文檔的第一元素;各自是所述第一元素的子元素且引用所述文檔的相關(guān)聯(lián)頁面的內(nèi)容源的多個(gè)第二元素;以及將所述表示結(jié)合到可包含同一文檔的不同表示的單個(gè)包中。
41.如權(quán)利要求40所述的方法,其特征在于,所述表示之一包括固定有效載荷。
42.如權(quán)利要求40所述的方法,其特征在于,所述單個(gè)包可包含至少從以下各部件中選擇的部件固定頁面部件、固定面板部件、字體部件、圖像部件、排版部件、描述性元數(shù)據(jù)部件或打印票據(jù)部件。
43.一種方法,包括接收各自可包含文檔的不同表示的一個(gè)或多個(gè)包,各個(gè)包分別包含一標(biāo)記表示,所述標(biāo)記表示包括將一有序頁面序列邏輯地綁定成單個(gè)多頁文檔的第一元素;各自是所述第一元素的子元素且引用所述文檔的相關(guān)聯(lián)頁面的內(nèi)容源的多個(gè)第二元素;以及消費(fèi)所述單個(gè)包。
44.如權(quán)利要求43所述的方法,其特征在于,所述表示之一包括固定有效載荷。
45.如權(quán)利要求43所述的方法,其特征在于,所述一個(gè)或多個(gè)包中的至少一些可包含至少從以下各部件中選擇的部件固定頁面部件、固定面板部件、字體部件、圖像部件、排版部件、描述性元數(shù)據(jù)部件或打印票據(jù)部件。
全文摘要
描述了模塊化內(nèi)容框架和文檔格式方法與系統(tǒng)。所描述的框架和格式定義了一組用于排版、打包、分發(fā)和呈現(xiàn)以文檔為中心的內(nèi)容的構(gòu)件塊。這些構(gòu)件塊為文檔格式定義了使軟件和硬件系統(tǒng)能夠可靠且一致地生成、交換和顯示文檔的平臺(tái)無關(guān)框架。該框架和格式是用靈活且可擴(kuò)展的方式來設(shè)計(jì)的。除該通用框架和格式之外,使用該通用框架定義了一種稱為影響范圍包(reach package)格式的特定格式。影響范圍包格式是一種用于儲(chǔ)存分頁文檔的格式。影響范圍包的內(nèi)容可在各種各樣環(huán)境中且跨各種各樣情形的設(shè)備和應(yīng)用程序之中用完全的保真度來顯示或打印。
文檔編號(hào)G06F17/24GK1954314SQ200480042890
公開日2007年4月25日 申請(qǐng)日期2004年7月23日 優(yōu)先權(quán)日2004年4月30日
發(fā)明者D·F·埃默森, D·奧恩斯坦, G·謝克特, J·迪尼埃茲, J·金, S·蘇布拉馬尼亞安, O·H·弗爾, W·朱, M·J·希爾伯格, D·C·布朗, M·V·雷諾, J·D·泰納斯基 申請(qǐng)人:微軟公司