两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于文檔處理的方法和裝置的制作方法

文檔序號:6475076閱讀:265來源:國知局
專利名稱:用于文檔處理的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及內(nèi)容框架、文檔格式、以及可利用兩者的相關(guān)方法和系統(tǒng)。
背景技術(shù)
目前,通常有許多不同類型的用以表示內(nèi)容的內(nèi)容框架,以及許多不同類型的用以格式化不同類型文檔的文檔格式。每一種這些框架和格式往往需要它自己的相關(guān)聯(lián)軟件,以便建立、產(chǎn)生、處理或消費相關(guān)聯(lián)文檔。對于那些具有安裝在適當(dāng)裝置上的特定相關(guān)聯(lián)軟件的人,建立、產(chǎn)生、處理或消費相關(guān)聯(lián)文檔并不成問題。但是對于那些不具有適當(dāng)軟件的人,通常建立、產(chǎn)生、處理或消費相關(guān)聯(lián)文檔就不可能了。
基于此背景,需要持續(xù)關(guān)注普遍存在的文檔的產(chǎn)生和消費。

發(fā)明內(nèi)容
描述了模塊化內(nèi)容框架和文檔格式的方法和系統(tǒng)。所述框架和格式定義用于組成、封裝、分發(fā)、以及描繪以文檔為中心的內(nèi)容的一組基塊。這些基塊定義能使軟件和硬件系統(tǒng)可靠并一致地產(chǎn)生、交換、以及顯示文檔的文檔格式的一個平臺無關(guān)框架。已以靈活和可擴(kuò)展的方式設(shè)計了該框架和格式。
除了該一般框架和格式以外,還使用該一般框架定義了一稱為可及包(reachpackage)格式的特定格式??杉鞍且环N用于存儲分頁文檔的格式。在廣泛環(huán)境的裝置和應(yīng)用程序上以及廣泛的情形中,可全保真地顯示或打印可及包的內(nèi)容。


圖1是根據(jù)一實施例示例性框架和格式的組件的框圖。
圖2是根據(jù)一實施例持有一包括若干部分的文檔的示例性包的框圖;圖3是根據(jù)一實施例示出產(chǎn)生包的示例性寫入器,以及讀取包的讀取器的框圖。
圖4示出將三個獨立頁面綁定在一起的示例部分。
圖5是根據(jù)一實施例示出被安排產(chǎn)生包含英語表示和法語表示的財務(wù)報告的示例性選擇器和各個序列的示圖。
圖6根據(jù)一實施例示出了寫入器和讀取器一起工作進(jìn)行有關(guān)包的通信的某些圖7示出了文檔的交叉多個部分的示例。
圖8和9示出了封裝如圖7所示文檔的多個部分的不同示例。
圖10根據(jù)一實施例示出了一示例性可及包,以及可組成包或在包中找到的每一個有效類型部分。
圖11根據(jù)一實施例示出了公共語言運行時概念到XML的示例性映射。
圖12根據(jù)一實施例示出了豎直和側(cè)面的字形度量。
圖13根據(jù)一實施例示出了一對一的集聚圖。
圖14根據(jù)一實施例示出了多對一的集聚圖。
圖15根據(jù)一實施例示出了一對多的集聚圖。
圖16根據(jù)一實施例示出了多對多的集聚圖。
具體實施例方式
縱覽本文檔描述了模塊化內(nèi)容框架和文檔格式。該框架和格式定義用于組成、封裝、分發(fā)、以及描繪以文檔為中心的內(nèi)容的一組基塊。這些基塊定義能使軟件和硬件系統(tǒng)可靠并一致地產(chǎn)生、交換、以及顯示文檔的文檔格式的一個平臺無關(guān)框架。已以靈活和可擴(kuò)展的方式設(shè)計了該框架和格式。在各個實施例中,對可包括的內(nèi)容類型、如何呈現(xiàn)內(nèi)容、或者在其上建立用于處理內(nèi)容的客戶機(jī)平臺都沒有限制。
除了該一般框架和格式以外,還使用該一般框架定義了一特定格式。該格式在本文檔中被稱為可及包格式,并且是一種用于存儲分頁或預(yù)先分頁文檔的格式。在廣泛環(huán)境中的裝置和應(yīng)用程序上以及廣泛的情形中,可全保真地顯示或打印可及包的內(nèi)容。
以下所述框架的目標(biāo)之一是確保根據(jù)以下所述框架和格式讀取或編寫產(chǎn)生的內(nèi)容的獨立編寫的軟件和硬件系統(tǒng)之間的可互操作性。為了獲取該可互操作性,所述格式定義了讀取或編寫內(nèi)容系統(tǒng)必須滿足的正式要求。
以下討論隨以下文字構(gòu)成,并呈現(xiàn)為兩個主要章節(jié)-標(biāo)題為“框架”的和標(biāo)題為“可及包格式”的章節(jié)。
標(biāo)題為“框架”的章節(jié)呈現(xiàn)了一說明性封裝模型,并描述了組成框架包的各個部分和關(guān)系。討論了有關(guān)使用框架包中描述性元數(shù)據(jù)的信息,以及映射到物理容件、擴(kuò)展框架標(biāo)記、以及使用框架版本化機(jī)制的過程。
標(biāo)題為“可及包格式”的章節(jié)研究了稱為可及包的一特定類型框架建立包的結(jié)構(gòu)。該章節(jié)還描述了專用于固定有效載荷的包的各部分,并定義了可及包標(biāo)記模型和繪制模型。該章節(jié)以示例性可達(dá)標(biāo)記元素及其屬性,以及說明性樣本結(jié)束。
作為以下討論的高級縱覽,考慮圖1,其中通常在100示出發(fā)明框架和格式的各方面。該框架的某些示例性組件在102示出,而可及包格式的某些組件在104示出。
框架102包括示例性組件,它們包括但不限于,關(guān)系組件、可插拔容件組件、交叉/流組件、以及版本化/可擴(kuò)展性組件,它們的每一個都在下面詳細(xì)描述。可及包格式104包括各組件,包括選擇器/序列器組件和包標(biāo)記定義組件。
在以下討論中,要不時參照圖1,從而讀取器可保持對所述組件在何處適于框架和包格式的觀察。
框架在以下討論中,提供了對一般框架的描述。主要的獨立子標(biāo)題包括“包模型”、“組成部分選擇器和序列器”、“描述性元數(shù)據(jù)”、“物理模型”、“物理映射”、以及“版本化和可擴(kuò)展性”。每個主要子標(biāo)題都具有一個或多個子標(biāo)題。
包模型本小節(jié)描述包模型,并包括描述包和部分、驅(qū)動器、關(guān)系、包關(guān)系以及開始部分的子標(biāo)題。
包和部分在所示和所述模型中,內(nèi)容被保持在包中。包是持有相關(guān)部分集合的邏輯實體。包的目的是把文檔的所有段(或其它類內(nèi)容)收集成編程者和終端用戶容易工作的一個對象。例如,參看圖2,其中示出了持有一文檔的示例性包200,該文檔包括多個部分表示該文檔的XML標(biāo)記部分202、描述在文檔中使用的字體的字體部分204、描述該文檔頁面的眾多頁面部分206、以及表示文檔中圖片的圖片部分。表示文檔的XML標(biāo)記部分202的好處在于,因為它無需解析包的整體內(nèi)容就允許可簡便搜索和引用。這將在下面變得更為顯然。
在本文檔中,介紹并討論了讀取器(也稱為消費者)和寫入器(也稱為生產(chǎn)者)的概念。作為在本文檔中使用的術(shù)語,讀取器指讀取模塊化內(nèi)容的基于格式文件或包的實體。作為在本文檔中使用的術(shù)語,寫入器指編寫模塊化內(nèi)容的基于格式的文件或包的實體。作為示例,參照圖3,其中示出了產(chǎn)生包的寫入器和讀取包的讀取器。通常,寫入器和讀取器將體現(xiàn)為軟件。在至少一實施例中,與創(chuàng)建和格式化包相關(guān)聯(lián)的許多處理成本和復(fù)雜性被置于寫入器之上。這從讀取器處移除了許多處理成本和復(fù)雜性,本領(lǐng)域技術(shù)人員將理解這背離了許多當(dāng)前模型。該方面將在下面變得顯然。
根據(jù)至少一實施例,單個包包含在該包中持有內(nèi)容的一個或多個表示。通常包將是單個文件,在本申請中稱為容件。例如這給予終端用戶用該文檔的所有組件(圖像、字體、數(shù)據(jù)等等)分發(fā)文檔的一方便方法。盡管包常常直接對應(yīng)于單個文件,并非總是必須這樣。包是可用各種方法物理表示的邏輯實體(例如,但非限制,單個文件、松散文件集合、數(shù)據(jù)庫、短暫地在網(wǎng)絡(luò)連接上傳送等)。因而,容件持有包,但并非所有的包都存儲在容件中。
抽象模型描述了獨立于任何物理存儲機(jī)制的包。例如,抽象模型不指向“文件”、“流”、或與包所處物理世界相關(guān)的其它物理術(shù)語。如下所述,抽象模型使用戶能創(chuàng)建用于各種物理格式、通信協(xié)議等的驅(qū)動器。類似地,當(dāng)一應(yīng)用程序想要打印圖像時,它使用打印機(jī)的抽象(由懂得特定類型打印機(jī)的驅(qū)動器代表)。因而,應(yīng)用程序無需知道特定的打印裝置,或如何與打印裝置通信。
容件提供在松散、不連貫文件上的許多優(yōu)點。例如,類似組件可集聚,而內(nèi)容可被索引和壓縮。另外,可標(biāo)識組件之間的關(guān)系,且可將版權(quán)管理、數(shù)字簽名、加密、以及元數(shù)據(jù)應(yīng)用到組件中。當(dāng)然,容件可被使用,且可包括未如上具體列舉的其它特征。
公共部分屬性在所示和所述實施例中,一個部分包括公共屬性(例如名稱)和字節(jié)流。這類似于文件流中的文件,或者HTTP服務(wù)器上的資源。除了其內(nèi)容之外,每個部分都具有一些公共部分屬性。它們包括名稱-該部分名稱,以及內(nèi)容類型-存儲在該部分中內(nèi)容的類型。各個部分還可具有一個或多個相關(guān)聯(lián)的關(guān)系,如下所述。
當(dāng)需要用某些方式引用一個部分的任何時候,使用部分名稱。在所示和所述實施例中,名稱被組織成一分層結(jié)構(gòu),類似于文件系統(tǒng)上的路徑或URI中的路徑。以下是部分名稱的示例/document.xml/tickets/ticket.
/images/march/summer.jpeg/pages/page4.xml如上可見,在該實施例中,部分名稱具有以下特征●部分名稱類似于傳統(tǒng)文件系統(tǒng)中的文件名;●部分名稱以前斜杠(‘/’)開始。
●類似于文件系統(tǒng)中的路徑或URI中的路徑,部分名稱可由一組類似目錄的名稱(上例中的tickets、images/march和pages)組織成一分層結(jié)構(gòu)。
●該分層結(jié)構(gòu)由斜杠劃分的分段組成。
●名稱的最后分段類似于傳統(tǒng)文件系統(tǒng)中的文件名。
重要的是,注意用于命名部分的規(guī)則,尤其是用于部分名稱的有效字符,對于本文中所述框架是特定的。這些部分名稱基于因特網(wǎng)標(biāo)準(zhǔn)URI命名規(guī)則。根據(jù)本實施例,本實施例中用于指定部分名稱的語法與在統(tǒng)一資源標(biāo)識符(URI一般語法)規(guī)范RFC2396的章節(jié)3.3(路徑組件)和5(相關(guān)URI引用)中定義的abs path語法嚴(yán)格匹配。
以下附加限制被應(yīng)用于abs path,作為有效的部分名稱●如在章節(jié)3(URI語法組件)和3.4(查詢組件)中定義的查詢組件,不可應(yīng)用于部分名稱。
●如在章節(jié)4.1(片斷標(biāo)識符)中描述的片斷標(biāo)識符,不能應(yīng)用于部分名稱。
●任何部分具有通過將*附加(“/”分段)于現(xiàn)有部分的部分名稱而創(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"|"f"mark ="-"|"-"|"."|"!"|"-"|"*"|"′"|"("|")"alpha=lowalpha|upalphalowalpha ="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"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é)點是文件夾,而葉節(jié)點是包含內(nèi)容的真正文件。名稱樹上這些類似文件夾的節(jié)點(即非葉節(jié)點)提供組織包中各部分的類似功能。然而,重要的是,要記住這些“文件夾”僅作為概念存在于命名分層結(jié)構(gòu)中-它們在一致格式中沒有其它表現(xiàn)。
部分名稱不駐留于“文件夾”層上。具體地,部分命名分層結(jié)構(gòu)中的非葉節(jié)點(“文件夾”)不能包含一個部分,以及帶有同一名稱的子文件夾。
在所示和所述實施例中,每一部分都具有標(biāo)識在該部分中所存儲的是哪一類內(nèi)容的內(nèi)容類型。內(nèi)容類型的示例包括image/jpegtext/xmltext/plain;charset=“us-ascii”在所示框架中使用的內(nèi)容類型如RFC2045(多用途因特網(wǎng)郵件擴(kuò)展;(MIME))中所定義。具體地,每個內(nèi)容類型包括介質(zhì)類型(例如文本)、子類型(例如純文本)、以及鍵=值形式(例如charset=“us-ascii”)中可選的參數(shù)組;多個參數(shù)由分號分隔。
部分尋址部分常常將包含對其它部分的引用。作為一簡單示例,想像一容件具有兩部分標(biāo)記文件和圖像。標(biāo)記文件想要持有對圖像的引用,從而在處理標(biāo)記文件時,可標(biāo)識和定位相關(guān)聯(lián)的圖像。內(nèi)容類型和XML模式的設(shè)計者可使用URI來表示這些引用。為了使其成為可能,要對部分名稱世界和URI世界之間的映射進(jìn)行定義。
為了能夠使用包中的URI,在估算基于包的內(nèi)容中的URI時,必須使用特定的URI解釋規(guī)則包本身應(yīng)視為URI引用的“授權(quán)”,而URI路徑組件被用以導(dǎo)航包中的部分名稱分層結(jié)構(gòu)。
例如,給定一包的URI:http://www.example.com/foo/something.package,對/abc/bar.xml的引用被解釋為意指稱為/abc/bar.xml的部分,而不是http://www.example.com/abc/bar.xml的URI。
當(dāng)在容件中必須具有從一部分到另一部分的引用時,應(yīng)當(dāng)使用相對URI。使用相對引用使容件的內(nèi)容能被一起傳送到一不同容件中(或從例如文件系統(tǒng)移到容件中),而不更改部分之間的引用。
來自一部分的相對引用被解釋為相對于包含該引用部分的“基本URI”。缺省地,一部分的基本URI是該部分的名稱。
考慮包括具有以下名稱的各部分的一容件/markup/page.xml/images/picture.jpeg/images/other_picture.jpeg如果“/markup/page.xml”部分包含對“../images/picture.jpeg”的URI引用,則根據(jù)以上規(guī)則該引用必須被解釋為指部分名稱“/images/picture.jpeg”。
某些內(nèi)容類型提供通過在內(nèi)容中指定不同的基取代缺省基URI的方法。在出現(xiàn)這些取代之一的情況應(yīng)使用直接指定的URI,而不是缺省的。
有時,在一部分中將一段或一特定點“標(biāo)明地址”是有用的。在URI世界中,使用片斷標(biāo)識符[參見例如RFC2396]。在一容件中,該機(jī)制也同樣地起作用。具體地,片斷是包含在經(jīng)地址標(biāo)明部分的內(nèi)容類型上下文中可理解的附加信息的字符串。例如,在視頻文件中片斷可標(biāo)識一幀,在XML文件中它可通過xpath標(biāo)識該XML文件的一部分。
結(jié)合標(biāo)明一個部分的地址的URI使用片斷標(biāo)識符,以便標(biāo)識該經(jīng)地址標(biāo)明部分的片斷。該片斷標(biāo)識符是可選的,且由“#”字符將其與URI分隔。這樣,它就不是URI的一部分,但常結(jié)合URI一起使用。
以下討論提供用于部分命名的某些指導(dǎo),因為該包和部分的命名模型是很靈活的。這種靈活性允許框架包的廣泛應(yīng)用。然而,重要的是要理解,框架被設(shè)計成使能多個無關(guān)軟件系統(tǒng)可相互不沖突地操縱包的“自己”部分。為了允許這樣,以下提供了使其可能的某些方針。
此處給出的方針描述了一種機(jī)制,它用于最小化或至少減少部分的命名沖突的發(fā)生,并在沖突發(fā)生時處理它們。在包中創(chuàng)建一包中各部分的寫入器必須采取步驟,以檢測和處理包中現(xiàn)有部分的命名沖突。在命名沖突產(chǎn)生時,寫入器不可盲目地替換現(xiàn)有部分。
在包確保由單個寫入器操縱的情形中,該寫入器可背離這些方針。然而,如果有多個獨立寫入器共享一包的可能性,則所有寫入器必須遵循這些方針。然而,建議所有寫入器在任何情形中都遵循這些方針。
●要求將一些部分加入到現(xiàn)有容件的寫入器在命名分層結(jié)構(gòu)的新“文件夾”中這樣做,而不是直接將這些部分置于根或先前存在的文件夾中。這樣,名字沖突的可能性被限于該部分名字的第一分段中。在該新文件夾中創(chuàng)建的部分可沒有與現(xiàn)有部分沖突的風(fēng)險而被命名。
●當(dāng)文件夾的“優(yōu)選”名稱已由現(xiàn)有部分使用,寫入器必須采用某些用于選擇另外文件夾名稱的策略。寫入器應(yīng)使用將數(shù)字附加于優(yōu)選名稱,直到找到一可用文件夾名稱的策略(可能在若干次不成功迭代后會求助于GUID)。
●該政策的一個結(jié)果是讀取器不應(yīng)嘗試通過一“魔法”或“眾所周知”的部分名稱來查找一個部分。相反,寫入器必須創(chuàng)建與他們所創(chuàng)建的每個文件夾中至少一個部分的包關(guān)系。讀取器必須使用這些包關(guān)系來查找這些部分,而不依賴于眾所周知的名稱。
●一旦讀取器已找到文件夾中的至少一個部分(通過上述包關(guān)系之一),它可使用該文件夾中有關(guān)眾所周知部分名稱的慣例來找到其它部分。
驅(qū)動器在此所述的文件格式可由不同應(yīng)用程序、不同文檔類型等使用-其中許多具有沖突的使用、沖突格式等。使用一個或多個驅(qū)動器來消解各種沖突,諸如文件格式中的不同、通信協(xié)議中的不同等。例如,不同文件格式包括松散文件和復(fù)合文件,而不同通信協(xié)議包括http、網(wǎng)絡(luò)、以及無線協(xié)議。一組驅(qū)動器將各種文件格式和通信協(xié)議抽象為單個模型??蔀椴煌榫?、不同客戶要求、不同物理配置等提供多個驅(qū)動器。
關(guān)系包中的各部分可包含對該包中其它部分的引用。然而,一般而言,這些引用用對該部分的內(nèi)容類型的特定方式在引用部分中來表示;即,以任意的標(biāo)記或應(yīng)用程序特定編碼。對于來自不懂得包含這種引用的部分的內(nèi)容類型的讀取器的各部分,這有效地隱藏了它們之間的內(nèi)部鏈接。
甚至對于公共內(nèi)容類型(諸如在可及包章節(jié)中所述的固定有效載荷標(biāo)記),讀取器應(yīng)需要解析該部分的所有內(nèi)容,以發(fā)現(xiàn)并確定對其它部分的引用。例如,在實現(xiàn)一次打印一頁文檔的打印系統(tǒng)時,可能需要標(biāo)識該特定頁面中包含的圖片和字體?,F(xiàn)有系統(tǒng)必須解析每頁的所有信息(這是耗時的),并必須懂得每頁的語言(這并非是某些裝置或讀取器的情形,例如當(dāng)通過到裝置途中的處理器管線時執(zhí)行對文檔的中間處理的裝置)。相反,在此所述的系統(tǒng)和方法使用關(guān)系來標(biāo)識各部分之間的關(guān)系,并描述這些關(guān)系的本質(zhì)。該關(guān)系語言是簡單并一次定義的,從而讀取器無需多種不同語言的知識就可理解這些關(guān)系。在一實施例中,用XML將關(guān)系表示為單個部分。每個部分具有包含該部分為源的關(guān)系的相關(guān)聯(lián)關(guān)系部分。
例如,電子制表應(yīng)用程序使用該格式并將不同的電子表格存儲為各部分。對電子制表語言一無所知的應(yīng)用程序仍可發(fā)現(xiàn)與這些電子表格相關(guān)聯(lián)的各種關(guān)系。例如,應(yīng)用程序可發(fā)現(xiàn)電子表格中的圖像和與電子表格相關(guān)聯(lián)的元數(shù)據(jù)。提供一示例關(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>
該模式定義了兩種XML元素,一稱為“多重關(guān)系”而另一稱為“關(guān)系”。使用該“關(guān)系”元素來描述在此所述的單一關(guān)系,并具有以下屬性(1)“目標(biāo)”,表示與源部分相關(guān)的部分,(2)“名稱”,表示該關(guān)系的類型或本質(zhì)。定義“多重關(guān)系”元素以使其能持有零個或多個“關(guān)系”元素,并僅提供將這些“關(guān)系”元素收集到一單元中的服務(wù)。
在此所述的系統(tǒng)和方法引入了一種解決這些問題的稱為“多重關(guān)系”的高級機(jī)制。多重關(guān)系提供了一種表示包中源部分和目標(biāo)部分之間連接類型的附加方法。無需查看各部分中的內(nèi)容,多重關(guān)系就使得各部分之間的連接可被直接發(fā)現(xiàn),從而它們不依賴于內(nèi)容特定模式并得以更快地確定。另外,這些多重關(guān)系是協(xié)議無關(guān)的。各種不同關(guān)系可與一特定部分相關(guān)聯(lián)。
多重關(guān)系提供第二種重要功能允許各部分不經(jīng)更改而互相關(guān)聯(lián)。有時這種信息作為“注解”的形式,其中“經(jīng)注解”部分的內(nèi)容類型沒有定義附加給定信息的方法??赡艿氖纠ǜ郊用枋鲂栽獢?shù)據(jù)、打印標(biāo)簽、以及真正注解。最后,某些情景不需要特別更改一現(xiàn)有部分,就能將信息具體地附加到該部分-例如,當(dāng)該部分已加密并不能解密時,或者當(dāng)該部分被數(shù)字簽名而更改將使簽名無效時。在另一示例中,用戶可能想要將注解添加到JPEG圖像文件中。該JPEG圖像格式目前并不提供對標(biāo)識注解的支持。改變JPEG格式以適應(yīng)該用戶的需要并不現(xiàn)實。然而,在此所述的系統(tǒng)和方法使用戶無需更改JPEG圖像格式就能向JPEG文件提供一注解。
在一實施例中,使用XML在關(guān)系部分標(biāo)識各關(guān)系。容件中每個部分是具有一相關(guān)聯(lián)關(guān)系部分的一個或多個關(guān)系的源。該關(guān)系部分持有(使用內(nèi)容類型應(yīng)用程序/占位符(Application/PLACEHOLDER)以XML表達(dá))該源部分的關(guān)系列表。
以下的圖4示出了在其中“書脊”部分402(類似于固定板)將三個頁面406、408和410綁定在一起的環(huán)境400。由書脊綁定在一起的頁面組具有相關(guān)聯(lián)的“打印標(biāo)簽”404。另外,頁面2具有它自己的打印標(biāo)簽412。使用關(guān)系來表示從書脊部分402到其打印標(biāo)簽404的連接,以及從頁面2到其打印標(biāo)簽412的連接。在圖4的排列中,書脊部分402將具有包含將書脊連接到標(biāo)簽1的關(guān)系的相關(guān)聯(lián)關(guān)系部分,如下例所示。
<Relationships xmlns=”http://mmcfrels-PLACEHOLDER”>
<RelationshipTarget=”../tickets/ticket1.xml”Name=”http://mmcf-printing-ticket/PLACEHOLDER”/>
</Relationships>
使用嵌套于單個<Relationships>元素中的<Relationship>元素來表示各關(guān)系。這些元素在http://mmcfrels(占位符)名空間中定義。示例關(guān)系參見以上的示例模式及相關(guān)討論。
關(guān)系元素具有以下附加屬性

名稱屬性不必是實際的地址。不同的關(guān)系類型根據(jù)其名字來標(biāo)識。用為XML名空間定義名空間的相同方法來定義這些名稱。具體地,通過使用在因特網(wǎng)領(lǐng)域名空間之后進(jìn)行模式化的名字,不經(jīng)協(xié)調(diào)的各部分可安全地創(chuàng)建不沖突的關(guān)系名字-就像對XML名空間它們也可以一樣。
該關(guān)系部分不被允許參與其它關(guān)系。然而,它是所有其它意義上的第一類部分(例如,它是URL可尋址的、它可被打開、讀取、刪除等等)。通常關(guān)系并不指向包外的東西。用來標(biāo)識關(guān)系目標(biāo)的URI通常不包括URI模式。
一個部分及其相關(guān)聯(lián)的關(guān)系部分通過命名慣例來連接。在此例中,書脊的關(guān)系部分將被存儲在/content/_rels/spine.xml.rels中,而頁面2的關(guān)系將被存儲在/content/rels/p2.xml.rels中。注意在此使用的兩個特定命名慣例。首先,用于命名分層結(jié)構(gòu)中給定“文件夾”中某些部分的關(guān)系部分被存儲在稱為rels的“子文件夾”中(以標(biāo)識關(guān)系)。其次,通過將.rels擴(kuò)展附加到原始部分的名字上,形成該關(guān)系保持部分的名字。在特定實施例中,關(guān)系部分具有內(nèi)容類型應(yīng)用程序/xml+關(guān)系占位符。
關(guān)系表示兩部分之間的有向連接。由于表示該關(guān)系的方法,從其源部分遍歷各關(guān)系是有效的(因為找到任何給定部分的關(guān)系部分是瑣碎的)。然而,從該關(guān)系的目標(biāo)反向遍歷關(guān)系就不太有效了(因為尋找該部分所有關(guān)系的方法是通過該容件中的所有關(guān)系查看)。
為了使反向遍歷關(guān)系稱為可能,使用新的關(guān)系來表示其它(可遍歷)方向。這是關(guān)系類型設(shè)計者可使用的建模技術(shù)。接著以上示例,如果能夠找到具有附加標(biāo)簽1的書脊是重要的,則使用連接從標(biāo)簽到書脊的第二關(guān)系,諸如在content/_rels/p1.xml.rels中In content/_rel.s/p1.xml.rels:
<Relationships xmlns=”http://mmcfrels-PLACEHOLDER”>
<RelationshipTarget=”/content/spine.xml”Name=”http://mmcf-printing-spine/PLACEHOLDER”/>
</Relationships>
包關(guān)系“包關(guān)系”被用以尋找包中眾所周知的部分。該方法避免依賴于尋找包中部分的命名慣例,并確保不會有不同有效載荷中同一部分名稱之間的沖突。
包關(guān)系是其目標(biāo)為一部分而其源卻不是一部分(源是整個的包)的特定關(guān)系。要具有“眾所周知”部分是真正地具有幫助你找出該部分的“眾所周知”的關(guān)系名字。這會起作用,因為有一明確定義的機(jī)制使關(guān)系能由非協(xié)調(diào)各部分命名,而某些實施例對部分名字則不包含這種機(jī)制-這些實施例受限于一組方針。包關(guān)系在包關(guān)系部分中被發(fā)現(xiàn),并使用標(biāo)準(zhǔn)命名常規(guī)命名用于關(guān)系部分。因而,它被命名為“/_rels/.rels”。
在此包關(guān)系部分中的關(guān)系在尋找眾所周知的部分中是有用的。
開始部分包層次、眾所周知部分的一示例是包“開始”部分。這是通常在打開包時所處理的部分。它表示存儲在該包中文檔內(nèi)容的邏輯根。由一眾所周知的包關(guān)系,可定位包的開始部分。在所示示例中,該關(guān)系具有以下名稱http://mmcf-start-part-PLACEHOLDER。
組成部分選擇器和序列所述框架定義了用于從部分選擇器和序列而建立高階結(jié)構(gòu)的兩種機(jī)制。
選擇器是在眾多其它部分之間進(jìn)行“選擇”的一個部分。例如,選擇器部分可在表示一文檔英語版本的部分和表示一文檔法語版本的部分之間選擇。序列則是可對眾多其它部分進(jìn)行“排序”的一個部分。例如,序列部分可組合兩個部分(成為線性序列),其中之一表示五頁文檔而另一部分則表示十頁文檔。
這兩種組合部分(序列和選擇器)以及用于組裝它們的規(guī)則組成了一組合模型。組合部分可構(gòu)成其它組合部分,因此可具有例如在兩個組合之間進(jìn)行選擇的選擇器。作為示例,考慮圖5,其中示出了包含英語表示和法語表示的財務(wù)報告示例。每一表示還由緒論(封面)及隨后的財務(wù)報表(電子表格)組成。在此例中,選擇器500在報告的英語和法語表示之間選擇。如果選擇了英語表示,序列502對英語緒論部分506和英語財務(wù)報表部分508進(jìn)行排序。另外,如果選擇了法語表示,序列504對法語緒論部分510和法語財務(wù)報表部分512進(jìn)行排序。
組合部分XML在所示和所述實施例中,使用少量XML元素描述組合部分,這些元素都是從公共組合名空間中提取的。作為示例,考慮以下Element:<selection>
Attributes:NoneAllowed Child Elements:<item>
Element:<sequence>
Attributes:NoneAllowed Child Elements:<item>
Element:<item>
Attributes:Target-thepart name ofa part in the composition作為示例,這里是以上圖5示例的XML
MainDocument.XML<selection>
<item target="EnglishRollup.xml"/>
<item target="FrenchRollup.xml"/>
</selection>
EnglishRollup.XML<sequence>
<item target="EnglishIntroduction.xml″/>
<item target="EnglishFinancials.xml"/>
</sequence>
FrenchRollup.XML<sequence>
<item target="FrenchIntroduction.xml">
<item target="FrenchFinancials.xml">
</sequence>
在該XML中,MainDocument.xml表示該包中的整個部分,并依靠“選擇”標(biāo)記指示要在由“條目”標(biāo)記(即“EnglishRollup.xml”和“FrenchRollup.xml”)封裝的不同條目之間作出選擇。
EnglishRollup.xml和FrenchRollup.xml是依靠“選擇”標(biāo)記使由其相應(yīng)“條目”標(biāo)記封裝的相應(yīng)條目在一起排序的序列。
因而,提供了簡單的XML語法用于描述選擇器和序列。該組合塊中的每個部分被建立,并執(zhí)行一操作-選擇或排序。通過使用各部分的分層結(jié)構(gòu),可建立選擇和序列的不同穩(wěn)固集合。
組合塊包的組合塊包括從該包開始部分可達(dá)的所有組合部分(選擇器或序列)的集合。如果該包的開始部分既非選擇器也不是序列,則組合塊可視為空。如果開始部分是組合部分,在該組合部分中的子<item>(<條目>)被迭代地遍歷,以產(chǎn)生組合部分的有向、非循環(huán)圖(當(dāng)遇到一非組合部分時停止遍歷)。該圖是組合塊(且根據(jù)該實施例,為使該包有效它必須是非循環(huán)的)。
確定組合語義已如上建立了相對簡單的XML語法,以下討論描述表示信息從而可基于內(nèi)容類型作出選擇的方法。即,上述XML提供足夠信息以使讀取器能定位一起組裝成組合的各部分,但并不提供足夠信息來幫助讀取器知道更多有關(guān)該組合的本質(zhì)。例如,給定包括兩部分的一選擇,讀取器怎么知道作出選擇是基于什么呢(例如語言、紙張尺寸等)?答案是這些規(guī)則與組合部分的內(nèi)容類型相關(guān)聯(lián)。因而,基于語言在各表示之間選取的選擇器部分與基于紙張尺寸在各表示之間選取的選擇器部分將具有不同的相關(guān)聯(lián)內(nèi)容類型。
一般框架定義了這些內(nèi)容類型的一般形式Application/XML+Selector-SOMETHINGApplication/XML+Sequence-SOMETHING這些內(nèi)容類型中的SOMETHING由表示選擇或序列本質(zhì)的字替換,例如頁面尺寸、色彩、語言、讀取器裝置上的駐留軟件等等。然后,在該框架中,可創(chuàng)造出所有類型的選擇器和序列,并每個可具有極為不同的語義。
所述框架還定義以下眾所周知的內(nèi)容類型,用于所有讀取器或讀取裝置必須懂得的選擇器和序列。

作為示例,考慮以下內(nèi)容。假設(shè)一包包含具有一頁的文檔,且在該頁中間有一要顯現(xiàn)視頻的區(qū)域。在此例中,該頁的視頻部分可包括Quichtime視頻形式的視頻。這種情形的一個問題是并非普遍都懂得Quicktime視頻。然而,假設(shè)根據(jù)該框架尤其是以下所述的可及包格式,有一普遍理解的圖像格式-JPEG。當(dāng)產(chǎn)生包含上述文檔的包時,生產(chǎn)者可在將視頻定義為該包一部分之外,為該頁定義JPEG圖像并放入一SupportedContentType選擇器,從而如果用戶的計算機(jī)具有懂得Quicktime視頻的軟件,選擇Quicktime視頻,否則選擇JPEG圖像。
因而,如上所述,框架層的選擇器和序列組件允許建立在此例中用XML定義的穩(wěn)固分層結(jié)構(gòu)。另外,有使用內(nèi)容類型以標(biāo)識選擇器和序列行為的明確定義的方法。此外,根據(jù)一實施例,一般框架包括一預(yù)先定義的特定內(nèi)容類型,它允許基于什么是消費者(例如讀取器或讀取裝置)懂得的和不懂得的來處理和利用包。
可使用類似規(guī)則來定義其它組合部分的內(nèi)容類型,其示例如下所述。
描述性元數(shù)據(jù)根據(jù)一實施例,描述性元數(shù)據(jù)部分給包的寫入器或生產(chǎn)者提供一種用以存儲屬性值的方法,其中屬性使這些包的讀取器能可靠地發(fā)現(xiàn)這些值。通常使用這些屬性來記錄有關(guān)整個包的附加信息、以及該容件中的各個部分。例如,包中的描述性元數(shù)據(jù)可持有信息,諸如該包的作者、關(guān)鍵字、歸納等。
在所示和所述實施例中,說明性元數(shù)據(jù)用XML來表達(dá),用眾所周知的內(nèi)容類型存儲在各部分中,并能使用眾所周知的關(guān)系類型來發(fā)現(xiàn)。
描述性元數(shù)據(jù)持有元數(shù)據(jù)屬性。元數(shù)據(jù)屬性由屬性名稱以及一個或多個屬性值來表示。屬性值具有簡單的數(shù)據(jù)類型,因而每個數(shù)據(jù)類型由單個XML名稱來描述。描述性元數(shù)據(jù)屬性具有簡單類型的事實并非意味著不能在包中用復(fù)雜的XML類型來存儲數(shù)據(jù)。在此情形中,必須將信息存儲作為全XML部分。在完成之后,移除有關(guān)僅使用簡單類型的所有限制,但丟失了“單調(diào)”描述性元數(shù)據(jù)的簡單性。
除了用于定義屬性集的一般機(jī)制,有使用該機(jī)制存儲的一特定的、明確定義的文檔內(nèi)核屬性集。這些文檔內(nèi)核屬性通常被用來描述文檔,并包括類似標(biāo)題、關(guān)鍵字、作者等的屬性。
最后,持有這些文檔內(nèi)核屬性的元數(shù)據(jù)部分也可持有附加的定制屬性,以及文檔內(nèi)核屬性。
元數(shù)據(jù)格式根據(jù)一實施例,描述性元數(shù)據(jù)部分具有內(nèi)容類型,并根據(jù)以下規(guī)則由關(guān)系將其作為目標(biāo)

根據(jù)一實施例使用以下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>

文檔內(nèi)核屬性以下是文檔內(nèi)核屬性的表格,其中包括屬性名稱、屬性類型以及描述。


物理模型物理模型定義由寫入器和讀取器使用的各種方法。該模型基于三個組件寫入器、讀取器、以及它們之間的管道。圖6示出了寫入器和讀取器一起工作進(jìn)行有關(guān)包的通信的某些示例。
該管道攜帶從寫入器到讀取器的數(shù)據(jù)。在許多情形中,管道可僅包括讀取器所作從本地文件系統(tǒng)中讀取包的API調(diào)用。這被稱為直接訪問。
然而,寫入器和讀取器常常必須在某些類型的協(xié)議上互相通信。該通信在例如過程邊界上或服務(wù)器和臺式計算機(jī)之間進(jìn)行。這被稱為網(wǎng)絡(luò)化訪問,并且因為管道的通信特征(具體地,速度和請求等待時間)它是重要的。
為了使能最大的性能,物理包設(shè)計必須考慮三個重要區(qū)域中的支持訪問風(fēng)格、布局風(fēng)格以及通信風(fēng)格。
訪問風(fēng)格流消費由于使用網(wǎng)絡(luò)化訪問的寫入器和讀取器之間的通信不是即時的,允許包的漸進(jìn)創(chuàng)建和消費是重要的。特別地,根據(jù)本實施例,建議在包的所有比特通過管道傳遞之前,設(shè)計任意的物理包格式以使讀取器能解釋和處理它所接收的數(shù)據(jù)(例如各部分)。這種能力稱為流消費。
流創(chuàng)建當(dāng)寫入器開始創(chuàng)建包時,它并不總是知道將在該包中置入什么。作為示例,當(dāng)應(yīng)用程序開始建立打印排隊文件包時,它可不知道需要在該包中置入多少頁。作為另一示例,動態(tài)產(chǎn)生報告的服務(wù)器上程序不會知道該報告將有多長,或者該報告將有多少圖片-直到它已完全生成了報告。為了使寫入器能夠喜歡這種情形,物理包應(yīng)使寫入器能夠在已經(jīng)添加了其它部分之后動態(tài)添加各部分(例如,在寫入器開始寫時無需聲明它將創(chuàng)建多少部分)。此外,物理包應(yīng)使寫入器能在不知道一部分的最終長度就開始編寫該部分的內(nèi)容。加在一起,這些要求使能流創(chuàng)建。
同步創(chuàng)建和消費在高度管線化架構(gòu)中,對于一特定包流創(chuàng)建和流消費可同時發(fā)生。當(dāng)設(shè)計一物理包時,支持流創(chuàng)建和支持流消費可將設(shè)計推向相反方向。然而,找到支持兩者的設(shè)計常常是可能的。由于管線架構(gòu)中的優(yōu)點,建議物理包支持同步創(chuàng)建和消費。
布局類型物理包持有各部分的集合。這些部分可以兩種類型之一進(jìn)行布局簡單排序以及交叉。對于簡單排序,包中的各部分以確定風(fēng)格的順序布局。當(dāng)包以純線性方式進(jìn)行傳遞時,從該包中的第一字節(jié)開始直到最后字節(jié),第一部分的所有字節(jié)首先到達(dá),然后是第二部分的所有字節(jié)等等。
對于交叉布局,多個部分的字節(jié)是交叉的,在某些情形中導(dǎo)致性能改善。大大獲益于交叉的兩種情形是多媒體回放(例如同時傳遞視頻和音頻),以及內(nèi)嵌資源引用(例如在標(biāo)記文件中間對圖像的引用)。
通過由于組織交叉部分內(nèi)容的的特定慣例來處理交叉。通過將各部分劃分成片斷并交叉這些片斷,獲取所需交叉結(jié)果是可能的,同時簡便創(chuàng)建較大的原始部分也是可能的。為了理解交叉如何工作,圖7示出了包括兩個部分的簡單示例content.xml 702和image.jpeg 704。第一部分content.xml描述了頁面的內(nèi)容,而在該頁中間是對應(yīng)顯現(xiàn)在該頁上的圖像(image.jpeg)的引用。
為了理解交叉有價值的原因,考慮將如何使用簡單排序來在包中排列這些部分,如圖8所示。處理該包(以及按序接收字節(jié))的讀取器將不能顯示該圖片,直至它已收到了所有content.xml部分以及image.jpeg。在某些情形中(例如小或簡單的包,或者快速通信鏈接)這可能不是問題。在其它需要讀取所有content.xml部分以獲得圖像的情形中(例如,如果content.xml非常大,或者通信鏈接非常緩慢),,將導(dǎo)致無法接受的性能或?qū)ψx取器系統(tǒng)提出不合理的存儲器需求。
為了獲取更接近于理想的性能,最好能夠劃分content.xml部分并將image.jpeg插在中間(緊接著引用圖片的地方)。這會使得讀取器能更早地開始處理圖像,一旦它遇到引用,圖像數(shù)據(jù)即隨后而至。這會產(chǎn)生例如如圖9所示的包布局。由于這些性能優(yōu)點,常常希望物理包支持交叉。取決于所使用物理包的類型,可能支持或不支持交叉。不同的物理包可不同地處理交叉的內(nèi)部表示。無論物理包如何處理交叉,重要的是,要記住交叉是發(fā)生在物理層上的優(yōu)化,物理文件中被劃分成多個片斷的部分仍然是一個邏輯部分;片斷本身并不是部分。
通信風(fēng)格寫入器和讀取器中間的通信可基于各部分的有序傳遞,或者通過對各部分的隨機(jī)訪問,使得它們能不按順序地被訪問。利用哪一種哪一種通信風(fēng)格取決于管道和物理包格式的能力。一般而言,所有的管道支持有序傳遞。物理包必須支持有序傳遞。為了支持隨機(jī)訪問情形,所使用的管道和物理包都必須支持隨機(jī)訪問。某些管道基于可使能隨機(jī)訪問的協(xié)議(例如帶有字節(jié)范圍支持的HTTP1.1)。為了在使用這些管道時允許最大性能,建議物理包支持隨機(jī)訪問。如果缺少這種支持,讀取器將會等待直到有序傳遞它們所需要的部分。
物理映射邏輯包裝模型定義一包的抽象;包的真正實例基于包的某些特定物理表示。包裝模型可被映射到物理持續(xù)格式,以及各種傳輸(例如基于網(wǎng)絡(luò)的協(xié)議)。物理包格式可被描述為從抽象包裝模型的組件到特定物理格式的特征的映射。包裝模型不指定應(yīng)使用哪種物理包格式,用于歸檔、分發(fā)、或排隊等候包。在一實施例,僅指定邏輯結(jié)構(gòu)。包可由松散文件、.ZIP文件文檔、復(fù)合文件、或某些其它格式的集合來進(jìn)行“物理”體現(xiàn)。所選擇的格式由作為目標(biāo)的消費裝置,或者裝置的驅(qū)動器來支持。
被映射的組件每個物理包格式定義用于以下組件的映射。某些組件是可選的,且特定的物理包格式可不支持這些可選組件。
組件 描述必須或可選部分 名稱 命名一部分 必須內(nèi)容類型 標(biāo)識存儲在該部分中的那類內(nèi)容必須部分內(nèi)容 存儲該部分的真實內(nèi)容必須公共映射模式訪問風(fēng)格 流消費 使讀取器能在整個包到達(dá)之前開始處理 可選各部分流創(chuàng)建使寫入器能在不事先知道要寫入的所有 可選部分就能開始將各部分寫入包中同步創(chuàng)建和使流創(chuàng)建和流消費能在同一包中同時發(fā) 可選消費 生布局風(fēng)格 簡單排序 在包中部分N的所有字節(jié)在部分N+1的 可選所有字節(jié)之前出現(xiàn)交叉 多個部分的字節(jié)交叉 可選通信風(fēng)格 有序傳遞 部分N的所有在部分N+1之前被傳遞給 可選讀取器隨機(jī)訪問 讀取器可請求一部分的傳遞不按順序進(jìn) 可選行存在有許多物理存儲格式,它們的特征部分地與包裝模型組件相匹配。在定義從包裝模型到這種存儲格式的映射中,可能需要利用包裝模型與物理存儲介質(zhì)之間能力上的任何相似點,而使用映射層來提供并未固有地呈現(xiàn)于物理存儲介質(zhì)中的附加能力。例如,某些物理包格式可將各個部分存儲為文件系統(tǒng)中的各個文件。在這種物理格式中,將許多部分名稱直接映射到同一物理文件名稱是自然而然的。使用不是有效的文件系統(tǒng)文件名稱的字符的部分名稱可能需要某種類型的轉(zhuǎn)義機(jī)制。
在許多情形中,單個公共的映射問題可能由不同物理包格式的設(shè)計者來面對。公共映射問題的兩個示例在將任意內(nèi)容類型與各部分相關(guān)聯(lián)時,以及支持交叉布局類型時產(chǎn)生。這些規(guī)范對那些共同映射問題提供共同的方案。鼓勵,但不是要求特定物理包格式的設(shè)計者使用在此定義的公共映射方案。
標(biāo)識各部分的內(nèi)容類型物理包格式映射定義一種用于對每個部分存儲內(nèi)容類型的機(jī)制。某些物理包格式具有一種用于呈現(xiàn)內(nèi)容類型(例如MIME中的“內(nèi)容類型”標(biāo)題)的原有機(jī)制。對于這種物理包,建議映射使用原有機(jī)制來表示各部分的內(nèi)容類型。對于其它物理包格式,使用某些其它機(jī)制來表示內(nèi)容類型。用于表示這些包中內(nèi)容類型的被建議機(jī)制是通過將特別命名的XML流包括在包中,稱為類型流。該流不是一個部分,因而它本身不是URI可尋址的。然而,可使用用于交叉各部分的相同機(jī)制在物理包中進(jìn)行交叉。
類型流包含帶有頂層“類型”元素,以及一個或多個“缺省”和“取代”子元素的XML。“缺省”元素定義從部分名稱擴(kuò)展到內(nèi)容類型的缺省映射。這得益于文件擴(kuò)展常常對應(yīng)于內(nèi)容類型的事實。“取代”元素被用以指定各部分上缺省映射未涵蓋或與之不一致的內(nèi)容類型。包寫入器可使用“缺省”元素來減少每部分“取代”元素的數(shù)量,但并不是必須這樣做。
“缺省”元素具有以下屬性名稱 描述 必須Extension擴(kuò)展部分名稱擴(kuò)展?!叭笔 痹嘏c其名稱為以.+該屬性值的任何部分相 是匹配。
ContentTyp內(nèi)容 內(nèi)容類型如RFC2045所定義。表示任何匹配部分的內(nèi)容類型(除非 是類型 由“取代”元素取代,參見下面)。
“取代”元素具有以下屬性名稱 描述 必須PartName部分 部分名稱URI?!疤娲痹嘏c名稱等于該屬性值的部分相匹配。 是名稱ContentTyp內(nèi)容 內(nèi)容類型如RFC2045所定義。表示匹配部分的內(nèi)容類型。 是類型以下是包含在類型流中的一XML示例<Types xmlns="http://mmcfcontent-PLACEHOLDER">
<Default Extension="txt"ContentType="plain/text"/>
<Default Extension="jpeg"ContentType="image/jpeg"/>
<Default Extension="picture"ContentType="image/gif"/>
<Override PartName="/a/b/sample4.picture"ContentType="image/jpeg"/>
</Types>
以下表格示出了各部分的示例清單,及其由以上類型流定義的對應(yīng)的內(nèi)容類型部件名稱 內(nèi)容類型/a/b/sample1.txt plain/text/a/b/sample2.jpeg image/jpeg/a/b/sample3.picture image/gif/a/b/sample4.picture image/jpeg對于包中的每個部分,類型流包含(a)一匹配“缺省”元素,(b)一匹配“替代”元素,或者(c)一匹配“缺省”元素和一匹配“替代”元素(其中“替代”元素優(yōu)先于“缺省”元素)。一般而言,對于任何給定擴(kuò)展至多有一匹配“缺省”元素,對于任何給定部分名稱至多有一匹配“替代”元素。
“缺省”元素和“替代”元素在類型流中的順序并不重要。然而,在交叉包中,“缺省”和“替代”元素出現(xiàn)在物理包中它們相對應(yīng)的各部分之前。
交叉并非所有的物理包都固有地支持各部分?jǐn)?shù)據(jù)流的交叉。在一實施例中,對任何這種物理包的映射都使用本章節(jié)中所述的一般機(jī)制以允許各部分的交叉。一般機(jī)制通過將一部分的數(shù)據(jù)流劃分成多個片斷,然后這些片斷可與其它部分或整個部分的其它片斷進(jìn)行交叉,而進(jìn)行工作。一部分的單個片斷在物理映射中存在,而在邏輯包裝模型中不可尋址。片斷可具有零尺寸。
以下定義從部分名稱到一個部分的各個片斷名稱的唯一映射,從而讀取器可按其原始順序?qū)⒏髋袛嗫p合起來,以形成該部分的數(shù)據(jù)流。
用于對給定的部分名稱導(dǎo)出片斷名稱的語法是piece_name=part_name"/""["1*digit"]"[".last"]".piece"以下有效性限制對該語法產(chǎn)生的piece_names存在●片斷號以0開始,且是正的連續(xù)整數(shù)。片斷號可以是左邊零填充的。
●一個部分的片斷集的最后一個片斷在“.piece”之前的片斷名中包含“.last”。
●在映射到物理包中的名稱之前,從邏輯部分的名稱中產(chǎn)生片斷名稱。
盡管不必以其自然順序存儲各片斷,這種存儲可提供最佳的效率。包含交叉部分的物理包也可包含未交叉的一判斷部分,因此以下示例會是有效的
spine.xaml/
.piecepages/page0.xamlspine.xaml/[1].piecepages/page1.xamlspine.xaml/[2].last.piecepages/page2.xaml特定映射以下定義了下面物理格式的特定映射Windows文件系統(tǒng)中的松散文件。
映射到Windows文件系統(tǒng)中的松散文件為了更好地理解如何將邏輯模型的元素映射到物理格式,考慮將Metro包表示為Windows文件系統(tǒng)中松散文件的集合的基本情形。邏輯包中每個部分將被包含在獨立文件(流)中。邏輯模型中的每個部分名稱對應(yīng)于文件名稱。

部分名稱被翻譯成有效的Windows文件名稱,如下表所示。
以下給出了對邏輯部分名稱分段(URI分段)以及對Windows文件名稱有效的兩個字符集。該表揭示了兩件重要的事情在將URI轉(zhuǎn)換成文件名時有我們需要轉(zhuǎn)義的兩個有效URI符號冒號()和星號(*)。
有在URI中不能顯現(xiàn)的有效文件名符號^{}[]#(它們可被用于特定的映射目的,類似交叉)。
“轉(zhuǎn)義”被用作是一種技術(shù),用以在部分名稱包含不能在文件名稱中使用的字符時產(chǎn)生有效的文件名字符。為了轉(zhuǎn)義一字符,使用脫字符號(^),加上該字符的16進(jìn)制表示。
為了從abs_path(部分的名)映射到文件名稱移除第一個/將所有/轉(zhuǎn)換成\轉(zhuǎn)義冒號和星號字符例如,部分名稱/a:b/c/d*.xaml成為以下的文件名a^25b\c\d^2a.xaml。
為了執(zhí)行逆向映射將所有\(zhòng)轉(zhuǎn)換成/將/添加到字符串的開始通過用對應(yīng)字符替換^[十六進(jìn)制碼]來逆轉(zhuǎn)義字符

版本化和可擴(kuò)展性類似于其它技術(shù)規(guī)范,在此包含的本規(guī)范可引伸出未來的改進(jìn)版。本規(guī)范第一版的設(shè)計包括對基于第一版本編寫的軟件系統(tǒng),以及為未來版本編寫的軟件系統(tǒng)之間文檔未來的相互交換的計劃。類似地,本規(guī)范允許第三方來創(chuàng)建對本規(guī)范的擴(kuò)展。這種擴(kuò)展例如可允許構(gòu)建使用某些特定打印機(jī)特征的文檔,而仍然保持與不知道該打印機(jī)存在的其它讀取器的兼容性。
使用固定有效載荷標(biāo)記的新版本的文檔,或?qū)υ摌?biāo)記的第三方擴(kuò)展,需要讀取器作出有關(guān)行為的適當(dāng)判斷(例如如何可視地描繪某些東西)。為了引導(dǎo)讀取器。文檔的作者(或產(chǎn)生該文檔的工具)應(yīng)標(biāo)識讀取器遇到否則未經(jīng)標(biāo)識的元素或?qū)傩詴r的適當(dāng)行為。對于可及文檔,該類引導(dǎo)是重要的。
新的打印機(jī)、瀏覽器、以及其它客戶機(jī)可實現(xiàn)對未來特征的各種支持。利用新版本或擴(kuò)展的文檔作者必須仔細(xì)考慮不知道這些擴(kuò)展版本的讀取器的行為。
版本化名空間XML標(biāo)記識別基于名空間URI。對于任意的XML名空間,期望讀取器識別或不識別定義在該名空間中的所有XML元素和XML屬性。如果讀取器不識別新的名空間,讀取器需要執(zhí)行在文檔中指定的回退描繪操作。
XML名空間URI‘http//:PLACEHOLDER/version-control’包括XML元素和屬性,用以構(gòu)建版本適應(yīng)和擴(kuò)展適應(yīng)的固定有效載荷標(biāo)記。固定載荷中不必具有在它們中間的版本化元素。然而,為了建立適應(yīng)性內(nèi)容,必須至少使用<ver:Compatibilty.Rules>以及<ver:AltemativeContent>之一。
該固定有效載荷標(biāo)記規(guī)范具有與其相關(guān)聯(lián)的xmlns URI:‘http://PLACEHOLDER/pdl’。使用固定有效載荷中的該名空間將向讀取器應(yīng)用程序表示,僅將使用在本規(guī)范中定義的元素。本規(guī)范的未來版本將具有其自己的名空間。熟悉新名空間的讀取器應(yīng)用程序?qū)⒅廊绾沃С衷谙惹鞍姹局卸x的屬性元素的超集。不熟悉新版本的讀取器應(yīng)用程序?qū)⑾袼荘DL的某些未知擴(kuò)展的URI一樣來考慮新版本的URI。這些應(yīng)用程序可能不知道在各名空間之間存在一關(guān)系,即一名空間是另一名空間的超集。
反向和“正向”兼容在支持在此所述的系統(tǒng)和方法的應(yīng)用程序或裝置的上下文中,兼容性由客戶機(jī)使用規(guī)范的先前版本,或規(guī)范的未知擴(kuò)展或版本來解析和顯示已制作文檔的能力來表示。各種版本化機(jī)制解決了“反向兼容”,使得客戶機(jī)的未來實現(xiàn)能夠基于規(guī)范的下層版本來支持文檔,如下所述。
當(dāng)諸如打印機(jī)的被實現(xiàn)客戶機(jī)接收使用標(biāo)記語言的未來版本而建立的文檔時,客戶機(jī)將能夠解析并理解可用的描繪選項。根據(jù)規(guī)范舊版本編寫的客戶機(jī)軟件使用較新版本的特征處理某些文檔的能力常被稱為“正向兼容性”。被編寫為使用正向兼容性的文檔被描述為“版本適應(yīng)的”。
此外,因為被實現(xiàn)客戶機(jī)也將需要能夠支持具有表示新元素或?qū)傩缘奈粗獢U(kuò)展,各種語義支持“擴(kuò)展適應(yīng)”的文檔的更一般情形。
如果打印機(jī)或查看器遇到未知擴(kuò)展,則它將查找內(nèi)嵌信息以及對于有關(guān)適應(yīng)性地描繪周圍內(nèi)容的引導(dǎo)的使用。該適應(yīng)包括用所理解的內(nèi)容替換未知元素或?qū)傩?。然而,適應(yīng)可取其它形式,包括純粹略去未知內(nèi)容。在缺少顯式引導(dǎo)時,讀取器應(yīng)視標(biāo)記中未識別擴(kuò)展的出現(xiàn)為錯誤情況。如果未提供引導(dǎo),則假設(shè)擴(kuò)展對理解該內(nèi)容是基本的。將捕捉描繪失敗,并向用戶報告。
為了支持該模型,標(biāo)記語言的新的擴(kuò)展版本應(yīng)邏輯地對名空間中的相關(guān)擴(kuò)展進(jìn)行分組。這樣,文檔作者將能夠使用最少量的名空間來利用被擴(kuò)展特征。
版本化標(biāo)記用于支持?jǐn)U展適應(yīng)性行為的XML詞匯包括以下元素

<Compatibility.Rules>元素可將Compatibility.Rules附加到可持有附加屬性以及Xaml根元素的任意元素。<Compatibilty.Rules>元素控制解析器如何對未知元素或?qū)傩苑磻?yīng)。正常時這種條目被報告為錯誤。將可略去元素添加到Compatibility.Rules屬性通知編譯器,可略去來自某些名空間的條目。
Compatibility.Rules可包含可略去(Ignorable)和必須理解(MustUnderstand)的元素。缺省地,所有元素和屬性被假設(shè)為必須理解的。通過將可略去元素添加到其容件的Compatibilty.Rules屬性中,可使元素和屬性變得可略去。通過將必須理解元素添加到嵌套容件之一中,可使元素或?qū)傩栽俅巫兊帽仨毨斫?。一可略去或必須理解指向同一Compatibility.Rules元素中的特定名空間URI。
<Compatibility.Rules>元素影響容件的內(nèi)容,而不是該容件自己的標(biāo)記或?qū)傩?。那些元素為了影響容件的?biāo)記或?qū)傩?,其容件必須包含兼容性?guī)則??墒褂肵aml根元素來指定元素兼容性規(guī)則,否則將是如Canvas的根元素。該Compatibility.Rules合成屬性是容件中的第一元素。
<Ignorable>(<可略去>)元素<Ignorable>元素聲明有界名空間URI是可略去的。如果<Ignorable>標(biāo)記在當(dāng)前塊或容件塊中的條目之前聲明,且名空間URI對解析器是未知的,則該條目可視為可略去。如果URI未知,則忽略可略去標(biāo)記,而所有條目可獲得理解。在一實施例中,必須理解所有未顯式聲明為可略去的條目。可略去元素可包含<ProcessContent>(<處理內(nèi)容>)和<CarryAlong>(保留)元素,它們被用以更改如何略去一元素,并引導(dǎo)文檔編輯工具應(yīng)如何在編輯文檔中保留這些內(nèi)容。
<ProcessContent>元素<ProcessContent>元素聲明,如果略去了一元素,則將像它由被略去元素的容件所包含一樣處理該元素的內(nèi)容。
<ProcessContent>屬性

<CarryAlong>元素可選的<CarryAlong>元素向文檔編輯工具表明,在更改文檔時是否應(yīng)保留可略去內(nèi)容。編輯工具保留或丟棄可略去內(nèi)容的方法在編輯工具的領(lǐng)域之中。如果多個<CarryAlong>元素指向名空間中同一元素或?qū)傩裕付ǖ淖詈笠粋€<CarryAlong>具有優(yōu)先權(quán)。
<CarryAlong>屬性


<MustUnderstand>元素<MustUnderstand>是與可略去元素效果相反的元素。該技術(shù)在例如與另選內(nèi)容組合時有用。在由<MustUnderstand>元素定義的范圍之外,該元素保持為可略去。
<MustUderstand>屬性

<AltemateContent>元素在經(jīng)指定內(nèi)容的任一部分未得到理解時,<AlternateContent>元素使另選內(nèi)容得以提供。AltemateContent塊使用<Prefer>(<優(yōu)選>)和<Fallback>(<后退>)塊。如果<Prefer>塊中的任何東西都未得到理解,則使用<Fallback>塊中的內(nèi)容。名空間被聲明為<MustUnderstand>,以便指明要使用的后退。如果名空間被聲明為可略去,且在<Prefer>塊中使用該名空間,則不使用<Fallback>塊中的內(nèi)容。
版本化標(biāo)記示例使用<Ignorable>
本示例使用一假想標(biāo)記名空間http://PLCAEHOLDER/Circle,它在其初始版本中定義元素Circle(圓)并使用在該標(biāo)記后來版本(版本2)中引入的Circle的Opacity(不透明)屬性,以及在該標(biāo)記的再后來版本(版本3)中引入的Luminance(亮度)屬性。該標(biāo)記在版本1、2、3及以上版本保持可加載。另外,<CarryAlong>元素指定,在編輯時甚至在編輯器不懂得v3Luminance時,都必須保留v3Luminance。
For a version 1 reader,Opadty and Luminance are Ignored.
For a version 2reader,only Luminance is Ignored.
For a version 3reader and beyond,all the attributes are used.
<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>
以下示例示出了<MustUnderstand>元素的使用。
<FixedPanelxmlns="http://PLACEHOLDER/fixed-content"xmlns:v="http://PLCEHODER/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: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>元素的使用使得對v3:Luminance的引用出錯,即使它在根元素中被聲明為可略去。如果與使用例如在版本2加入的Canvas的Luminance屬性的另選內(nèi)容組合,該技術(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:Ccmpatibility.Rules>
<v:Ignorable Namesp aceUri="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:Opacitye"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 Cener="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"/>
<Circ=e 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>
如果在<AlternateContent>塊的<Prefer>塊中,任意元素或?qū)傩远急宦暶鳛?amp;lt;MustUnderstand>但未得到理解,則跳過整個<Prefer>塊,而對<Fallback>塊進(jìn)行正常處理(遇到的任何MustUnderstand條目都被報告為錯誤)。
<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>
可及包格式在以下討論中,提供了特定文件格式的描述。本章節(jié)中主要的獨立子標(biāo)題包括“可及包格式的緒論”、“可及包結(jié)構(gòu)”、“固定有效載荷的部分”、“固定頁面標(biāo)記基礎(chǔ)”、“固定有效載荷元素和屬性”、以及“固定頁面標(biāo)記”。每個主要子標(biāo)題都具有一個或多個相關(guān)子標(biāo)題。
可及包格式的緒論如上已描述了示例性框架,隨后的描述是被提供利用上述工具的特定格式之一??梢哉J(rèn)為和理解,以下描述僅組成一示例性格式,并非旨在限制所聲明主題的應(yīng)用。
根據(jù)本實施例,單個包可包多個有效載荷,每一個作為文檔的不同表示。有效載荷是各部分的集合,包括可標(biāo)識的“根”部分以及“根”部分有效處理所需要的所有部分。例如,有效載荷可以是文檔的固定表示、可回流表示、或者任何任意表示。
以下描述定義一稱為固定有效載荷的特別表示。固定有效載荷具有一根部分,它包含一FixedPanel(固定面板)標(biāo)記,而該標(biāo)記又引用FixedPage(固定頁面)部分。加在一起,這些描述了一多頁文檔的精確描繪。
持有至少一個固定有效載荷,并遵循以下所述其它規(guī)則的包,被稱為可及包??杉鞍淖x取器和寫入器可基于該可及包格式的規(guī)范,實現(xiàn)它們自己的解析器和描繪引擎。
可及包的特征根據(jù)所述實施例,可及包解決了信息工作器對分發(fā)、存檔、以及描繪文檔的需求。使用已知描繪規(guī)則,可及包可明確并準(zhǔn)確地從它們所保存的格式進(jìn)行復(fù)制或打印,而無需使客戶機(jī)裝置或應(yīng)用程序聯(lián)系到特定操作系統(tǒng)或服務(wù)庫。另外,因為以中性、應(yīng)用程序無關(guān)的方式來表達(dá)可及區(qū)域有效載荷,通常無需用以創(chuàng)建該包的應(yīng)用程序就可查看并打印文檔。為了提供這種能力,固定有效載荷的概念被引入并包含于可及包中。
根據(jù)所述實施例,固定有效載荷具有固定數(shù)量的頁面,且分頁符總是相同的。在固定有效載荷中頁面上所有元素的布局是預(yù)定的。每個頁面具有固定的尺寸和方向。這樣,在消費側(cè)不必執(zhí)行任何布局計算,并可簡便描繪內(nèi)容。這不僅應(yīng)用于圖形,而且也應(yīng)用于文本,它在固定有效載荷中用精確的印刷布置來表示。頁面的內(nèi)容(文本、圖形、圖像)使用功能強(qiáng)大但簡單的可視元集進(jìn)行描述。
可及包支持各種用于組織頁面的機(jī)制。一組頁面被一頁接一頁地“粘貼”起來,形成一“固定面板”。該組頁面大約等同于傳統(tǒng)的多頁文檔。然后“固定面板”可參加組合-建立序列和選擇以組裝“復(fù)合”文檔的過程。
在所示和所述實施例中,可及包支持一種稱為固定面板序列的特定類型序列,它可用以例如將一組固定面板粘貼在一起形成單個更大的“文檔”。想像一下,例如,將來自不同源的兩個文檔粘貼在一起2頁的封面?zhèn)渫?一固定面板)以及20頁的報告(一固定面板)。
可及包支持眾多的特定選擇器,它們可在建立包含“相同”內(nèi)容的可選表示的文檔包時使用。特別地,可及包允許基于語言、色彩能力、以及頁面尺寸進(jìn)行選擇。因而,可以擁有例如使用選擇器在文檔的英語表示和法語表示之間選擇的雙語文檔。
除了對用于可及包中組合的選擇器和序列的這些簡單使用外,重要的是注意,選擇器和序列還可指向另外的選擇器和序列,從而允許建立功能強(qiáng)大的集聚分層結(jié)構(gòu)。根據(jù)本實施例,什么可以做和什么不可以做的準(zhǔn)確規(guī)則在以下題為“可及包結(jié)構(gòu)”的章節(jié)中指定。
此外,可及包可包含其它有效載荷,它們不是固定有效載荷但更豐富,并且可能是文檔的可編輯表示。這使包能包含一豐富、可編輯的文檔,該文檔能在編輯器應(yīng)用程序以及視覺上精確的表示中良好運行,也可以是沒有編輯應(yīng)用程序地查看。
最后,根據(jù)本實施例,可及包支持所謂打印標(biāo)簽。該打印標(biāo)簽提供在打印包時應(yīng)使用的設(shè)置。這些打印標(biāo)簽可用各種方式附加以獲取實質(zhì)上的靈活性。例如,可將打印標(biāo)簽“附于”整個包上,而其設(shè)置將影響整個包。打印標(biāo)簽還可附到結(jié)構(gòu)中較低層次上(例如各個頁面),且這些打印標(biāo)簽將在打印其所附部分時提供要使用的替代設(shè)置。
可及包結(jié)構(gòu)如上所述,可及包支持一特征集,包括“固定”頁面、固定面板、組合、打印標(biāo)簽等。在包中使用包模型的內(nèi)核組件來表示這些特征部分和關(guān)系。在本章節(jié)及其相關(guān)小節(jié)中,提供“可及包”的完整定義,包括對所有這些部分和關(guān)系應(yīng)當(dāng)如何組裝、相關(guān)等等的描述。
可及包結(jié)構(gòu)縱覽圖10示出了一示例性可及包,以及在本實施例中,可組成包或在包中發(fā)現(xiàn)的每個有效類部分。以下提供的表格列出了每個有效部分類型,并提供了每一個的描述

因為可及包被設(shè)計成為“到處查看和打印”的文檔,可及包的讀取器和寫入器必須共享對什么構(gòu)成“有效”可及包的共同、明確定義期望。為了提供對“有效”可及包的定義,首先在下面定義一些概念。
可及組成部分可及包必須包含至少一個固定面板,它可通過從包的開始部分遍歷組合塊發(fā)現(xiàn)。根據(jù)所述實施例,發(fā)現(xiàn)過程遵循以下算法●從包的開始部分起,開始迭代地遍歷組合部分的圖。
●在執(zhí)行該遍歷時,僅遍歷可及組合部分(如下所述)的組合部分。
●在圖的邊界上定位所有終點(沒有外出弧的點)。
這些終點指向(通過其<item>元素)一組稱為可及有效載荷根的部分。
固定有效載荷固定有效載荷是其根部分是一固定面板部分的有效載荷。例如,圖10中每個固定有效載荷都具有相關(guān)聯(lián)固定面板部分作為其根部分。有效載荷包括對固定面板有效處理所需的所有部分的全集。它們包括●固定面板本身;●從固定面板中引用的所有固定頁面;●由有效載荷中任一固定頁面引用(直接地,或通過選擇器間接地)的所有圖像部分;●直接或間接地從有效載荷中任一固定頁面中使用的圖像畫筆引用的所有可及選擇器(如下所述);●有效載荷中任一固定頁面引用的所有字體部分;●附于固定有效載荷中任一部分的所有描述性元數(shù)據(jù)部分;以及●附于固定有效載荷中任一部分的任意打印標(biāo)簽。
可及包的有效規(guī)則有了以上的定義,現(xiàn)在描述根據(jù)所述實施例描述“有效”可及包的一致性規(guī)則●可及包必須具有使用如上所述包關(guān)系的標(biāo)準(zhǔn)機(jī)制而定義的開始部分;●可及包的開始部分必須是選擇器或序列;●可及包必須具有至少一個是固定面板的可及有效載荷根;●打印標(biāo)簽部分可附于任一組合部分、固定面板部分、或任一在固定面板中標(biāo)識的固定頁面部分。在本示例中,這通過http:∥PLCEHOLDER/HasPrintTicketRel關(guān)系達(dá)成;○打印標(biāo)簽可附于任一或所有這些部分;○任何給定部分必須附有不超過一個打印標(biāo)簽;●描述性元數(shù)據(jù)部分可被附于包中的任意部分;●固定有效載荷中的每個字體對象必須符合在“字體部分”章節(jié)中定義的字體格式規(guī)則;●對來自固定有效載荷的任何固定頁面中圖像的引用可指向選擇器,它可作出選擇(可能循環(huán)地通過其它選擇器)以找出要描繪的真正圖像部分;●在固定有效載荷中使用的每個圖像對象必須符合在“圖像部分”章節(jié)中定義的字體格式規(guī)則;
●對于從固定頁面引用(直接地,或通過選擇器間接地)的任意字體、圖像或選擇器部分,從引用固定頁面到被引用部分必須有“必須部分”關(guān)系(關(guān)系名稱=http://mmcf-fixed-RequiredResource-PLACEHOLDER)。
可及組合部分盡管可及包可包含許多類型的組合部分,但根據(jù)本文檔僅有明確定義的組合部分類型組具有明確定義的行為。帶有明確定義行為的這些組合部分被稱為可及組合部分。除了這些的各部分在確定可及包的有效性時是無關(guān)的。
以下組合部分類型被定義為可及組合部分

可及選擇器那些被定義為可及組合部分的選擇器組合部分,被稱為可及選擇器。如上所述,語言選擇器基于諸如英語或法語的其自然語言在各表示之間選取。為了發(fā)現(xiàn)該語言,選擇器檢查其條目的每一個。僅有那些是XML的才被考慮。為此,檢查每一個的根元素以確定其語言。如果xml:lang屬性未出現(xiàn),略去該部分。然后選擇器依次考慮這些部分的每一個,選擇其語言匹配系統(tǒng)缺省語言的第一個部分。
色彩選擇器基于它們是單色還是彩色的在各表示之間進(jìn)行選擇。頁面尺寸選擇器基于其頁面尺寸在各表示之間進(jìn)行選擇。內(nèi)容類型選擇器基于其內(nèi)容類型是否為系統(tǒng)所理解在各表示之間選擇。
可及序列那些被定義為可及組合部分的序列組合部分被稱為可及序列。固定序列將是固定內(nèi)容的子內(nèi)容組合到一序列中。
固定有效載荷部分固定有效載荷可包含以下種類的各部分固定面板部分、固定頁面部分、圖像部分、字體部分、打印標(biāo)簽部分、以及描述性元數(shù)據(jù)部分,其中每一個都在其自己的子標(biāo)題下進(jìn)行討論。
固定面板部分固定有效載荷的文檔結(jié)構(gòu)將固定頁面標(biāo)識為書脊部分,如下所示。書脊部分和頁面部分之間的關(guān)系在書脊的關(guān)系流中定義。固定面板部分具有內(nèi)容類型Application/xml+PLACEHOLDER。
通過將<FixedPanel>元素包括在<Document>(<文檔>)元素中,固定有效載荷內(nèi)容的書脊在標(biāo)記中指定。在以下示例中,<FixedPanel>元素指定在書脊中所持有頁面的源。
<!--SPINE-->
<Document$XMLNSFIXED$>
<FixedPanel>
<PageContent Source="P1.xml"/>
<PageContent Source="P1.xml"/>
</FixedPanel>
</Document>
<Document>元素<Document>元素沒有屬性,且必須僅具有一子元素<FixedPanel>。
<FixedPanel>元素<FixedPanel>元素是文檔書脊,它將有序頁面邏輯地綁定在一起成為單個多頁文檔。頁面總是指定其自己的高度和寬度,但<FixedPanel>元素也可有選擇地指定高度和寬度。該信息可用于各種目的,包括例如基于頁面尺寸在可選表示之間進(jìn)行選擇。如果<FixedPanel>元素指定了高度和寬度,通常它將與<FixedPanel>中頁面的寬度和高度對準(zhǔn),但這些尺寸并不指定各個頁面的高度和寬度。
以下表格根據(jù)所述實施例歸納了固定面板的屬性。

<PageContent>(<頁面內(nèi)容>)元素是<FixedPanel>元素唯一允許的子元素。<PageContent>元素以匹配文檔頁面順序的序列標(biāo)記順序排序。
<PageContent>元素每個<PageContent>元素指向用于單個頁面的內(nèi)容之源。為了確定文檔中的頁數(shù),將對<FixedPanel>中包含的<PageContent>子元素數(shù)量計數(shù)。
<PageContent>元素沒有允許的子元素,并具有一個必須屬性-源,它指向頁面內(nèi)容的固定頁面部分。
由于有了<FixedPanel>元素,<PageContent>元素可有選擇地包括PageHeight(頁面高度)和PageWidth(頁面寬度)屬性,在此反映單個頁面的尺寸。所需頁面尺寸在固定頁面部分中指定;<PageContent>上的可選尺寸僅是建議性的。<PageContent>尺寸屬性使諸如文檔查看器的應(yīng)用程序能對文檔作出可視布局的快速估計,而無需加載并解析所有的固定頁面部分。
以下提供的表格歸納了<PageContent>屬性,并提供對屬性的描述。

頁面內(nèi)容的URI字符串必須指向與包有關(guān)的內(nèi)容的那部分位置。
固定頁面部分<FixedPanel>中每個<PageContent>元素由名稱(URI)指向一固定頁面部分。每個固定頁面部分包含描述單個頁面內(nèi)容的描繪的固定頁面標(biāo)記。固定頁面部分是Application/xml+PLACEHOLDER-FixedPage內(nèi)容類型的。
在標(biāo)記中描述固定頁面以下是源內(nèi)容的標(biāo)記可如何尋找在以上樣本書脊標(biāo)記中引用頁面的示例(<PageContentSource=“p1.xml”/>)。
// /content/p1.xml<FixedPage PageHeight="1056"PageWidth="816">
<Glyphs
OriginX="96"OriginY="96"UnicodeString ="This is Page 1!"FontUri="../Fontg/Times.TTF"FontRenderingEmSize="16"/>
</FixedPage>
以下表格歸納了FixedPage(固定頁面)屬性,并提供了對各屬性的描述。

固定頁面標(biāo)記中的讀取順序在一實施例中,包含在固定頁面中的字形子元素的標(biāo)記順序必須與頁面的文本內(nèi)容的所需讀取順序一樣。該讀取順序可用于來自查看器中固定頁面的有序文本的交互式選擇/復(fù)制,也可用于使能通過可訪問技術(shù)對有序文本的訪問。產(chǎn)生固定頁面標(biāo)記以確保標(biāo)記順序和讀取順序之間的這種一致是應(yīng)用程序的責(zé)任。
圖像部分所支持格式根據(jù)所述實施例,由可及包中固定頁面使用的圖像部分可以是固定數(shù)量的格式,例如PNG或JPEG,盡管也可使用其它格式。
字體部分根據(jù)所述實施例,可及包支持限量的字體格式。在所示和所述實施例中,所支持的字體格式包括TrueType格式和OpenType格式。
本領(lǐng)域技術(shù)人員將理解,OpenType字體格式是TrueType字體格式的擴(kuò)展,加上了對PostScript字體數(shù)據(jù)和復(fù)雜印刷布局的支持。OpenType字體文件包含表格格式的數(shù)據(jù),它包括TrueType輪廓字體或PostScript輪廓字體。
根據(jù)所述實施例,在可及包中不支持以下字體格式Adobe類型1、位圖字體、具有隱藏屬性的字體(使用系統(tǒng)標(biāo)記來判斷是否要列舉它)、向量字體、以及EUDC字體(其字體系列名稱是EUDC)。
對字體分組固定有效載荷表示使用以下詳述字形元素的所有文本。因為在此實施例中格式是固定的,對字體分組以僅包含固定有效載荷所需字形是可能的。因此,可及包中的字體可基于字形使用來進(jìn)行分組。盡管經(jīng)分組字體將不包含原始字體中的所有字形,經(jīng)分組字體仍然必須是有效的OpenType字體文件。
打印標(biāo)簽字體打印標(biāo)簽部分提供可在打印包時使用的設(shè)置。這些打印標(biāo)簽可以各種方式附加以獲取實質(zhì)上的靈活性。例如,打印標(biāo)簽可“附于”整個包,且其設(shè)置將影響整個包。打印標(biāo)簽還可附到結(jié)構(gòu)中較低級別上(例如各個頁面),且這些打印標(biāo)簽將在打印其所附部分時提供要使用的替代設(shè)置。
描述性元數(shù)據(jù)如上所述,描述性元數(shù)據(jù)部分向包的寫入器或生產(chǎn)者提供一種用以存儲屬性值的方法,這些屬性能使包的讀取器可靠地發(fā)現(xiàn)這些值。通常使用這些屬性來記錄有關(guān)整個包的附加信息,以及容件中的各個部分。
固定頁面標(biāo)記基礎(chǔ)本章節(jié)描述與固定頁面標(biāo)記相關(guān)聯(lián)的某些基本信息,并包括以下章節(jié)“固定有效載荷和其它標(biāo)記標(biāo)準(zhǔn)”、“固定頁面標(biāo)記模型”、“資源和資源引用”、以及“固定頁面繪制模型”。
固定有效載荷和其它標(biāo)記標(biāo)準(zhǔn)可及包中用于固定有效載荷的固定面板和固定頁面標(biāo)記是來自WindowsLonghorn的Avalon XAML標(biāo)記的子集。即,盡管固定有效載荷標(biāo)記可作為獨立的XML標(biāo)記(如本文檔中所述)存在,它在Longhorn系統(tǒng)中以同樣方式載入,并描繪了對原始多頁文檔的“所見即所得”(WYSIWYG)復(fù)制。
作為XAML標(biāo)記上的某些背景,考慮以下內(nèi)容。XAML標(biāo)記是一種機(jī)制,它使用戶能夠?qū)ο蟮姆謱咏Y(jié)構(gòu)和對象之后的編程邏輯指定為基于XML的標(biāo)記語言。這為對象模型提供了在XML中進(jìn)行描述的能力。這使得諸如微軟公司.NET框架的公共語言運行時(CLR)中各類的可擴(kuò)展類能夠在XML中被訪問。XAML機(jī)制提供了XML標(biāo)記到CLR對象的直接映射,以及在標(biāo)記中表示相關(guān)代碼的能力??梢哉J(rèn)為和理解,各種實現(xiàn)無需具體利用XAML的基于CLR實現(xiàn)。相反,基于CLR的實現(xiàn)僅構(gòu)成了可在本文所述實施例的上下文中采用XAML的一種方法。
更具體地,結(jié)合圖11進(jìn)行以下考慮,其中示出了CLR概念(左側(cè)組件)到XML(右側(cè)組件)的示例性映射。使用一稱為反射的CLR概念,可在xmlns聲明中找到名空間。各類直接映射成XML標(biāo)記。屬性和事件直接映射成屬性,使用該分層結(jié)構(gòu),用戶可在XML標(biāo)記文件中指定任意CLR對象的分層結(jié)構(gòu)樹。Xaml文件是帶有.xaml擴(kuò)展和application/xaml+xml介質(zhì)類型的xml文件。Xaml文件具有一根標(biāo)記,它通常使用xmlns屬性指定一名空間。該名空間可用其它類型的標(biāo)記來指定。
然后,xaml文件中的標(biāo)記通常映射到CLR對象。標(biāo)記可以是元素、組合屬性、定義或資源。元素是通常在運行時期間例示的CLR對象,并形成各對象的分層結(jié)構(gòu)。復(fù)合屬性標(biāo)記被用以在父標(biāo)記中設(shè)置屬性。定義標(biāo)記被用來將代碼加入頁面并定義資源。資源標(biāo)記提供僅通過將對象樹指定為資源來重新使用該樹的能力。定義標(biāo)記也可在另一標(biāo)記中被定義為xmlns屬性。
一旦文檔在標(biāo)記中進(jìn)行了適當(dāng)描述(通常由寫入器),可解析并處理該標(biāo)記(通常由讀取器)。經(jīng)適當(dāng)配置的解析器判斷,為了找到一標(biāo)記應(yīng)當(dāng)從根標(biāo)記起搜索哪些CLR組裝和名空間。在許多情形中,解析器尋找并將找到在由xmlns屬性指定的URL中的名空間定義文件。名空間定義文件提供組裝的名稱,及其安裝路徑和CLR名空間的列表。當(dāng)解析器遇到一標(biāo)記時,解析器判斷標(biāo)記使用其xmlns和該xmlns的xmlns定義文件指向哪一個CLR類。解析器按照組裝和名空間在定義文件中指定的順序進(jìn)行搜索。當(dāng)它找到一匹配時,解析器例示一該類對象。
因而,如上所述并在以上通過引用加入的應(yīng)用程序中更全面描述的機(jī)制,使對象模型能使用標(biāo)記以基于XML文件方式表示??墒褂脤ο竽P捅硎緸闃?biāo)記的能力來異步或同步地創(chuàng)建向量圖形畫、固定格式文檔、適應(yīng)流文檔、以及應(yīng)用程序UI。
在所示和所述實施例中,固定有效載荷標(biāo)記是最小、幾乎完全最為節(jié)省的的Avalon XAML描繪元分組。它可視地表示可全保真地在Avalon中表示的任何東西。固定有效載荷標(biāo)記是Avalon XAML元素和屬性的分組-加上附加慣例、規(guī)范形式、或與Avalon XAML相比使用中的限制。
所定義的基本上最小的固定有效載荷標(biāo)記集減少了關(guān)聯(lián)于實現(xiàn)和可及包讀取器(諸如打印機(jī)RIP或者可交互的查看器應(yīng)用程序)測試的開銷,也減少了相關(guān)聯(lián)解析器的復(fù)雜性和存儲器覆蓋區(qū)。最為節(jié)省標(biāo)記集還使得可及包寫入器和讀取器之間的分組、錯誤、或不一致性的機(jī)會最小化,使格式及其生態(tài)系統(tǒng)在本質(zhì)上更穩(wěn)固。
除了最小的固定有效載荷標(biāo)記之外,可及包將指定用于附加語義信息的標(biāo)記以支持查看器,或帶有諸如超鏈接、章節(jié)/梗概結(jié)構(gòu)和導(dǎo)航、文本選擇、以及文檔可訪問性等特征的可及包文檔的表示。
最后,使用上述版本化和可擴(kuò)展性機(jī)制有可能對消費應(yīng)用程序、查看器、或裝置的特定目標(biāo)用更豐富元素集補(bǔ)充最小固定有效載荷標(biāo)記。
固定頁面標(biāo)記模型在所示和所述實施例中,基于XML元素、XML屬性、以及XML名空間,以基于XML的標(biāo)記語言表達(dá)固定頁面部分。在本文檔中定義有三個包括在固定頁面標(biāo)記中的XML名空間。一個這種名空間指向在本說明書中其它地方定義的版本控制元素和屬性。用于固定頁面標(biāo)記中元素和屬性的主要名空間是“http://schemas.microsoft.com/MMCF-PLACEHOLDER-FixedPage”。最后,固定頁面標(biāo)記引入了需要第三名空間的“資源”概念,如下所述。
盡管固定頁面標(biāo)記使用XML元素和XML屬性來表達(dá),其規(guī)范是基于“內(nèi)容”和“屬性”的高級抽象模型。固定頁面元素都被表述為XML元素。僅有少數(shù)固定頁面元素可持有表達(dá)為子XML元素的“內(nèi)容”。但屬性值可使用XML屬性或使用子XML元素來表達(dá)。
固定頁面標(biāo)記還依賴于資源字典和資源引用的兩個概念。資源字典和多個資源引用的組合允許單個屬性值由多個固定頁面標(biāo)記元素的多個屬性共享。
固定頁面標(biāo)記中的屬性在所示和所述實施例中,有三種標(biāo)記形式可用以指定固定頁面標(biāo)記屬性的值。
如果屬性使用資源引用來指定,則屬性名稱被用作XML屬性名稱,而屬性值的特定語法指示資源引用的呈現(xiàn)。用于表達(dá)資源引用的語法在題為“資源和資源引用”的章節(jié)中描述。
任何未被指定為資源引用的屬性值可用XML表達(dá),其中使用嵌套子XML元素來標(biāo)識要設(shè)置其值的屬性。該“組合屬性語法”如下所述。
最后,某些非資源引用屬性值可被表達(dá)為簡單文本字符串。盡管所有這樣的屬性值可使用復(fù)合屬性語法來表達(dá),還可使用簡單的XML屬性語法來表達(dá)它們。
對于任何固定元素,不管用于指定值的語法如何,任何屬性都只能被設(shè)置不超過一次。
簡單屬性語法對于可表達(dá)為簡單字符串的屬性值,可使用XML屬性語法來指定屬性值。例如,給定帶有稱為“Color”(色彩)的屬性稱為“SolidColorBrush”(實心彩色畫筆)的固定頁面標(biāo)記元素,可使用以下語法來指定屬性值
<!--Simple Attribute Syntax-->
<SolidColorBrush Color="#FF0000"/>
組合屬性語法某些屬性值不能被表達(dá)為簡單字符串,例如被用以描述屬性值的XML元素。這種屬性值不能使用簡單屬性語法來表達(dá)。但它們可使用復(fù)合屬性語法來表達(dá)。
在復(fù)合屬性語法中,使用子XML元素,但XML元素名稱源自父元素名稱和屬性名稱的組合,它們之間以·分隔。固定頁面標(biāo)記元素<Path>,它具有可被設(shè)置為<SolidColorB”rush>的屬性“Fill”(填充),可使用以下標(biāo)記來設(shè)置<Path>元素的“填充”屬性<!--Compound-Property Syntax-->
<Path>
<Path.Fill>
<SolidColorBrush Color="#FF0000"/>
</Path.Fill>
...
</Path>
復(fù)合屬性語法甚至可在簡單屬性語法足以表達(dá)屬性值的情形中使用。因此,先前章節(jié)的示例為<!--Simple Attribute Syntax-->
<SolidColorBrush Color="#FF0000"/>
相反可用復(fù)合屬性語法來表達(dá)<!--Compound-property Syntax-->
<SolidColorBrush>
<SolidColorBrush.Color>#FF0000</SolidColorBrush.Color>
</SolidColorBrush>
當(dāng)使用復(fù)合屬性語法來指定屬性值時,表示“屬性”的子XML元素必須出現(xiàn)在表示“內(nèi)容”的子XML元素之前。各個復(fù)合屬性子XML元素的順序并不重要,它們僅僅一起出現(xiàn)在父元素的任何“內(nèi)容”之前。
例如,當(dāng)使用<Canvas>元素的Clip(剪切)和RenderTransform(描繪變換)屬性時,兩個屬性都必須出現(xiàn)在<Canvas>的任一<Path>和<Glyphs>內(nèi)容之前。
<Canvas>
<!--First,the property-related child elements-->
<Canvas.RenderTransform>
<MatrixTransform Matrix="1,0,0,1,0,0">
</Canvas.RenderTransform>
<Canvas.Clip>
<PathGeometry>
...
</PathGeometry>
</Canvas.Clip>
<!--Then,the"Contents"-->
<Path->
...
</Path>
<Glyphs_>
...
</Glyphs>
</Canvas>
資源和資源引用可使用資源字典來持有可共享屬性值,每個都稱為資源。任何本身是固定頁面標(biāo)記元素的屬性值可在資源字典中持有。資源字典中的每個資源都帶有名字。資源的名字可用于從屬性的XML屬性中引用該資源。
在所示和所述實施例中,<Canvas>和<FixedPage>元素可帶有一資源字典。資源字典在稱為“資源”的屬性中用標(biāo)記表示為<Canvas>和<FixedPage>元素的屬性。然而,各個資源值可直接嵌入<FixedPage.Resources>或<Canvas.Resources>XML元素。依照句法,<Canvas.Resources>和<FixedPage.Resources>的標(biāo)記與用于帶有“內(nèi)容”的標(biāo)記元素的標(biāo)記相像。
根據(jù)本實施例,<Canvas.Resources>或<FixedPage.Resources>必須優(yōu)先于<Canvas>或<FixedPage>的任何復(fù)合屬性語法的屬性值。類似地,它們必須優(yōu)先于<Canvas>或<FixedPage>的任何“內(nèi)容”。
定義固定有效載荷的資源字典任何<FixedPage>或<Canvas>可帶有一使用<Canvas.Resources>XML元素表達(dá)的資源字典。給予單個資源字典中每個元素一獨特名稱,該名稱通過使用與該元素相關(guān)聯(lián)的XML屬性來標(biāo)識。為了從對應(yīng)于屬性的那些特性中辨別出該“名字”特性,名字特性從不同于FixedFormat(固定格式)元素的名空間中取得。該XML名空間的URI是“http://schemas.microsoft.com/PLACEHOLDER-for-resources”。在以下示例中,定義了兩種幾何形狀一種長方形而另一種為圓。
<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è)置為以上定義的資源之一,使用將資源名字包括在{}中的XML特性值。例如,“{長方形}”將表明將使用的幾何圖形。在以下的標(biāo)記示例中,由字典中幾何圖形對象定義的長方形區(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ù)本實施例,在資源字典中的資源定義里不能出現(xiàn)資源引用。
用于解析資源引用的范圍規(guī)則盡管在同一資源字典中一名字不能使用兩次,但可在單個固定頁面部分內(nèi)兩個不同資源字典中使用同一名字。此外,內(nèi)部<Canvas>的資源字典可重新使用在某些外部<Canvas>或<FixedPage>的資源字典中定義的名字。
當(dāng)使用資源引用來設(shè)置元素屬性時,在各個資源字典中搜索一給定名字的資源。如果具有該屬性的元素是<Canvas>,則在該<Canvas>的資源字典(如果有)中搜索所需名字的資源。如果該元素不是<Canvas>,則搜索從最近的包含<Canvas>或<FixedPage>的資源字典開始。如果未在初始搜索的資源字典中定義所需名字,則考慮下一最近包含<Canvas>或<FixedPage>的資源字典。如果搜索持續(xù)到了<FixedPage>根元素,且所需名字的資源未在與該<FixedPage>相關(guān)聯(lián)的資源字典中找到,則錯誤發(fā)生。
以下示例示出這些規(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>
<!--The following Path will be filed with color#000000-->
<Path Fill="{FavoriteColorFill}">
<Path.Data>
...
</Path.Data>
</Path>
<Canvas>
<!--The following Path will be filed with color#000000-->
<Path Fill="{FavoriteColorFill]">
<Path.Data>
...
</Path.Data>
</Path>
</Canvas>
</Canvas>
<--The following path will be filled with color#808080-->
<Path Fill="{FavoriteColorFill}">
<Path.Data>
...
</Path.Data>
</Path>
</FixedPage>
固定頁面繪制模型固定頁面(或嵌套子Canvas)元素是在其上描繪其它元素的元素。內(nèi)容的安排由以下控制為固定頁面(或Canvas)指定的屬性、為固定頁面(或Canvas)上元素指定的屬性、以及為固定有效載荷名空間定義的組合規(guī)則。
使用Canvas以安置各元素在固定標(biāo)記中,所有的元素相對于坐標(biāo)系統(tǒng)的當(dāng)前原點(0,0)進(jìn)行安置。通過將描繪變換特性應(yīng)用到包含元素的固定頁面或Canvas的每個元素中,可移動當(dāng)前原點。
以下示例示出通過描繪變換對各元素的定位。
<Canvas>
<Canvas.Resources>
<PathGeometry def:Name="StarFish">
<!--Various PathFigures in here-->
...
</PathGeometry>
<PathGeometry def:Name="LogoShape">
<!--Various PathFigures in here -->
...
</PathGeometry>
</Canvas.Resources>
<!--Draw a green StarFish and a red LogoShape shifted by 100 to the rightand 50 down-->
<Canvas>
<Canvas.RenderTransform>
<MatrixTransform Matrix="1,0,0,1,100,50"/>
</Canvas.RenderTransform>
<Path Fill="#00FF00"Data="{StarFish}"/>
<Path Fill="#FF0000"Data="{LogoShape}"/>
</Canvas>
<!--Draw a green StarFish and a red LogoShape shifted by 200 to the rightand 250 down -->
<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ù)所示和所述實施例,開始將坐標(biāo)系統(tǒng)設(shè)置為坐標(biāo)系統(tǒng)的一個單位等于1英寸的1/96,以浮點數(shù)表達(dá),坐標(biāo)系統(tǒng)的原點在固定頁面元素的左上角。
可在任意子元素上指定描繪變換特性,以將仿射變換應(yīng)用于當(dāng)前坐標(biāo)系統(tǒng)。
頁面尺寸頁面尺寸由固定頁面元素上的“頁面寬度”和“頁面高度”參數(shù)來指定。
組合規(guī)則固定頁面使用帶有α頻道的繪畫模型。根據(jù)所述實施例,組合必須根據(jù)這些規(guī)則,并以以下順序進(jìn)行●固定頁面(或任何嵌套Canvas)被視為是一無限平面,其中子元素可以其在標(biāo)記中出現(xiàn)的順序繪制。該平面的α頻道被初始化為“0.0”(全透明)。實際上理想的無限平面可被視為是足夠大的位圖緩存,以保持由描繪所有子元素而產(chǎn)生的所有標(biāo)記。
●該平面的內(nèi)容使用由固定頁面(或Canvas)的描繪變換屬性指定的仿射變換來變換。
●由固定頁面(或Canvas)的剪切屬性剪切的所有子元素(也使用描繪變換屬性來變換)在平面上描繪。另外固定頁面剪切成由(0,0,頁面寬度,頁面高度)指定的長方形。如果子元素具有不透明屬性或不透明遮蓋屬性,在平面上描繪之前它被應(yīng)用于子元素。
●最后,固定頁面(或Canvas)的內(nèi)容在其包含元素上描繪。在固定頁面情形中,包含元素是物理成像平面。
描繪根據(jù)這些規(guī)則進(jìn)行●在平面上產(chǎn)生標(biāo)記的元素僅有“字形”和“路徑”。
●通過將“字形”和“路徑”元素安置到“Canvas”上,并應(yīng)用它們的各種有效特性,可獲取所有其它描繪效果。
固定有效載荷元素和屬性根據(jù)所示和所述實施例,固定有效載荷包括在標(biāo)記中使用的一個小XML元素集,以表示頁面及其內(nèi)容。使用<Document>、<FixedPanel>、和<PageContent>元素,固定目標(biāo)部分中的標(biāo)記將文檔的各個頁面一起帶給共同的、易于索引的根。每個固定頁面部分用僅帶有<Path>和<Glyphs>元素(一起進(jìn)行所有的繪制)的<FixedPage>元素來表示頁面的內(nèi)容,并用<Canvas>元素組合它們。
固定有效載荷標(biāo)記的元素分層結(jié)構(gòu)在以下章節(jié)中歸納“頂層元素”、“路徑、剪切的幾何圖形”、“用于填充路徑、字形、或不透明遮蓋的畫筆”、“固定頁面獲Canvas的資源字典”、“α透明度的不透明遮蓋”、“剪切路徑”、以及“變換”。
頂層元素●<Document>[每個固定面板部分只有一個]○特性◆[無]○子元素◆<FixedPanel>[只有一個]●<FixedPanel>
○特性◆頁面高度[可選]◆頁面寬度[可選]○子元素◆<PageContent>[這些子元素的1-N]●<PageContent>
○特性
◆源[必須]◆頁面高度[可選]◆頁面寬度[可選]○子元素◆[無]●<FixedPage>
○通過簡單XML特性直接表達(dá)的屬性◆頁面高度[必須(這里或作為子元素)]◆頁面寬度[必須(這里或作為子元素)]○表達(dá)為XML子元素的資源字典本身◆<FixedPage.Resources>
○通過XML子元素表達(dá)的屬性◆<FixedPage.PageHeight>[必須(這里或作為特性)]◆<FixedPage.PageWidth>[必須(這里或作為特性)]○通過XML子元素的內(nèi)容◆<Canvas>
◆<Path>
◆<Glyphs>
●<Canvas>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)○通過資源字典引用表達(dá)的屬性◆剪切◆描繪變換◆Opacity(不透明)遮蓋○表達(dá)為XML子元素的資源字典本身◆<Canvas.Resources>
○通過XML子元素表達(dá)的屬性◆<Canvas.Opacity>
◆<Canvas.Clip>
◆<Canvas.RenderTransform>
◆<Canvas.OpacityMask>
○通過XML子元素的內(nèi)容◆<Canvas>
◆<Path>
◆<Glyphs>
●<Path>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)○通過資源字典引用表達(dá)的屬性◆剪切◆描繪變換◆Opacity(不透明)遮蓋◆填充○通過XML子元素表達(dá)的屬性◆<Path.Opacity>
◆<Path.Clip>
◆<Path.RenderTransform>
◆<Path.OpacityMask>
◆<Path.Fill>
◆<Path.Data>
●<Glyphs>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)◆Bidilevel◆FontFaceIndex◆FontHingtingEmSize◆FontRenderingEmSize◆FontUri◆索引◆OriginX◆OriginY
◆Sideways◆StyleSimulations◆UnicodeString○通過資源字典引用表達(dá)的屬性◆剪切◆描繪變換◆Opacty(不透明)遮蓋◆填充○通過XML子元素表達(dá)的屬性◆<Glyphs.Clip>
◆<Glyphs.RenderTransform>
◆<Glyphs.OpacityMask>
◆<Glyphs.Fill>
◆<Glyphs.Opacity>
◆<Glyphs.Bidilevel>
◆<Glyphs.FontFaceIndex>
◆<Glyphs.FontHinghingEmSize>
◆<Glyphs.FontRenderingEmSize>
◆<Glyphs.FontUri>
◆<Glyphs.Indices>
◆<Glyphs.OriginX>
◆<Glyphs.OriginY>
◆<Glyphs.Sideways>
◆<Glyphs.StyleSimulations>
◆<Glyphs.UnicodeString>
路徑、剪切的幾何圖形●<Path.Data>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[這些子元素僅有一個Path.Data]◆<GeometryCollection>
◆<PathGeometry>
●<GeometryCollection>
○特性◆CombineMode○子元素[1-N個子元素]◆<GeometryCollection>
◆<PathGeometry>
●<PathGeometry>
○特性◆FillRule○子元素[1-N個子元素]◆<PathFigure>
●<PathFigure>
○特性◆[無]○子元素[StartSegment先,CloseSegment最后,其間1-N個]Poly*]◆<StartSegment>
◆<PolyLineSegment>
◆<PolyBezierSegment>
◆<CloseSegment>
●<StartSegment>
○通過簡單XML特性直接表達(dá)的屬性◆Point○通過XML子元素表達(dá)的屬性◆<StartSegment.Point>
●<PolyLineSegment>
○通過簡單XML特性直接表達(dá)的屬性◆Points○通過XML子元素表達(dá)的屬性◆<PolyLineSegment.Point>
●<PolyBezierSegment>
○通過簡單XML特性直接表達(dá)的屬性◆Points○通過XML子元素表達(dá)的屬性◆<PolyBezierSegment.Point>
用以填充路徑、字形、或不透明遮蓋的畫筆●<Path.Fill>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Path.Fill僅有這些子元素之一]◆<SolidColorBrush>
◆<ImageBrush>
◆<DrawingBrush>
◆<LinearGradientBrush>
◆<RadialGradientBrush>
●<SolidColorBrush>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)◆色彩○通過XML子元素表達(dá)的屬性◆<SolidColorBrush.Opacity>
◆<SolidColorBrush.Color>
●<ImageBrush>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)◆HorizontalAlignment◆VerticalAlignment◆ViewBox◆ViewPort◆Stretch◆TitlMode◆ContentUnits
◆ViewportUnits◆ImageSource○通過XML資源字典引用表達(dá)的屬性◆Transform(變換)○通過XML子元素表達(dá)的屬性◆<ImageBrush.Opacity>
◆<ImageBrush.Transform>
◆<ImageBrush.HorizontalAlignment>
◆<ImageBrush.VerticalAlignment>
◆<ImageBrush.ViewBox>
◆<ImageBrush.ViewPort>
◆<ImageBrush.Stretch>
◆<ImageBrush.TitlMode>
◆<ImageBrush.ContentUnits>
◆<ImageBrush.ViewportUnits>
◆<ImageBrush.ImageSource>
●<DrawingBrush>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)◆HorizontalAlignment◆VerticalAlignment◆ViewBox◆ViewPort◆Stretch◆TitlMode◆ContentUnits◆ViewportUnits○通過資源字典引用表達(dá)的屬性◆Transform(變換)◆Drawing(繪制)○通過XML子元素表達(dá)的屬性
◆<DrawingBrush.Opacity>
◆<DrawingBrush.Transform>
◆<DrawingBrush.HorizontalAlignment>
◆<DrawingBrush.VerticalAlignment>
◆<DrawingBrush.ViewBox>
◆<DrawingBrush.ViewPort>
◆<DrawingBrush.Stretch>
◆<DrawingBrush.TitlMode>
◆<DrawingBrush.ContentUnits>
◆<DrawingBrush.ViewportUnits>
◆<DrawingBrush.Drawing>
●<DrawingBrush.Drawing>
○通過XML子元素的內(nèi)容◆<Canvas>
◆<Path>
◆<Glyphs>
●<LinearGradientBrush>
○通過簡單XML特性直接表達(dá)的屬性◆Opacity(不透明)◆MappingMode◆SpreadMode◆StartPoint◆EndPoint○通過XML資源字典引用表達(dá)的屬性◆Transform(變換)◆GradientStops○通過XML子元素表達(dá)的屬性◆<LinearGradientBrush.Opacity>
◆<LinearGradientBrush.Transform>
◆<LinearGradientBrush.MappingMode>
◆<LinearGradientBrush.SpreadMode>
◆<LinearGradientBrush.StartPoint>
◆<LinearGradientBrush.EndPoint>
◆<LinearGradientBrush.GradientStops>
●<RadialGradientBrush>
○通過簡單XML特性直接表達(dá)的屬性◆Opacitry不透明)◆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子元素的內(nèi)容◆<GradientStop>[這些子元素的1-N]●<GradientStop>
○通過簡單XML特性直接表達(dá)的屬性◆Color(色彩)◆Offset○通過XML子元素表達(dá)的屬性◆<GradientStop.Color>
◆<GradientStop.Offset>
固定頁面或Canvas的資源字典●<FixedPage.Resources>
●<Canvas.Resources>
這些元素已在討論資源字典的章節(jié)中進(jìn)行了討論。
α透明度的不透明遮蓋●<Canvas.OpacityMask>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Canvas.OpacityMask僅有這些子元素之一]◆<SolidColorBrush>
◆<ImageBrush>
◆<DrawingBrush>
◆<LinearGradientBrush>
◆<RadialGradientBrush>
●<Path.OpacityMask>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Path.OpacityMask僅有這些子元素之一]◆<SolidColorBrush>
◆<ImageBrush>
◆<DrawingBrush>
◆<LinearGradientBrush>
◆<RadialGradientBrush>
●<Glyphs.OpacityMask>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Glyphs.OpacityMask僅有這些子元素之一]
◆<SolidColorBrush>
◆<ImageBrush>
◆<DrawingBrush>
◆<LinearGradientBrush>
◆<RadialGradientBrush>
剪切路徑●<Canvas.Clip>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Canvas.Clip僅有這些子元素之一]◆<GeometryCollection>
◆<PathGeometry>
●<Path.Clip>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Path.Clip僅有這些子元素之一]◆<GeometryCollection>
◆<PathGeometry>
●<Glyphs.Clip>
○特性◆[無]○表達(dá)為單個XML子元素的屬性值[Glyphs.Clip僅有這些子元素之一]◆<GeometryCollection>
◆<PathGeometry>
變換●<Canvas.RenderTransform>
○表達(dá)為單個XML子元素的屬性值◆<MatrixTransform>[必須]●<Path.RenderTransform>
○表達(dá)為單個XML子元素的屬性值◆<MatrixTransform>[必須]
●<Glyphs.RenderTransform>
○表達(dá)為單個XML子元素的屬性值◆<MatrixTransform>[必須]●<MatrixTransform>
○通過簡單XML特性直接表達(dá)的屬性◆Matrix○通過XML子元素表達(dá)的屬性◆<MatrixTransform.Matrix>
●<ImageBrush.Transform>
○通過簡單XML特性直接表達(dá)的屬性◆MatrixTransform○通過XML子元素表達(dá)的屬性◆<ImageBrush.Transform.MatrixTransform>
●<DrawingBrush.Transform>
○通過簡單XML特性直接表達(dá)的屬性◆MatrixTransform○通過XML子元素表達(dá)的屬性◆<DrawingBrush.Transform.MatrixTransform>
●<LinearGradientBrush.Transform>
○通過簡單XML特性直接表達(dá)的屬性◆MatrixTransform○通過XML子元素表達(dá)的屬性◆<LinearGradientBrush.Transform.MatrixTransform>
●<RadialGradientBrush.Transform>
○通過簡單XML特性直接表達(dá)的屬性◆MatrixTransform○通過XML子元素表達(dá)的屬性◆<RadialGradientBrush.Transform.MatrixTransform>
固定頁面標(biāo)記每個固定頁面部分表示在<FixedPage>元素中為根的XML標(biāo)記中的頁面內(nèi)容。該固定頁面標(biāo)記提供寫入器和讀取器之間文檔的所見即所得(WYSIWYG)保真度,僅帶有一個小的元素和屬性集<Path>和<Glyphs>元素(一起進(jìn)行所有繪制),并用<Canvas>元素組合它們。
公共元素屬性在討論對固定頁面標(biāo)記中每個元素特定的特性之前,考慮繪制和分組元素的共同特性不透明、剪切、描繪變換、以及不透明遮蓋。這些元素不僅是上層元素的僅有共同屬性,也是將其結(jié)果從父元素到子元素進(jìn)行“積累”的僅有屬性,如在以上組合規(guī)則章節(jié)所述。積累是組合規(guī)則應(yīng)用的結(jié)果。以下表格提供了對這些公共特性的歸納描述,隨后是對每個特性的更透徹討論


不透明特性在描繪時使用不透明性來半透明地混合兩個元素(α混合)。不透明特性在0(全透明)到1(完全不透明)的范圍內(nèi)。在標(biāo)記解析期間,該范圍之外的值被加到其中。因此,有效地,[-∝...0]是透明的,而[1...∝]是不透明的。
通過以下計算應(yīng)用不透明特性(假設(shè)為非自左乘源和目標(biāo)色彩,均指定為scRGB)OE元素的不透明特性,或者OpacityMask中對應(yīng)位置的α值
AS在源平面上呈現(xiàn)的α值RS在源平面上呈現(xiàn)的紅色值GS在源平面上呈現(xiàn)的綠色值BS在源平面上呈現(xiàn)的藍(lán)色值A(chǔ)D在目標(biāo)平面上已呈現(xiàn)的α值RD在目標(biāo)平面上已呈現(xiàn)的紅色值GD在目標(biāo)平面上已呈現(xiàn)的綠色值BD在目標(biāo)平面上已呈現(xiàn)的藍(lán)色值A(chǔ)*在目標(biāo)平面上呈現(xiàn)的結(jié)果α值R*在目標(biāo)平面上呈現(xiàn)的結(jié)果紅色值G*在目標(biāo)平面上呈現(xiàn)的結(jié)果綠色值B*在目標(biāo)平面上呈現(xiàn)的結(jié)果藍(lán)色值所有標(biāo)注有T下標(biāo)的值都是瞬時值(例如RT1)。
步驟1帶有不透明值的多源α值A(chǔ)S=AS·OE步驟2自左乘源αAT1=ASRT1=RS·ASGT1=GS·ASBT1=BS·AS步驟3自左乘目標(biāo)αAT1=ADRT1=RD·ADGT1=GD·ADBT1=BD·AD步驟4混合AT2=(1-AT1)*AT2+AT1RT2=(1-AT1)*RT2+RT1GT2=(1-AT1)*GT2+GT1BT2=(1-AT1)*BT2+BT1步驟5逆向自左乘如果AT2=0,設(shè)置所有的A*R*G*B*為0。
否則A*=AT2R*=RT2/AT2G*=GT2/AT2B*=BT2/AT2剪切屬性剪切屬性被指定為幾何圖形元素<GeometryCollection>或<PathGeometry>之一(細(xì)節(jié)參見Path Data)。
剪切屬性以下列方式應(yīng)用●所有落于由Clip子元素所述的幾何元素內(nèi)的描繪內(nèi)容均可見。
●所有落于由Clip子元素所述的幾何元素外的描繪內(nèi)容均不可見。
RenderTransform子元素MatrixTransform是元素可用的僅有變換特性。它表達(dá)一仿射變換。語法如下<X.RenderTransform>
<MatrixTransform Matrix="1,0,0,1,0,0"/>
</X.RenderTransform>
X represents the element to which the transform is applied.
X表示要應(yīng)用變換的元素。
在矩陣特性中指定的6個數(shù)字為m00、m01、m10、m11、dx、dy。
整個矩陣為m00 m01 0m10 m11 0dx dy 1通過應(yīng)用以下計算,可用RenderTransform變換給定坐標(biāo)X、Y,以產(chǎn)生結(jié)果坐標(biāo)X’、Y’X′=X*m00+Y*m10+dxY′=X*m01+Y*m11+dyOpacityMask子元素OpacityMask指定了一畫筆,但與填充畫筆相反,僅有畫筆的α頻道(參見以上的Opacity特性)被用作描繪該元素的附加參數(shù)。然后該元素每個象素的每個α值被乘以O(shè)pacityMask畫筆中對應(yīng)位置上的α值。
<Canvas>元素
<Canvas>元素被用以將各元素組合在一起。通常,當(dāng)固定頁面元素共享一合成共同特性時(即Opacity、Clip、RenderTRarsform、或OpacityMask),在<Canvas>中將這些元素組合在一起。通過在Canvas上將這些元素組合在一起,共同特性常常應(yīng)用于canvas而不是各個元素。
<Canvas>的特性和子元素<Canvas>僅有前述的共同特性O(shè)pacity、Clip、RenderTRansform、以及OpacityMask。它們與<Canvas>元素一起使用,如下表所述


以下標(biāo)記示例示出了<Canvas>的使用。
<Canvas>
<Path Fill="#0000FF">
<Path.Data>
<PathGeometry>
<PathFigure>
<StartSegment Point="0,0"/>
<PolylineSegment Points="100,0 100,100 0,1000,0"/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
對于Canvas標(biāo)記中的讀取順序,考慮以下內(nèi)容。對于固定頁面,Canvas內(nèi)包含的字形子元素的標(biāo)記順序必須與文本內(nèi)容的所需讀取順序相同。該讀取順序可用于來自查看器中給定頁面的有序文本的交互選擇/復(fù)制,也可用于使能由可訪問技術(shù)對有序文本的訪問。產(chǎn)生固定頁面標(biāo)記以確保標(biāo)記順序和讀取順序的一致性是應(yīng)用程序的責(zé)任。
包含在嵌套Canvas元素內(nèi)的子字形元素內(nèi)嵌于出現(xiàn)在Canvas前后的同屬字形元素之間。
示例<FixedPaqe>
<Glyphs ...UnicodeString="Now is the time for"/>
<Canvas>
<Glyphs...UnicodeString="all good men and women"/>
<Glyphs...UnicodeString="to come to the aid"/>
</Canvas>
<Glyphs...UnicodeString="of the partv."/>
</FixedPage>
<Path>元素路徑元素是描述幾何圖形區(qū)域的基于XML元素。幾何圖形區(qū)域是可填充的,或用作剪切路徑的形狀。諸如長方形和橢圓的常用幾何圖形類型,可使用路徑幾何圖形來表示。通過指定所需Geometry.Data子元素和諸如填充或不透明的描述特性來描述路徑。
<Path>的屬性和子元素可應(yīng)用于<Path>元素的以下屬性如下所述



為了描述如何涂畫由<Path.Data>子元素的幾何圖形描述的區(qū)域,使用Fill(填充)屬性。為了限制在區(qū)域上可畫的<Path.Data>形狀,使用Clip(剪切)屬性。
使用<Path>來描述幾何圖形路徑的幾何圖形被指定為一系列<Path.Data>嵌套子元素,如下所述。幾何圖形可用以下表示包含一個<PathGeometry>子元素集的<GeometryCollection>,或者包含<PathFigures>的單個<PathGeometry>子元素。
<Path>
<Path.Data>
<GeometryCollection>
<PathGeometry>
<PathFigure>
...
</PathFigure>
</PathGeometry>
</GeometryCollection>
</Path.Data>
<Path>
同樣的<GeometryCollection>或<PathGeometry>元素定義在Canvas、路徑、或字形的Clip屬性中使用的剪切路徑的幾何圖形。
以下表格介紹定義路徑幾何圖形的子元素分層結(jié)構(gòu)。

GeometryCollectionGeometryCollection是組合在一起用于根據(jù)布爾CombineMode操作描繪的一個幾何圖形集。GeometryCollection元素是固定頁面標(biāo)記中用于建立幾何圖形可視組合的機(jī)制。

CombineMode特性指定用以在GeometryCollection上組合幾何圖形集的布爾操作。取決于該模式,不同區(qū)域?qū)⒈话ㄔ趦?nèi)或排除在外。

如下處理CombineModes不可交換補(bǔ)和異是不可交換的,且因此在GeometryCollection中的第一幾何圖形和剩下的每個幾何圖形之間定義。例如,對于集{g1,g2,g3},將把異的CombineMode應(yīng)用為((g1異g2)與(g2異g3))。
可交換布爾操作合并、異或、或相交是可交換的,且因此將順序無關(guān)應(yīng)用于各幾何圖形。
PathGeometryPathGeometry元素包含一個PathFigure元素集。PathFigure的并集定義了PathGeometry的內(nèi)核。

對于FillRule特性,考慮以下內(nèi)容。通過取得讓其已填充特性設(shè)定為真的所有被包含PathFigure,并應(yīng)用FillRule以確定封閉區(qū)域,來定義PathGeometry的已填充區(qū)域。FillRule選項指定如何組合包含在幾何圖形中圖形元素的相交區(qū)域,以形成幾何圖形的結(jié)果區(qū)域。
根據(jù)所述實施例,提供EvenOdd Fill(奇偶填充)和NonZero Fill(非零填充)算法。
通過從一點以任何方向畫線條到無限,并檢查形狀的一部分穿過該線條的地方,奇偶填充算法判斷該點在Canvas上的“內(nèi)在性”。從計數(shù)0開始,每當(dāng)該部分從左到右穿過線條時,加1,而每當(dāng)該部分從右到左穿過線條時,減1。在對所有交叉點計數(shù)之后,如果結(jié)果為0,則該點在路徑之外,否則,則在內(nèi)。
通過從一點以任何方向畫到無限的線條,并計算該線條穿過給定形狀的路徑分段數(shù)量,非零填充算法判斷該點在Canvas上的“內(nèi)在性”。如果該數(shù)為奇,該點在內(nèi);如果為偶,該點在外。
PathFigurePathFigure元素由一根或多根線條或曲線分段的集組成。分段元素定義PathFigure的形狀。PathFigure必須總是定義一封閉形狀。

圖形需要起點,其后每根線條或曲線分段從所添加的最后點繼續(xù)。PathFigure集中第一分段必須是StartSegment,而CloseSegment必須是最后的分段。StartSegment具有Point(點)特性。CloseSegment沒有特性。

Path.Data幾何圖形的固定有效載荷標(biāo)記以下提供了用于在Canvas上繪制和填充路徑的標(biāo)記。在以下的特定示例中,在Canvas上繪制長方形路徑,并用實心綠色畫筆進(jìn)行填充。
<Canvas>
<Path Fill="#0000FF">
<Path.Data>
<PathGecmetry>
<PathFigure>
<StartSegment Point="0,0"/>
<PolylineSegmentPoints=100,0 100,100 0,1000,0"/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
以下標(biāo)記描述了繪制三次Bezier曲線。即,除PolyLineSegment之外,固定有效載荷標(biāo)記包括用于繪制三次Bezier曲線的PolyBezierSegment。
<Canvas>
<Path Fill="#0000FF">
<Path.Data>
<PathGeometry>
<PatbFigure>
<StartSegment Point="0,0"/>
<PolybezierSegment Points="100,0 100,100 0,1000,0"/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
畫筆使用畫筆來涂畫由<Path>元素定義的幾何圖形內(nèi)部,并填充用<Glyphs>元素描繪的字符位圖。也在定義<Canvas.OpacityMask>、<Path.OpacityMask>、以及<Glyphs.OpacityMask>的α透明遮蓋中使用畫筆。固定頁面標(biāo)記包括以下畫筆

盡管所有畫筆都具有Opacity特性,特性格局各畫筆而變化。ImageBrush和DrawingBrush共享疊放能力。兩個梯度填充畫筆也有共同的特性。
畫筆子元素在標(biāo)記中的使用如下所示
<Path>
<Path.Fill>
<SolidColorBrush Color="#00FFFF"/>
</Path.Fill>
…</Path>
畫筆的共同屬性根據(jù)所述實施例,以下屬性可用于除簡單畫筆SolidColorBrush之外的所有畫筆,該簡單畫筆具有較少的可選子元素。


ImageBrsh和DrawingBrush的共同特性

水平對準(zhǔn)特性指定如何在畫筆填充的區(qū)域內(nèi)將畫筆水平對準(zhǔn)。豎直對準(zhǔn)特性指定如何在畫筆填充的區(qū)域內(nèi)將畫筆豎直對準(zhǔn)。ViewBox特性具有缺省值(0,0,0,0)(認(rèn)為是未經(jīng)設(shè)定)。當(dāng)未設(shè)定時不作調(diào)整,且略去Stretch特性。該viewbox為內(nèi)容指定新的坐標(biāo)系統(tǒng),即重新定義viewport的范圍和原點。Stretch特性有助于指定那些內(nèi)容如何映射到viewport中。ViewBox特性的值是4個由空格和/或逗號分隔的無單位數(shù)<min-x>、<min-y>、<width>和<height>的列表,且具有類型Rect的。Viewbox rect指定映射到有限框的用戶空間中的長方形。它與插入scaleX和scaleY一樣工作。Stretch特性(在不是沒有選項的情形中)提供用于保持圖像高寬比的其它控件。將其它變換應(yīng)用于給定元素的所有子元素中以獲取指定效果。如果在畫筆上有變換,則它在對ViewBox的映射“之上”應(yīng)用。
Stretch特性有以下模式無、填充、均勻、均勻填充。

簡單畫筆及其特性Path.Brush和Canvas.Brush子元素包括以下SolidColorBrush、ImageBrush、以及DrawingBrush。
SolidColorBrush用純色填充幾何圖形區(qū)域。如果有色彩的α組件,則以倍增方法將其與畫筆中的相應(yīng)不透明特性相組合。

以下示例示出如何表達(dá)SolidColorBrush的色彩特性。
<Path>
<Path.Fill>
<SolidColorBrush Color="#00FFFF"/>
</Path.Fill>
...
</Path>
可使用ImageBrush來用圖像填充一空間。ImageBrush的標(biāo)記使得URI能被指定。如果所有其它特性被設(shè)置為其缺省值,可伸展該圖像以填充區(qū)域的邊框。

ImageSource特性必須指向受支持可及圖像格式之一,或?qū)蜻@些類型之一的圖像的選擇器。
可使用DrawingBrush來用向量圖填充一空間。DrawingBrush具有一繪制子元素,其在標(biāo)記中的使用如下所示。
<Path>
<Path.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<Drawing>
<Path_/>
<Glyphs_/>
</Drawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Path.Fill>
</Path>
梯度畫筆及其特性通過將一組梯度停止點指定為梯度畫筆的XML子元素,可繪制梯度。這些梯度停止點指定依某些漸進(jìn)的色彩。在該框架中支持兩類梯度畫筆線性和弧形。
通過在指定色彩空間的梯度停止點之間作內(nèi)插,可繪制該梯度。LinearGradientBrush和RadialGradientBrush共享以下共同特性


對于SpreadMethod特性,考慮以下。SpreadMethod選項指定如何填充空間。缺省值是Pad。

MappingMethod對于LinearGradientBrush,考慮以下。LinearGradientBrush指定沿一向量的線性梯度畫筆。

以下標(biāo)記示例示出對LinearGradientBrush的使用。帶有長方形路徑的頁面用線性梯度填充
<FixedPanel>
<FixedPage>
<Path>
<Path.Fill>
<LinarGradientBrush 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"/>
<PoiyLineSeggment Points="100,0 100,100 0,100"/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</FixedPage>
</FixedPanel>
該示例示出帶有用線性梯度填充的長方形路徑的頁面。該路徑也具有剪切它的八角形形狀中的剪切屬性。
<FixedPanel>
<FixedPage>
<Path>
<Path.Clip>
<PathGeometry>
<PathFigure>
<StartSegment Point="25,0"/>
<PolyLineSegment Points="75,0 100,25100,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>
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,1000,100"/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</FixedPage>
</FixedPanel>
弧形梯度在編程模型中與線性梯度相似。然而,線性梯度具有起點和終點以定義梯度向量,而弧形梯度則具有圓以及焦點,以定義梯度的表現(xiàn)。該圓定義梯度的終點-換言之,在1.0上的梯度停止點定義圓周上的色彩。焦點定義梯度的中心。在0.0上的梯度停止點定義焦點上的色彩。

α和透明度根據(jù)所示和所述實施例,每個元素的每個象素帶有范圍為0.0(全透明)~1.0(全不透明)的α值。在混合各元素時使用該α值以獲取透明度的可視效果。
每個元素可具有不透明特性,用它可使該元素每個象素的α值統(tǒng)一倍增。
此外,OpacityMask允許每個象素不透明性的規(guī)范,它將控制如何將描繪內(nèi)容混合到其目標(biāo)中。由OpacityMask指定的不透明性可倍增地與在內(nèi)容的α頻道中呈現(xiàn)的任何不透明性相組合。通過查看遮蓋中每個象素的α頻道,來確定由OpacityMask指定的每個象素不透明性-色彩數(shù)據(jù)被忽略。
OpacityMask的類型是畫筆。這給出了畫筆的內(nèi)容如何以各種不同方式映射到內(nèi)容范圍的規(guī)范。正如用以填充幾何圖形時,畫筆在適當(dāng)處為按需填充整個內(nèi)容空間、伸展或復(fù)制其內(nèi)容。這意味著,ImageBrush將伸展其ImageSource以完全覆蓋內(nèi)容,而GradientBrush將進(jìn)行邊到邊地延伸。
用于α混合的所需計算如前面章節(jié)“不透明特征”中所述。
以下示例示出了如何使用OpacityMask來創(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ū)域由路徑元素的幾何圖形定義。
路徑元素的填充屬性指定所述區(qū)域的填充內(nèi)容。圖像是一種填充類型,由ImageBrush畫到區(qū)域中。所有的畫筆具有缺省行為,即通過適當(dāng)?shù)厣煺够蛑貜?fù)(疊放)畫筆內(nèi)容來填充整個區(qū)域。在ImageBrush的情形中,由ImageSource屬性指定的內(nèi)容將被伸展以完全覆蓋該區(qū)域。
以下的標(biāo)記示出如何將圖像置于Canvas上。
<Canvas>
<Path>
<Path.Data>
<GeometryCollection>
...
</GeometryCollection>
</Path.Data>
<Path.Fill>
<ImageBrush ImageSource="/images/dog.jpg"/>
</Path.Fill>
</Path>
</Canvas>
因為許多圖像是長方形的,在資源字典中包括長方形路徑元素在簡化標(biāo)記中是有用的。然后使用RenderTransform特性可定位該路徑(參見以上內(nèi)容)。
<Canvas>
<Canvas.Resources>
<PathGeometry def:Name="Rectangle">
<PathFigure>
<StartSegment Point="0,0"/>
<PolylineSeggment Points="100,0 100,100 0,100"/>
<CloseSegment/>
</PathFigure>
</PathGeometry>
</Canvas.Resources>
<Canvas>
<Canvas.RenderTransform>
<MatrixT ansform 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符號來指定色彩。scRGB規(guī)范稱為“IEC 61966-2-2scRGB”并可從www.iec.ch獲取。
ARGB參數(shù)可如下表所述。

色彩映射目前,要考慮帶有指定色彩上下文的元數(shù)據(jù)的色彩元素標(biāo)記。這種元數(shù)據(jù)可包含ICC色彩簡介,或其它色彩定義數(shù)據(jù)。
<Glyphs>元素使用字形元素在固定有效載荷中表示文本。該元素被設(shè)計成符合打印和可及文檔的要求。
字形元素可具有以下屬性的組合。



文本標(biāo)記的縱覽字形度量每個字形定義如何與其它字形對齊的度量。根據(jù)一實施例的示例性度量如圖12所示。
提升寬度和組合標(biāo)記一般而言,字體中的字形是基本字形,或可附于基本字形的組合字形。通常基本字形具有非零的提升寬度,以及0,0的偏置向量。組合字形通常具有零提升寬度。偏置向量可用以調(diào)整組合標(biāo)記的位置,因此對于組合標(biāo)記可具有非0,0值。
字形筆劃中的每個字形具有控制其位置的三個值。這些值表示起點、提升寬度、以及字形偏置,其中每一個如下所述●起點假設(shè)每個字形都給予一名義起點,對于該筆劃中的第一字形,這是該筆劃的起點。
●提升寬度每個字形的提升寬度提供相對于該字形起點的下一字形的起點。提升向量總是在筆劃漸進(jìn)方向上提取。
●字形偏置(基本或標(biāo)記)字形偏置向量調(diào)整相對于其名義起點的字形位置。
字符、字形和集聚映射集聚映射對每個Unicode碼點包含一個條目。該條目中的值是表示該碼點的GlyphIndices數(shù)組中第一字形的偏置?;蛘撸?dāng)該碼點是表示不可分字符集聚的碼點組的一部分時,GlyphIndices數(shù)組中的第一字形代表對該集聚進(jìn)行表示的第一字形偏置。
集聚映射集聚映射可表示一對一、多對一、一對多、或多對多的碼點與字形的映射。一對一映射是在每個碼點準(zhǔn)確地由一個字形表示的情況,圖13中的集聚映射條目為0,1,2,......。
多對一映射是在兩個或多個碼點映射到單個字形時。那些碼點的條目指定字形索引緩存中該字形的偏置。在圖14的示例中,‘f’和‘i’字符已被一連字符替換,與許多襯線字體中公共的排字實踐一樣。
對于一對多映射,結(jié)合圖15考慮以下內(nèi)容?!甋araAm’包含位于先前基本字符(環(huán))之上的一部分,以及位于基本字符(鉤)右側(cè)的一部分。當(dāng)微調(diào)泰文時,鉤從基本字符上隔開,而環(huán)仍保留在基本字符之上,因此許多字體將環(huán)和鉤編碼為單獨字形。當(dāng)一碼點映射到兩個或多個字形時,該碼點ClusterMap中的值指向表示該碼點GlyphIndices數(shù)組中的第一字形。
對于多對多映射,結(jié)合圖16考慮以下內(nèi)容。在某些字體中字符集聚的一不可分碼點組映射到一個以上字形。例如,這在支持印度腳本的字體中是普通的。當(dāng)一不可分碼點組映射到一個或多個字形時,每個碼點ClusterMap中的值指向表示該碼點GlyphIndices數(shù)組中的第一字形。
以下示例示出泰米爾字的Unicode和字形表示。前兩個碼點組合以產(chǎn)生三個字形。
指定集聚集聚規(guī)范優(yōu)先于非1∶1集聚第一字形的字形規(guī)范(映射比一字符對一字形復(fù)雜得多)。
每個集聚規(guī)范具有以下形式(ClusterCodepointCount(集聚碼點計數(shù))[:ClusterGlyphCount(集聚字形計數(shù))])

<Glyphs>標(biāo)記字形元素將字體指定為URI、外觀索引、以及一個其它特性集,如上所述。例如

每個字形規(guī)范具有以下形式[GlyphIndex][,[Advance][,[uOffset][,[vOffset][,[Flags]]]]]該字形規(guī)范的每個部分都是可選的。


對于計算無舍入誤差積累的提升,考慮以下內(nèi)容。必須將每個提升值計算為隨后字形準(zhǔn)確未舍入起點-前面字形經(jīng)計算(即經(jīng)舍入)提升寬度之和。這樣,每個字形被定位于在其準(zhǔn)確位置全長的0.5%之內(nèi)。
字形標(biāo)記示例


最優(yōu)化字形標(biāo)記的尺寸如果目標(biāo)客戶機(jī)能可靠地再生它們,諸如字形索引和提升寬度的標(biāo)記細(xì)節(jié)可從該標(biāo)記中略去。以下選項允許常用簡單腳本的顯著優(yōu)化。
最優(yōu)化字形索引的標(biāo)記在以下情形中可從標(biāo)記中略去字形索引在Unicode字符串中字符的位置與字形字符串中字形的位置之間有一對一映射、字形索引是字體CMAP(字符映射)表格中的值、以及Unicode字符具有明確語義。
當(dāng)字符對字形的映射為以下情形時,應(yīng)在標(biāo)記中提供字形索引●不是一對一,諸如當(dāng)兩個或多個碼點形成單個字形(連字)時,或●一碼點產(chǎn)生多個字形,或●當(dāng)已出現(xiàn)字形替換的任何其它形式時,諸如通過OpenType特征的應(yīng)用。
當(dāng)描繪引擎可替換與字體CMAP(字符映射)表格中不同的字形時,應(yīng)在標(biāo)記中提供字形索引。當(dāng)所需字形表示不在字體的CMAP表格中,應(yīng)提供字形索引。
最優(yōu)化字形位置的標(biāo)記當(dāng)所需提升寬度確實是用于字體的HMTX(水平度量)或VMTX(豎直度量)表格中的字形時,可從標(biāo)記中略去字形提升寬度。
字形豎直偏置為零時,可從標(biāo)記中略去。這對基本字符而言幾乎總是真的,而對在更簡單腳本中組合標(biāo)記而言通常是真的。然而,對于在諸如阿拉伯和印度等更復(fù)雜的腳本中這常常是假的。
最優(yōu)化字形標(biāo)記的標(biāo)記對于帶有正常齊行優(yōu)先級的基本字形,可略去字形標(biāo)記。
結(jié)論上述模型內(nèi)容框架和文檔格式方法和系統(tǒng)提供了一組基塊,用于組成、封裝、分發(fā)、以及描繪以文檔為中心的內(nèi)容。這些基塊定義的文檔格式的與平臺無關(guān)框架,該框架使得軟件和硬件系統(tǒng)能夠可靠地并一致地產(chǎn)生、交換、和顯示文檔。所示和所述可及包格式以一方式提供用于存儲分頁或預(yù)先分頁文檔的格式,該方式可在廣泛環(huán)境中的裝置和應(yīng)用程序之間以及及廣泛情形中全保真地顯示或打印可及包的內(nèi)容。盡管本發(fā)明以結(jié)構(gòu)化特征和/或方法論步驟的專用語言進(jìn)行了描述,但可以理解在所附權(quán)利要求書中定義的本發(fā)明不必限于所述特定特征或步驟之中。相反,特定特征和步驟被揭示為實現(xiàn)本發(fā)明的優(yōu)選形式。
權(quán)利要求
1.一種方法,其特征在于,包括接收一文檔用于進(jìn)行處理;標(biāo)識在所述文檔中包含的特性;確定與所述文檔中每個特性相關(guān)聯(lián)的一缺省處理行為;當(dāng)處理所述文檔時如果一特性未得到理解,并設(shè)置所述特性的缺省處理行為以略去新的特征,在所述文檔中略去所述特性;如果一特性未得到理解,并設(shè)置所述特性的缺省處理行為以要求對各特性的理解,暫停對所述文檔的處理;以及如果特性得到理解,則處理所述文檔中的所述特性。
2.如權(quán)利要求1所述的方法,其特征在于,屬性包括包含于所述文檔中的元素。
3.如權(quán)利要求1所述的方法,其特征在于,在處理所述文檔的不同部分時所述缺省處理行為可變化。
4.如權(quán)利要求1所述的方法,其特征在于,略去一特性包括如果一攜帶參數(shù)活動,則保留所述被略去特性以備后用;以及如果一攜帶參數(shù)不活動,則丟棄所述被略去特性。
5.如權(quán)利要求4所述的方法,其特征在于,保留所述略去特性包括存儲所述特性用于在后來進(jìn)程中使用。
6.如權(quán)利要求1所述的方法,其特征在于,所述缺省處理行為由一組兼容性規(guī)則屬性設(shè)置。
7.如權(quán)利要求1所述的方法,其特征在于,還包括標(biāo)識與可略去內(nèi)容相關(guān)聯(lián)的行為。
8.如權(quán)利要求1所述的方法,其特征在于,所述缺省處理行為由可略去和必須理解參數(shù)來設(shè)置。
9.如權(quán)利要求1所述的方法,其特征在于,所述文檔由一讀取器應(yīng)用程序進(jìn)行處理。
10.如權(quán)利要求1所述的方法,其特征在于,所述文檔中包含的所述特性是XML特性。
11.一種或多種具有計算機(jī)可讀指令的計算機(jī)可讀介質(zhì),所述指令在執(zhí)行時實現(xiàn)權(quán)利要求1所述的方法。
12.一種計算系統(tǒng)包括權(quán)利要求11的所述計算機(jī)可讀介質(zhì)。
13.一種方法,其特征在于,包括接收一文檔用于進(jìn)行處理;確定與所述文檔中各元素相關(guān)聯(lián)的一缺省處理行為;確定可略去內(nèi)容的行為;當(dāng)處理所述文檔時如果一元素未得到理解,并設(shè)置所述元素的缺省處理行為以略去新的特征,在所述文檔中略去所述元素;如果一元素未得到理解,并設(shè)置所述元素的缺省處理行為以要求對各元素的理解,暫停對所述文檔的處理;以及如果元素得到理解,則繼續(xù)處理所述文檔。
14.如權(quán)利要求13所述的方法,其特征在于,在處理所述文檔的不同部分時所述缺省處理行為可變化。
15.如權(quán)利要求13所述的方法,其特征在于,所述文檔中的元素是XML元素。
16.一種系統(tǒng),其特征在于,包括一種或多種計算機(jī)可讀介質(zhì);駐留于所述介質(zhì)上的軟件指令,所述指令在執(zhí)行時能夠用包括下列標(biāo)記表示來表示一文檔一第一元素,其控制應(yīng)用程序如何對未知特性作出反應(yīng);一第二元素,其聲明一相關(guān)聯(lián)名空間是可略去的;一第三元素,其指定對可略去內(nèi)容的行為;以及一第四元素,其逆轉(zhuǎn)了經(jīng)聲明可略去名空間的效果。
17.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括指定優(yōu)選內(nèi)容的一第五元素。
18.如權(quán)利要求17所述的系統(tǒng),其特征在于,還包括指定可由所述優(yōu)選內(nèi)容替換的內(nèi)容的一第六元素。
19.如權(quán)利要求16所述的系統(tǒng),其特征在于,還包括指定是否保留或丟棄被略去特性的一第五元素。
20.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述標(biāo)記表示是一XML標(biāo)記表示。
21.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述標(biāo)記表示基于名空間統(tǒng)一資源標(biāo)識符。
22.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述標(biāo)記表示使得使用新標(biāo)記特征的文檔能由不理解所述新標(biāo)記特征的應(yīng)用程序進(jìn)行處理。
23.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述應(yīng)用程序是一讀取器應(yīng)用程序。
24.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述應(yīng)用程序是一解析器。
25.如權(quán)利要求16所述的系統(tǒng),其特征在于,可略去內(nèi)容的所述行為包括略去與一特定特性相關(guān)聯(lián)的所有內(nèi)容。
26.如權(quán)利要求16所述的系統(tǒng),其特征在于,可略去內(nèi)容的所述行為包括略去一特定特性;以及略去所有與所述特定特性相關(guān)聯(lián)的內(nèi)容。
27.如權(quán)利要求16所述的系統(tǒng),其特征在于,可略去內(nèi)容的所述行為包括略去與一特定特性相關(guān)聯(lián)的內(nèi)容;以及處理所述特定特性中嵌套的內(nèi)容。
28.一種方法,其特征在于,包括創(chuàng)建一定義文檔的包,其中所述文檔包括組成所述文檔的多個部分,且所述多個部分的每一個具有一相關(guān)聯(lián)名字;以及包括與所述多個部分相關(guān)聯(lián)的一標(biāo)記表示,所述標(biāo)記表示包括一優(yōu)選內(nèi)容,其由能夠處理所述優(yōu)選內(nèi)容的應(yīng)用程序使用;以及一后退內(nèi)容,其由不能處理所述優(yōu)選內(nèi)容的應(yīng)用程序使用。
29.如權(quán)利要求28所述的方法,其特征在于,所述標(biāo)記表示還包括控制應(yīng)用程序如何對于未知特性作出反應(yīng)的一元素。
30.如權(quán)利要求28所述的方法,其特征在于,所述標(biāo)記表示還包括將名空間聲明為可略去的一元素。
31.如權(quán)利要求28所述的方法,其特征在于,所述標(biāo)記表示還包括將與名空間相關(guān)聯(lián)的所有元素和特性都聲明為可略去的一元素。
32.如權(quán)利要求28所述的方法,其特征在于,所述標(biāo)記表示還包括指定對可略去內(nèi)容的行為的一元素。
33.如權(quán)利要求28所述的方法,其特征在于,所述標(biāo)記表示還包括逆轉(zhuǎn)被聲明可略去名空間的所述效果的一元素。
34.如權(quán)利要求28所述的方法,其特征在于,所述優(yōu)選內(nèi)容及所述后退內(nèi)容可以任意方式嵌套。
35.如權(quán)利要求28所述的方法,其特征在于,在處理所述標(biāo)記表示期間,如果所述優(yōu)選內(nèi)容指示暫停處理,則所述標(biāo)記表示的處理用所述后退內(nèi)容繼續(xù)。
36.如權(quán)利要求28所述的方法,其特征在于,所述標(biāo)記表示還包括控制應(yīng)用程序如何對未知特性作出反應(yīng)的一特性。
37.一種或多種具有計算機(jī)可讀指令的計算機(jī)可讀介質(zhì),所述指令在執(zhí)行時實現(xiàn)所述權(quán)利要求28的方法。
38.一種包括權(quán)利要求37的所述計算機(jī)可讀介質(zhì)的計算系統(tǒng)。
全文摘要
描述了模塊化內(nèi)容框架和文檔格式的方法和系統(tǒng)。所述框架和格式定義用于組成、封裝、分發(fā)、以及描繪以文檔為中心的內(nèi)容的一組基塊。這些基塊定義對能使軟件和硬件系統(tǒng)可靠并一致地產(chǎn)生、交換、以及顯示文檔的文檔格式的一個平臺無關(guān)框架。已以靈活和可擴(kuò)展的方式設(shè)計了該框架和格式。除了該一般框架和格式以外,還使用該一般框架定義了一稱為可及包格式的特定格式??杉鞍袷绞且环N用于存儲分頁文檔的格式。在廣泛環(huán)境的裝置和應(yīng)用程序上以及廣泛的情形中,可全保真地顯示或打印可及包的內(nèi)容。
文檔編號G06F17/22GK1799046SQ200480001312
公開日2006年7月5日 申請日期2004年7月22日 優(yōu)先權(quán)日2004年4月30日
發(fā)明者J·杜尼茲, C·P·雅茲德澤維斯基, D·奧恩斯坦, R·雷爾耶, O·H·弗爾, M·J·希爾波格, J·特納斯基, R·A·利特爾, C·L·安德森 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
新平| 仙游县| 健康| 门头沟区| 嵊泗县| 湖州市| 壶关县| 汶川县| 永兴县| 卢氏县| 沂水县| 逊克县| 凯里市| 桐城市| 宁陕县| 获嘉县| 吉水县| 托里县| 龙口市| 连南| 梁河县| 峨眉山市| 手游| 周口市| 德惠市| 东丽区| 曲靖市| 丹东市| 科尔| 元谋县| 绍兴县| 西畴县| 烟台市| 临清市| 普定县| 永嘉县| 桂林市| 阿拉善右旗| 东乌珠穆沁旗| 集安市| 庐江县|