首页> 中国专利> 大纲、语法分析方法和基于一种大纲生成一个位流的方法

大纲、语法分析方法和基于一种大纲生成一个位流的方法

摘要

本发明提出了一种来源于(B2)XML大纲的新大纲类型,XML大纲允许以一种通用方式描述编码格式。这样的一个大纲被用于执行位流(B1)的语法分析以生成表示该大纲实例的位流的文档(B4),或从表示该位流的文档中生成一个位流。

著录项

  • 公开/公告号CN1462400A

    专利类型发明专利

  • 公开/公告日2003-12-17

    原文格式PDF

  • 申请/专利权人 皇家菲利浦电子有限公司;

    申请/专利号CN02801442.1

  • 发明设计人 S·德维莱尔;

    申请日2002-02-08

  • 分类号G06F17/30;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人程天正

  • 地址 荷兰艾恩德霍芬

  • 入库时间 2023-12-17 15:01:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-04-01

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20090107 终止日期:20140208 申请日:20020208

    专利权的终止

  • 2009-01-07

    授权

    授权

  • 2004-05-19

    实质审查的生效

    实质审查的生效

  • 2003-12-17

    公开

    公开

说明书

本发明涉及一种对包括具有遵守某一格式的结构和内容的数据的一个位流进行语法分析的方法,该方法是打算用来生成该流的一个树状表示。本发明同样涉及依据某一格式从一个文档中生成一个位流的方法,该文档是该位流的树状表示且包括数据,特别是通过使用某一输入模式输入的数据。本发明还涉及一个大纲,它定义可能具有一个或多个分面(facet)的一个或多个数据类型以及包括多个元素,它为这些元素描述一个名称、一个数据类型、一个交错、一个次序和多个预定或随机的发生率,一个元素的发生率是强制的或是可选择的。

本发明还涉及用于实现这种方法的计算机程序,一个包括用于存储这样一种大纲和这样的计算机程序的存储装置的处理单元,以及一个包括至少一个源实体和一个目的实体的传输系统,该源实体包括用于存储这样的大纲和一个或多个这样程序的装置。

本发明应用在内容的编辑、修改和合并领域上。

本发明的应用的一个实例是作为用户简档的一个函数适配要传输到目的地的内容(屏幕,计算容量,存储容量,传输所用的链路...)。这样的适配特别地允许避免对接收者将不能使用的数据的无用传输,以及因此节省了通带。

关于这点,由Koninklijke Philips Electronics N.V.在2001年5月2日提出的法国专利申请第0101530号已经描述一个生成方法,用于从一个用标记语言所写以及描述一个基础的渐进文件的基础文档中生成具有某些特征要素的文件,该方法包括一个转换步骤,通过将作为该特征要素的函数的一个预定转换应用于该基础文档来生成一个转换后的文档,具有该特征要素的文件从该转换后的文档中生成。这种方法在于在一个基础文档上执行必要的转换,在该基础文档中,渐进文件的结构是显而易见的,它为避免不得不解码该基础渐进文档来不同地记录它提供了可能性。

不过,这个文件生成方法暗示了一个描述该基础渐进文件的基础文档的生成,以及从该转换后的文档中生成另一个文件。

本发明的一个目的是提出执行这样操作的一个自动和通用的方法。

因此,本发明特别地包括提出一个新大纲类型,该类型允许以一种通用的方式描述一种编码格式。

依据本发明的一种大纲定义了可能具有一个或多个分面的一个或多个数据类型。该大纲包括多个元素,它为这些元素描述一个名称、一个数据类型、一个交错、一个次序和多个预定或随机的发生率,一个元素的发生率是强制的或是可选择的。以及其特征在于它具有以下特征要素中的至少一项:

-它定义了一种数据类型,该类型对应于不确定长度的二进制段,以及具有至少一个与该数据输入模式相关的分面,并且可选地具有与该二进制段的停止标志相关的一个分面,

-它定义了一种或多种数据类型,这些类型对应于预定长度的二进制字,以及具有至少一个与该长度相关的分面,并且可选地是与该二进制字包含的填补位相关的一个分面,

-它定义了一个或多个由数据访问路径构成的变量以及包括一个或多个条件分支来描述作为该值或该变量的函数的各种结构或可能的内容。

依据本发明的方法,对包括具有依照某一格式的结构和内容的数据的一个位流进行语法分析,来生成该流的一个树状表示,该方法的特征在于它包括:

A)  读取一个大纲,它用于总地描述该格式;

a)  定义可能包括一个或多个分面的一个或多个数据类型,特别是:

-当该格式使用预定长度的二进制字时;一个或多个数据类型对应预定长度的二进制字,该数据类型具有与该长度相关的至少一个分面,以及当该预定长度的二进制字可能包括一个或多个填补位时,该数据类型具有一个与该填补位相关的分面,

-当该格式使用不确定长度的二进制段,它具有打算通过使用某一输入模式而以该表示输入的内容时,一个数据类型对应该二进制段,该数据类型具有至少一个与所述输入模式相关的分面,以及当该二进制段由一个停止标志进行定义时,该数据类型具有一个与该停止标志相关的分面,

b)  包括多个元素,它为这些元素描述一个名称、一个数据类型、一个交错、一个预定或随机的次序和多个发生率,一个元素的发生率是强制的或是可选择的,

c)  当该格式规定位于该位流前端的数据给出有关该位流剩余部分的结构或内容的信息时,

-在该树状表示中定义一个到所述位于前端的数据的访问路径组成的一个或多个变量,

-以及包括一个或多个条件分支以描述作为该变量值一个函数的各种可能的结构或内容,

B)  在该位流中搜索对应该大纲包含的元素的数据,

C)  生成该大纲的一个实例,该大纲包括在该位流中找到的数据以及它组成该树状表示。

因此本发明包括制造一个工具,它允许总地描述大纲中的一个格式。然后本发明包括使用这样的大纲用于分析依据该格式的位流的语法,以便生成表示该流并作为该流的一个实例的文档。该大纲规定了依据该格式的位流中所可能包括的各种数据类型,以及在最后的文档中包括这些数据的方式。该大纲中所规定的数据类型以及在最后文档中包含的规则依赖于所考虑的格式。

通过举例,当所考虑的格式是JPEG2000格式时(ISO/IEC FCD标准15444-1)时,该大纲:

-定义对应于预定长度的二进制字的各种数据类型,它们可能包括填补位并具有一个与该长度相关的分面以及一个或多个与该填补位相关的分面,

-定义了一个数据类型,它对应于由一个停止标志定义的不确定长度的二进制段,以及具有打算通过使用某一输入模式以该表示输入的内容,并且具有与一个输入模式相关的分面以及一个与该停止标志相关的分面,

-定义由在该树状表示中到位于该位流前端的数据的一个访问路径组成的一个或多个变量,以及它提供关于该位流剩余部分的结构或内容的信息,

-以及包括一个或多个条件分支来描述可能作为该变量值的函数的各种结构或内容。

依据本发明的一种方法,依据某一格式从文档中生成一个位流,该文档是该位流的树状表示以及包括数据,特别是通过某一输入模式输入的数据。该方法的特征在于包括:

A)  读取该文档,

B)  以并行方式读取一个用于总地描述该格式的大纲:

a)  定义一个或多个可能具有一个或多个分面的数据类型,特别是:

-一个数据类型对应于不确定长度的二进制段,其中具有至少一个和该输入模式相关的分面

-以及,当该格式使用预定长度的二进制字时,一个或多个数据类型对应于预定长度的二进制字,其中具有至少一个和该长度相关的分面,以及当该二进制字包括一个或多个填补位时,具有一个与该填补位相关的分面,

b)  包括多个元素,它为这些元素描述一个名称、一个数据类型、一个交错、一个次序和多个预定或随机的发生率,一个元素的发生率是强制的或是可选择的。

c)  当该格式规定:位于该位流前端的数据给出有关该位流剩余部分的结构或内容的信息时:

-在该树状表示中定义到所述位于前端的数据的一个访问路径组成的一个或多个变量,

-以及包括一个或多个条件分支来描述可能作为该变量值的一个函数的各种结构或内容,以定义包含在该文档中的数据类型,

C)  编码该数据作为该定义类型的一个函数,

D)  从该编码后的数据组成一个位流。

因此本发明同样包括使用前面描述类型的大纲,用于从表示该位流以及作为该大纲的一个实例的文档中生成位流。并行读取该文档和大纲来确定该文档所包含的数据类型以便依照格式所提供的形式编码它们以及用该编码后的数据组成一个位流。

通过非限制性实例,参照后面描述的实施方案,本发明的这些和其他方面将变得明显和被加以说明。

在附图中:

图1表示的是一个框图,概括了依据本发明的语法分析方法的操作的基本模式,

图2表示的是一个框图,概括了依据本发明的位流生成方法的操作的基本模式,以及

图3是依据本发明的一个传输系统的实例。

在图1中所表示的框图说明了依据本发明的语法分析方法的操作的基本模式。框B1表示依据预定格式的一个位流。框B2表示的是总地描述该预定格式的大纲。框B3表示的是一个语法分析器,它允许对位流B1进行语法分析以致生成文档B4,该文档B4是位流B1的树状表示以及是大纲B2的一个实例。

大纲B2描述了该位流的语法。它特别地规定了该位流中可能出现的数据类型以及这些类型包含在该文档中的方式。树状表示B4依赖对该位流B1的分析而生成。

在图2中所表示的框图说明了依据本发明的位流生成方法的操作原则。框B’2表示的是以通用方式描述编码格式的大纲。框B’4表示的是大纲B’2实例的一个文档。框B’3表示的是一个位流生成器,它允许并行读取文档B’4和大纲B’2以生成位流B’1。方便的是,用于同一编码格式的大纲B2和B’2是相同的。

文档B’4与大纲B’2被一起读取以判定文档B’4中所包含的数据类型。对从文档B’4中读取的值而言,在大纲B’2中找到的相应数据类型确定了编码该值要用的编码模式。

通常当然不必要给出大纲中编码格式结构的完整细节。细节的程度取决于所考虑的应用。因为在法国专利申请号0101530中所描述的使用已经在本申请的引言中提到(生成一个文件的方法—例如一个JPEG2000文件—具有适合于接受者简档的特征要素),JPEG2000标记的某些段要被逐个参数地详细给出以允许覆盖这些参数并修改它们。将标记的其他段作为一整块进行处理,这是因为没有必要访问它们所包括的参数。

文档B4和B’4优选地是XML文档以及大纲B2和B’2是用衍生于XML大纲语言的新语言所写。XML是协会W3C所推荐的(2000年10月6日发布的可扩展标记语言1.0版),以及XML大纲是同一W3C协会2000年10月24日发布的推荐项目。该XML推荐和XML大纲推荐项目可在互联网网址http://www.w3.org/上得到。不过,这并不是受限制的以及在说明书的剩余分面详细描述的发明原理可能通过使用不同类型的语言来使用,例如,由AT&T和丹麦的Aarhus大学的BRICS建议并在互联网网址http://www.brics.dk/DSD/上可得到的DSD类型语言(文档结构描述)。

从物理观点来看,一个XML文档特别地包括实体,它们可能被分析以及包括文本,即,属于预定特征集以及表示一个标记或文本数据的特征序列。

从逻辑的观点来看,一个XML文档包含一个或多个元素,由一个起始标志符和一个停止标志符标记其界限。元素可能是交织的。每一个元素由其起始标志符和停止标志符中所指出的名称来标识。一个元素可能具有一个值。元素值被置于其起始标志符和停止标志符之间。

在下面将要描述的例子中,选择数据以将其直接置于XML文档的元素中而简化了该实现(也就是说,XML文档所包含的数据组成了XML元素的值)。

XML大纲是允许规定内容和XML文档结构的大纲语言:更特别地,一个XML大纲允许描述元素以及每一个元素一个名称、一个数据类型、一个交错、出现的频率和多个发生率。出现的次序以及发生率数目可能是预定或随机的。一个元素的发生率可能是强制的或可选择的。

一个大纲定义了XML文档的一个类。一个XML大纲的实例是参照该大纲有效的一个XML文档。

在下面的描述中以及为给出实现本发明的一个具体的例子,将考虑JPEG2000格式的位流。这不再是受限制的以及显然本发明可以应用于其他格式。对某些格式而言,将其他类型数据添加到这里描述的这些类型中可能是必须的。

在附件A中,给出了一个描述JPEG编码格式的大纲的例子。这个大纲使用了通用的以及附件B中定义的简单数据类型,以及来源于附件C定义的这些通用类型的简单数据类型。附件D给出了XML文档的一个例子,它是附件A给出的大纲的实例以及表示JPEG位流。在下面描述的附件A、B和C中,字母<<xsd>>标识在一个XML大纲中定义的工具。以及字母<<bsd>>标识了由本发明添加的工具。

依据本发明,大纲B2(在下面描述中认为与大纲B’2相同)定义了依据JPEG2000格式在一个流中可能包括的所有数据的类型。数据的某一类型已经存在于XML大纲语言中以及可以直接进行使用。其他将作修改。其他必须被添加。

依据JPEG2000格式的位流更特别地包括以下数据类型:

1)不确定长度的二进制段,其内容可能通过使用下面描述的第一或第二输入模式而在一个XML文档中输入,

2)不同长度的二进制字,可能包括不重要的填补位,

3)在JPEG2000标准的十六进制代码中定义值以及以XML文档的十六进制代码输入的标记。以十六进制代码的这个输入组成第三输入模式。

该第一输入模式包括将二进制数据转换为属于XML所用的预定字符集的字符。为这个目的,方便地使用了一个以名<<base 64>>所知以及在IETF发布的文档RFC2045的6.8段中描述的编码方法。这个方法包括划分二进制数据以及将其转换成6位组并且将每一个6位组关联预定字符集中的一个字符。这个第一输入模式引起数据扩充了33%。

在第二输入模式中,代替将该二进制数据转换成字符而将其直接插入到XML文档中,在XML文档中引入了指向包含该二进制数据的二进制文件区域的指针。然后该XML文档就变成依赖于该二进制文件。

在该XML大纲语言中,一个数据类型被定义为三元字节,其中包括:

-被称为值空间的值集,

-被称为词汇空间的词汇表示集,

-分面集,一个分面对应强加于该值空间的一个约束。

为实现本发明,位流中所写的数据编码将是明确和无疑的。先前存在于XML大纲中且明确和无疑的数据的某一类型被直接使用:即这种情形,例如,数据类型<<xsd:unsignedShort>>,表示-32768和+32767之间的整数以及因此可能用两个字节隐含地编码。<<xsd:unsignedInt>>和<<xsd:unsignedByte>>同样也是这种情形。

依据本发明同样使用了数据类型<<xsd:binary>>,但进行了修改:

1)另外添加了一个分面,与一个命名为<<bsd:stopFlagExclusive>>的停止标志相关。这个分面将被用于指出不确定长度的二进制段的末尾:例如,不确定长度的二进制段的JPEG2000分组由一个标记SOP(分组开始)或一个标记SOT(平铺的开始)或一个标记EOC(代码流的结束)来定义;因此对一个JPEG2000分组而言,这个分面将具有FF51(SOP),FF90(SOT)或FFD9(EOC)三个值中的一个。

2)将一个新值添加到<<encoding>>分面,该分面已经存在于XML大纲语言中,值<<hex>>用于十六进制代码而<<base 64>>用于在base 64转换后的输入。该新添加的值被称为<<externalData>>。它被用来指出数据是通过使用前面提到的第二输入方式在XML文档中输入的(在XML文档中引入指针,该指针指向包含所涉及数据的位流区域)。

这个修改后的数据类型命名为<<binaryNoLength>>以及在附件C中以以下方式进行定义:

<xsd:simpleType name=″binaryNoLength″>  <xsd:annotation>  <xsd:appinfo>  <!--Read data until a flag is found-->  <xsd:hasFacet name=″stopFlagExclusive″/>  <!--How binary data should be instantiated:-->  <!--base64,hex(same as for xsd:binary)-->  <!--externalData(URI pointing to an external entity data segment)-->  <xsd:hasFacet name=″encoding″/>    

这个修改后的数据类型是一个通用的类型,然后它被用于导出在一个XML位流中可能找到的其他特定数据类型。例如,正如附件B中所指出的,类型<<PacketDataTYpe>>对应JPEG2000分组,它来源于通用类型<<binaryNoLength>>。在这个例子中,可以看出这些分组中包括的数据通过使用第二输入方式(到包含该数据的位流区域的指针)在XML文档中输入。同样可以看出一个JPEG2000分组由一个具有以下三个值FF51,FFD9或FF90之一的标记来定义。

<xsd:simpleType name=″packetDataType″>

<xsd:restriction base=″bsd:binaryNoLength″>

<xsd:encoding value=″externalData″/>

<bsd:stopFlagExclusive value=″FF51|FFD9|FF90″/>

</xsd:restriction>

</xsd:simpleType>

当参照附件A时,发现其他元素具有来源于<<binaryNoLength>>的类型,例如,复杂COC类型元素中命名为<<Data>>的元素。这个元素<<Data>>具有一个值为<<base 64>>的<<encoding>>分面,这意味着通过使用一个base 64转换从XML文档的位流中输入相应数据。

<xsd:complexType name=″COCType″>  <xsd:sequence>  <xsd:element name=″Marker>>type=″jp2:markerType>>fixed=″ff53″/>  <xsd:element name=″Lcoc>>type=″xsd:unsignedShort″/>  <xsd:element name=″data″>  <xsd:simpleType>  <xsd:restriction base=″xsd:binary″>  <xsd:length value=″$Lcoc″/>  <xsd:encoding value=″base64″/>  </xsd:restriction>  </xsd:simpleType>  </xsd:element>  </xsd:sequence>  </xsd:complexType>

本发明还包括增加一个新数据类型,该数据类型将用于预定长度的二进制字。这个新数据类型命名为<<bsd:bitArray>>以及它包括三个分面:命名为<<bitLength>>涉及二进制字的长度的一个分面,命名为<<prePadding>>涉及置于有效位之前的填补位数目的一个分面,以及命名为<<postPadding>>涉及置于该有效位之后的填补位数目的一个分面。这个新数据类型在附件C中以以下方式进行定义:

  <xsd:simpleType name=″bitsArray″>  <xsd:annotation>  <xsd:appinfo>  <xsd:hasFacet name=″bitsLength″/>  <xsd:hasFacet name=″prePadding″/>  <xsd:hasFacet name=″postPadding″/>  </xsd:appinfo>  </xsd:annotation>  <xsd:restriction>   </xsd:simpleType>

正如附件B所指出的,然后这个通用数据类型的新数据类型用于导出JPEG2000流中可以找到的特定数据类型。例如,命名为<<11b>>的数据类型,它来源于通用数据类型<<bitsArray>>,对应于一个不包含填补位的11位二进制字:

<xsd:simpleType name=″11b″>

<xsd:restriction base=″bsd:bitsArray″>

<bsd:bitsLength value=″11″/>

</xsd:restriction>

</xsd:simpleType>

以及命名为<<5b3p>>的数据类型,同样来源于通用数据类型<<bitsArray>>,对应于一个包含后随3个填补位的2个重要位的5位二进制字。

<xsd:simpleType name=″5b3p″>

<xsd:restriction base=″bsd:bitsArray″>

<bsd:bitsLength value=″5″/>

<bsd:postPadding value=″3″/>

</xsd:restriction>

</xsd:simpleType>

参照附件A,发现使用了数据类型<<11b>>,例如,用于取名为<<mantissa>>的元素:

<xsd:element name=″mantissa>>type=″jp2:11b″/>

以及使用数据类型<<5b3p>>,例如,用于取名为<<exponent>>的元素。

<xsd:element name=″exponent>>type=″jp2:5b3p″/>

从结构观点看,本发明使用了已经存在于XML大纲中的以下工具:

-简单和复杂的数据类型<<xsd:simple Type>>和<<xsd:complexType>>,

-元素<<xsd:element>>,

-组模型<<xsd:group>>,

-连接符<<xsd:sequence>>,<<xsd:all>>以及,可能地,<<xsd:choice>>。

语法分析器B3读取位流B1和大纲B2来生成位流B1的一个树状表示B4。这个树状表示B4是大纲B2的一个实例。通过解释大纲中找到的连接符而递归生成。

更特别地,通过语法分析器以下列方式解释连接符<<xsd:sequence>>:当该语法分析器找到连接符<<xsd:sequence>>时,以与大纲中相同的次序读取位流中的元素。例如,附件A定义的类型<<CodestreamType>>的元素中所用的连接符<<xsd:sequence>>。

<xsd:complexType name=″CodestreamType″>

<xsd:sequence>

<xsd:element name=″MainHeader>>type=″jp2:MainHeader Type″/>

<xsd:element name=″Tile>>type=″jp2:TileType″/>

<xsd:element name=″EOC>>type=″jp2:EOCType″/>

</xsd:sequence>

</xsd:complexType>

依据这个定义,元素<<Codestream>>必须包括后随元素<<Tile>>,再后随元素<<Eoc>>,的一个元素<<MainHeader>>。

连接符<<xsd:all>>通过语法分析器以下面的方式解释:当该语法分析器找到连接符<<xsd:all>>时,它通过试图读取连接符<<xsd:all>>中的第一声明元素(declared element)开始,以及如果失败,则试图读取第二元素等等...。当找到所要搜索的元素时,它转到连接符<<xsd:all>>的下一个元素。当连接符<<xsd:all>>的所有元素已经遍历时,才转到下一个连接符。

当大纲为该元素或为它包括的子元素之一定义一个固定值,以及当这个值并不对应位流中找到的值时,该位流中找到的元素并不对应所搜索的元素。例如,当该语法分析器设法实现元素<<SIZ>>时,如果没有以JPEG2000标准中分配给标记<<SIZ>>的值<<FF51>>开始,则从位流中读取的元素并不是所搜索的元素。

例如,在附件A定义的类型<<MainHeader Type>>的元素中使用连接符<<xsd:all>>。

  <xsd:complexType name=″MainHeaderType″>  <xsd:sequence>  <xsd:element name=″SOC″type=″jp2:SOCType″/>  <xsd:element name=″SIZ″type=″jp2:SIZType″/>  <xsd:group>  <xsd:all>  <xsd:element name=″COD″type=″jp2:CODType″minOccurs=″0″/>  <xsd:element name=″QCD″type=″jp2:QCDType″minOccurs=″0″/>  <xsd:element name=″COC″type=″jp2:COCType″minOccurs=″0″/>  <xsd:element name=″QCC″type=″jp2:QCCType″minOccurs=″0″/>  <xsd:element name=″RGN″type=″jp2:RGNType″minOccurs=″0″/>  <xsd:element name=″POC″type=″jp2:POCType″minOccurs=″0″/>  <xsd:element name=″PPM″type=″jp2:PPMType″minOccurs=″0″/>  <xsd:element name=″TLM″type=″jp2:TLMType″minOccurs=″0″/>  <xsd:element name=″PLM″type=″jp2:PLMType″minOccurs=″0″/>  <xsd:element name=″CRG″type=″jp2:CRGType″minOccurs=″0″/>  <xsd:element name=″COM″type=″jp2:COMType″minOccurs=″0″/>  </xsd:all>  </xsd:group>  </xsd:sequence>  </xsd:complexType>

根据这个定义,一个元素<<MainHeader>>必须包含一个<<SOC>>元素,其后跟随一个<<SIZ>>元素,其后跟随一个可以包含一个或多个或零个以随机次序出现的以下元素的组:<<COD>>,<<QCD>>,<<COC>>,<<QCC>>,<<RGN>>,<<POC>>,<<PPM>>,<<TLM>>,<<PLM>>,<<CRG>>。

尽管在附件A中没有给出任何例子,但连接符<<xsd:choice>>也可以被使用。当该语法分析器发现一个连接符<<xsd:choice>>时,它开始设法在该位流中读取连接符<<xsd:choice>>中断言的第一个元素。当语法分析器找到所搜寻的元素时,其将转到大纲中的下一个连接符。当读取到的元素不是所搜寻的元素时,语法分析器转到该同一连接符<<xsd:choice>>中的后继元素。

而且,本发明在大纲中引入了变量的使用。变量的概念在XSLT语言(XML可扩展样式表语言转换)中被使用。XSLT是由W3C协会规定的一种语言,允许定义可应用于XML文档的转换。具体地讲,一个变量是一个链接到一个值的字符串。它可以出现在文档的一个特定位置并在其它任何地方使用。根据XSLT中定义的语法,由一个字符串标识的变量的值通过在该字符串前放置$符号(不同的用词,$ZZZ是由字符串ZZZ标识的变量的值)进行访问。一个变量的值在该变量的定义中指出。本发明允许使用Xpath语言(XML路径语言)中定义的语法在XML树中以路径的形式定义一个变量的值。Xpath同样也是W3C协会规定的语言。XSLT和Xpath规范可以在互联网站点http://www.w3.org获得。

变量的使用允许,例如通过一个参数来定义许多元素,而不是通过一个常值定义它。当一个参数的值在位流的前端给定,并告知该位流剩余部分的结构或内容时,该变量的值通过使用Xpath语法进行定义。

例如,在JPEG2000格式中包含在标记段SIZ中的组件的数目<<comp-siz>>由放置于标记段SIZ前端的一个参数<<Csiz>>定义。在附录A中,元素<<Csiz>>被定义为一个变量。其值由构造中树状表示内的路径进行定义:对此,表达式<<SIZ/Csiz>>指示<<Csiz>>是元素<<SIZ>>的一个子元素。然后,在复杂类型<<SIZ>>的定义中,此变量<<Csiz>>被调用来决定元素<<comp-siz>>的发生数目。

<xsl:vaxiable name=″Csiz″>

<xsl:value-ofselect=″SIZ/Csiz″/>

</xsl:variable>

<xsd:element name=″Comp_siz″minOccurs=″$Csiz″maxOccurs=″$Csiz″>

本发明也包含了附加的一个新组模型<<bsd:conditionalChoice>>和两个新连接符<<xsl:if>>、<<xsl:choose>>。这允许在大纲中引入条件分支以及因而表达可能存在于某人试图描述的格式中的条件选择。应当注意的是连接符<<xsl:if>>和<<xsl:choose>>是用XSLT语言定义的。根据XSLT语言的规范,连接符<<xsl:if>>和<<xsl:choose>>使用了一个属性<<test>>,该属性允许定义一个实验结果的一个选择函数。该连接符<<xsl:if>>允许定义一个选择作为一个布尔变量的值的函数。该连接符<<xsl:choose>>允许定义许多可选值中的一个选择。

通过例子,JPEG2000格式提供了特定元素的出现或一个数据的类型依赖于位流前端给定的一个参数的值。

特别的是包含于元素<<COD>>中的元素<<SPcod>>的情况。当变量<<PredinctsUsed>>的值为1时,元素<<SPcod>>单独包含了一个<<PredinctSize>>元素。这一约束在使用了连接符<<xsl:if>>的大纲中表达。

<xsd:element name=″SPcod″>  <xsd:complexType>  <xsd:sepuence>  <xsd:element name=″nDecompLevels″ type=″xsd:unsignedByte″/>  <xsd:element name=″codeBlockWidth″type=″jp2:4p4b″/>  <xsd:element name=″codeBlockHeigh″type=″jp2:4p4b″/>  <xsd:element name=″codeBlockStyle″>  <xsd:complexType>  <xsd:sequence>  <xsd:element name=″optSegMarkers″ type=″jp2:2p1b″/>  <xsd:element name=″optErTerm″ type=″jp2:1b″/>  <xsd:element name=″optVertStrCausal″type=″jp2:1b″/>  <xsd:element name=″optRegTerm″type=″jp2:1b″/>  <xsd:element name=″oprResetMQ″type=″jp2:1b″/>  <xsd:element name=″optByPass″ type=″jp2:1b″/>  </xsd:sequence>  </xsd:complexType>  </xsd:element>  <xsd:element name=″Transformation″type=″xsd:unsignedByte″/>  <xsl:iftest=″SPrecinctsUsed=1″>  <xsd:element name=″PrecinctSize″ minOccurs=″0″>  <xsd:complexType>  <xsd:sequence>  <xsd:element name=″PPy″type=″jp2:4b″/>  <xsd:element name=″PPx″type=″jp2:4b″/>  </xsd:sequence>  </xsd:complexType>  </xsd:element>  </xsd:sequence>  </xsl:if>  </xsd:complexType>  </xsd:element>

在元素<<QCD>>中找到一个<<bsd:conditionalChoice>>组的例子,该组使用连接符<<xsl:choose>>指出一个要跟随(Spqcd_1>>,Spqcd_2或Spqcd_3)的元素的类型依赖于一个参数<<quantStyle>>的值,其位于当前处理的树状表示中的位置由路径<<QCD/Spqcd/QuantStyle>>给定。

当语法分析器读取该位流时,其渐进地生成XML树。当其遇到大纲中的一个变量时,例如,一个连接符<<if>>的一个属性<<test>>,其通过应用指出的路径来评估该变量。

应该注意到XML语言允许定义其自身的扩展。本发明的第一实施方案因而包括附加本发明提出的新工具作为已有XML大纲语言的扩展。本发明的另一实施方案包括一个完整的重新定义的新语言,该语言取XML大纲的工具并加入了由本发明提出的新的工具。

图3说明了依据本发明的一个传输系统。图3所示的传输系统包含了一个服务器SV和许多客户机CT。服务器SV和客户机CT被链接到互联网WWW。服务器SV包含存储器装置MEM和处理装置PROC。该存储器装置特别地包括一个大纲B2,第一位流B1和一个计算机程序PG1用于实现一个根据本发明的语法分析方法,以获取表示该第一位流B1并是该大纲B2的一个实例的第一文档B4。该存储器装置MEM优选地也包括一个计算机程序PG2,用于实现从一个表示同样的文档B’4和该大纲B2生成一个第二位流B’1的方法。

通过举例,该文档B’4通过对该文档B4应用一个转换而获得,该转换依赖于先前请求转换一个位流的客户的简档。

  附件 A:大纲
<?xml version=″1.0″encoding=″UTF-8″?><!-- 位流的大纲遵从:      JPEG 2000 部分1最终草案国际标准      ISO/IEC JTC1/SC29 WG1,JPEG 2000--><xsd:schema    targetNamespace=″JP2″    xmlns:jp2=″JP2″    xmlns:xsd=″http://www.w3.org/2000/10/XMLSchema″    xmlns:bsd=″BSDLPrimitiveTypes″    xmlns:xsl=″http://www.w3.org/1999/xSL/Transform″    elementFormDefault=″qualified″>    <xsd:include schemaLocation=″JP2SimpleTypes.xsd″/><!--##################变量##################-->  <bsd:variables>    <xsl:variable name=″nDecompLevels″>       <xsl:value-of select=″COD/SPcod/nDecompLevels″/>    </xsl:variable>    <xsl:variable name=″Csiz″>       <xsl:value-of select=″SIz/Csiz″/>    </xsl:variable>    <xsl:variable name=″PrecinctsUsed″>       <xsl:value-of select=″COD/Scod/PrecinctsUsed″/>    </xsl:variable>    <xsl:variable name=″Lcoc″>       <xsl:value-of select=″COC/Lcoc″>    </xsl:variable>    <xsl:variable name=″Lqcc″>       <xsl:value-of select=″QCC/Lqcc″>    </xsl:variable>    <xsl:variable name=″Lrgn″>       <xsl:value-of select=″RGN/Lrgn″>    </xsl:variadle>    <xsl:variable nama=″Lpoc″>       <xsl:value-of select=″POC/Lpoc″>    </xsl:variable>    <xsl:variabl ename=″Lppm″>       <xsl:value-of select=″PPM/Lppm″>    </xsl:variable>    <xsl:variable name=″Ltlm″>       <xsl:value-of select=″TLM/Ltlm″>    </xsl:variable>    <xsl:variable name=″Lcrg″>       <xsl:value-of select=″CRG/Lcrg″>    </xsl:variable>    <xsl:variable name=″Lcom″>       <xsl:value-of select=″COM/Lcom″>    </xsl:variable>    <xsl:variable name=″Lqcd″>       <xsl:value-of select=″QCD/Lqcd″>    </xsl:variable>    <xsl:variable name=″Lppt″>       <xsl:value-of select=″PPT/Lppt″>    </xsl:variable>
  <xsl:variable name=″Lplt″>          <xsl:value-of select=″PLT/Lplt″>        </xsl:variable>    </bsd:variables>    <!--##################    码流元素声明    ##################-->    <xsd:element name=″Codestream″type=″jp2:CodestreamType″/>    <!--##################    码流复杂类型    ##################-->    <xsd:complexType name=″CodestreamType″>       <xsd:sequence>      <xsd:element name=″MainHeader″type=″jp2:MainHeaderType″/>      <xsd:element name=″Tile″=″jp2:TileType″/>      <xsd:element name=″EOC″type=″jp2:EOCType″/>     </xsd:sequence>    </xsd:complexType>    <!--##################    主头标复杂类型    ##################-->    <xsd:complexType name=″MainHeaderType″>    <xsd:sequence>     <xsd:element name=″SOC″type=″jp2:SOCType″/>      <xsd:element name=″SIZ″type=″jp2:SIZType″/>       <xsd:group>        <xsd:all>         <xsd:element name=″COD″type=″jp2:CODType″minOccurs=″0″/>         <xsd:element name=″QCD″type=″jp2:QCDType″minOccurs=″0″/>         <xsd:element name=″COC″type=″jp2:COCType″minOccurs=″0″/>         <xsd:element name=″QCC″type=″jp2:QCCType″minOccurs=″0″/>         <xsd:element name=″RGN″type=″jp2:RGNType″minOccurs=″0″/>         <xsd:element name=″POC″type=″jp2:POCType″minOccurs=″0″/>         <xad:element name=″PPM″type=″jp2:PPMType″minOccurs=″0″/>         <xsd:element name=″TLM″type=″jp2:TLMType″minOccurs=″0″/>         <xsd:element name=″PLM″type=″jp2:PLMType″minOccurs=″0″/>         <xsd:element name=″CRG″type=″jp2:CRGType″minOccurs=″0″/>        <xsd:element name=″COM″type=″jp2:COMType″minOccurs=″0″/>       </xsd:all>      </xsd:group>     </xsd:sequence>    </xsd:complexType>    <!--##################      平铺复杂类型      ##################-->    <xsd:complexType name=″TileType″>     <xsd:sequence>      <xsd:element name=″TileHeader″type=″jp2:TileHeaderType″/>      <xsd:element name=″Bitstream″ type=″jp2:BitstreamType″/>     </xsd:sequence>    </xsd:complexType>    <!--##################    平铺头标复杂类型    ##################-->    <xsd:complexType name=″TileHeaderType″>     <xsd:sequence>      <xsd:element name=″SOT″type=″jp2:SOTType″/>       <xsd:group>        <xsd:all>         <xsd:element name=″COD″type=″jp2:CODType″minOccurs=″0″/>         <xsd:element name=″COC″type=″jp2:COCType″minOccurs=″0″/>         <xsd:element name=″QCD″type=″jp2:QCDType″minOccurs=″0″/>         <xsd:element name=″QCC″type=″jp2:QCCType″minOccurs=″0″/>         <xsd:element name=″RGN″type=″jp2:RGNType″minOccurs=″0″/>         <xsd:element name=″POC″type=″jp2:POCType″minOccurs=″0″/>         <xsd:element name=″PPT″type=″jp2:PPTType″minOccurs=″0″/>         <xsd:element name=″PLT″type=″jp2:PLTType″minOccurs=″0″/>         <xsd:element name=″COM″type=″jp2:COMType″minOccurs=″0″/>        </xsd:all>       </xsd:group>      <xsd:element name=″SOD″type=″jp2:SODType″/>     </x=d:sequence>    </xsd:complexType>
    <!--##################    位流复杂类型    ##################-->    <xsd:complexTypename=″BitstreamType″>     <xsd:sequence>      <xsd:element name=″Packet″maxOccurs=″unbounded″>       <xsd:complextype>        <xsd:sequence>         <xsd:element name=″SOP″type=″jp2:SOPType″/>          <xsd:elemant name=″Data″>           <xsd:simpleType>            <xsd:union meberTypes=″jp2:packetDataType″/>           </xsd:simpleType>          </xsd:element>         </xsd:sequence>        </xsd:complexType>       </xsd:element>      </xsd:sequence>    </xsd:complexType>    <!--######################################################-->    <!--##                       标记段                     ##-->    <!--######################################################-->    <!--##################  SOC复杂类型     ##################-->    <xsd:complexType name=″SOCType″>      <xsd:sequence>       <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff4f″/>      </xsd:sequence>    </xsd:complexType>    <!--##################  SIZ复杂类型     ##################-->    <xsd:complexType name=″SIZType″>     <xsd:sequence>       <xsd:element name=″Marker″  type=″jp2:markerType″fixed=″ff51″/>       <xsd:element name=″Lsiz″    type=″xsd:unsignedShort″/>       <xsd:element name=″Rsiz″    type=″xsd:unsignedShort″/>       <xsd:element name=″Xsiz″    type=″xsd:unsignedInt″/>       <xsd:element name=″Ysiz″    type=″xsd:umsignedInt″/>       <xsd:element name=″XOsiz″   type=″xsd:umsignedInt″/>       <xsd:element name=″YOsiz″   type=″xsd:unsignedInt″/>       <xsd:element name=″XTsiz″   type=″xsd:umsignedInt″/>       <xsd:element name=″YTsiz″   type=″xsd:unsignedInt″/>       <xsd:element name=″XTOsiz″  type=″xsd:unsignedInt″/>       <xsd:element name=″YTOsiz″  type=″xsd:unsignedInt″/>       <xsd:element name=″Csiz″    type=″xsd:unsignedShort″/>       <xsd:element name=″Comp_siz″minOccurs=″$Csiz″maxOccurs=″$Csiz″>        <xsd:complexType>         <xsd:sequence>          <xsd:element name=″Ssiz″>           <xsd:complexType>            <xsd:sequence>             <xsd:element name=″sign″type=″jp2:1b″/>             <xsd:element name=″bitDepth″type=″jp2:7b″/>            </xsd:sequence>           </xsd:complexType>          </xsd:element>         <xsd:element name=″XRsiz″type=″xsd:unsignedByte″/>        <xsd:element name=″YRsiz″type=″xsd:unsignedByte″/>       </xsd:sequence>      </xsd:complexType>     </xsd:element>    </xsd:sequence>    </xsd:complexType>    <!--##################  COD复杂类型  ##################-->     <xsd:complexType name=″CODType″>      <xsd:sequence>       <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff52″/>
    <xsd:element name=″Lcod″type=″xsd:unsignedShort″/>    <xsd:element name=″Scod″>      <xsd:complexType>        <xsd:sequence>          <xsd:element name=″EPHMarkersUsed″type=″jp2:5p1b″/>          <xsd:element name=″SOPMarkersUsed″type=″jp2:1b″/>          <xsd:element name=″PrecinctsUsed″ type=″jp2:1b″/>        </xsd:sequence>      </xsd:complexType>    </xsd:element>    <xsd:element name=″SGcod″>      <xsd:complexType>        <xsd:sequence>         <xsd:element name=″progType″  type=″xsd:unsignedByte″/>         <xsd:element name=″numLayers″ type=″xsd:unsignedShort″/>         <xsd:element name=″mct″       type=″xsd:unsignedByte″/>      </xsd:sequence>     </xsd:complexType>    </xsd:element>    <xsd:element name=″SPcod″>      <xsd:complexType>        <xsd:sequence>          <xsd:element name=″nDecompLevels″   type=″xsd:unsignedByte″/>          <xsd:element name=″codeBlockWidth″  type=″jp2:4p4b″/>          <xsd:element name=″codeBlockHeight″ type=″jp2:4p4b″/>          <xsd:element name=″codeBlockSty1e″>            <xsd:complexType>              <xsd:sequence>                <xsd:element name=″optSegMarkers″   type=″jp2:2p1b″/>                <xsd:element name=″optErTerm″       type=″jp2:1b″/>                <xsd:element name=″optVertStrCausal″type=″jp2:1b″/>                <xsd:element name=″optRegTerm″      type=″jp2 : 1b″/>                <xsd:element name=″optResetMQ″      type=″jp2:1b″/>                <xsd:element name=″optByPass″       type=″jp2:1b″/>             </xsd:sequence>          </xsd:complexType>       </xsd:element>       <xsd:element name=″Transformation″  type=″xsd:unsignedByte″/>       <xsl:if test=″$PrecinctsUsed=1″>         <xsd:element name=″PrecinctSize″minOccurs=″0″>           <xsd:complexType>             <xsd:sequence>                <xsd:element name=″PPy″type=″jp2:4b″/>                <xsd:element name=″PPx″type=″jp2:4b″/>             </xsd:sequence>            </xsd:complexType>           </xsd:element>          </xsd:sequence>         </xsl:if>        </xsd:complexType>       </xsd:element>    </xsd:sequence> </xsd:complexType> <!--##################     QCD复杂类型     ##################--> <xsd:complexType name=″QCDType″>   <xsd:sequence>     <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff5c″/>     <xsd:element name=″Lqcd″type=″xsd:unsignedShort″/>     <xsd:element name=″Sqcd″>       <xsd:complexType>         <xsd:sequence>          <xsd:element name=″guardBits″type=″jp2:3b″/>          <xsd:element name=″quantStyle″type=″jp2:5b″/>       </xsd:sequence>    </xsd:complexType>
</xsd:element><bsd:conditionalChoice>   <xsl:choose>      <xsl:when test=″QCD/Sqcd/quantStyle=′0>         <xsd:element name=″Spqcd_1″minOccurs=″3″$nDecompLevels+1″                                        maxOccurs=″3* $nDecompLevels+1″>            <xsd:complexType>               <xsd:sequence>                  <xsd:element name=″exponent″type=″jp2:5b3p″/>               </xsd:sequence>            </xsd:complexType>         </xsd:element>      </xsl:when>      <xsl:when test=″QCD/Sqcd/quantStyle=′1>         <xsd:element name=″Spqcd_2″minOccurs=″1″maxOccurs=″1″>            <xsd:complexType>               <xsd:sequance>                  <xsd:element name=″exponent″type=″jp2:5b″/>                  <xsd:element name=″mantissa″type=″jp2:11b″/>               </xsd:sequence>            </xsd:complexType>         </xsd:element>      </xsl:when>          <xsl:when test=″QCD/Sqcd/quantStyle=′2>             <xsd:element name=″Spqcd_3″minOccurs=″3*$nDecompLevels+1″                                            maxOccurs=″3*$nDecompLevels+1″>                <xsd:complexType>                   <xsd:sequence>                      <xsd:element name=″exponent″type=″jp2:5b″/>                      <xsd:element name=″mantissa″type=″jp2:11b″/>                   </xsd:sequence>                </xsd:complexType>              </xsd:element>            </xsl:when>          </xsl:choose>        </bsd:conditionalChoice>      </xsd:sequence>  </xsd:complexType>  <!--##################     SOT复杂类型    ##################-->  <xsd:complexType name=″SOTType″>      <xsd:sequence>         <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff90″/>         <xsd:element name=″Lsot″  type=″xsd:unsignedShort″fixed=″10″/>         <xsd:element name=″Isot″  type=″xsd:unsignedShort″/>         <xsd:element name=″Psot″  type=″xsd:unsignedInt″/>         <xsd:element name=″TPsot″ type=″xsd:unsignedByte″/>         <xsd:element name=″TNsot″ type=″xsd:unsignedByte″/>      </xsd:sequence>  </xsd:complexType>  <!--##################       SOD复杂类型      ##################-->  <xsd:complexType name=″SODType″>     <xsd:sequence>         <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff93″/>     </xsd:sequence>  </xsd:complexType>  <!--##################       SOP复杂类型      ##################-->  <xsd:complexTypename=″SOPType″>    <xsd:sequence>       <xsd:element name=″Marker″  type=″jp2:markerType″fixed=″ff91″/>       <xsd:element name=″Lsop″    type=″xsd:unsignedShort″fixed=″4″/>       <xsd:element name=″Nsop″    type=″xsd:unsignedShort″/>    </xsd:sequence>
  </xsd:complexType>  <!-- ##################   EOC复杂类型    ##################-->  <xsd:complextyPE name=″EOCType″>      <xsd:sequence>        <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ffd9″/>     </xsd:sequence>  </xsd:complexType>  <!-- ######################################################-->  <!-- ##                未实现的标记段                    ##-->  <!-- ######################################################-->  <!-- 对于下面的标记,并不逐一地读取,因为它们在该应用中并不需要。        作为替代,使用在该标记之后给出的各个参数长度信息,        将该标记段内容作为整体读取-->  <!-- ##################      COC复杂类型      ##################-->  <xsd:complexType name=″COCType″>     <xsd:sequence>        <xsd:element name=″Marker″  type=″jp2:markerType″fixed=″ff53″/>        <xsd:element name=″Lcoc″    type=″xsd:unsignedShort″/>        <xsd:element name=″data″>           <xsd:simpleType>              <xsd:restriction base=″xsd:binary″>                 <xsd:length value=″$Lcoc″/>                 <xsd:encoding value=″base64″/>              </xsd:restriction>           </xsd:simpleType>        </xsd:element>     </xsd:sequence>  </xsd:complexType>  <!--##################    QCC复杂类型    ##################-->  <xsd:complexType name=″QCCType″>     <xsd:sequence>        <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff5d″/>        <xsd:element name=″Lqcc″  type=″xad:unsignedshort″/>        <xsd:element name=″data″>           <xsd:simplaType>              <xsd:restriction base=″xsd:binary″>                 <xsd:length value=″$Lqcc″/>                 <xsd:encoding value=″base64″/>              </xsd:restriction>           </xsd:simpleType>        </xsd:element>     </xsd:sequence>  </xsd:complexType>  <!--##################    RGN复杂类型    ##################-->  <xsd:complexType name=″RGNType″>     <xsd:sequence>        <xsd:element name=″Marker″  type=″jp2:markerType″fixed=″ff5e″/>        <xsd:element name=″Lrgn″    type=″xsd:unsignedShort″/>        <xsd:element name=″data″>           <xsd:simpleType>              <xsd:restriction base=″xsd:binary″>                 <xsd:length value=″$Lrgn″/>                 <xsd:encoding value=″base54″/>              </xsd:restriction>           </xsd:simpleType>        </xsd:element>     </xsd:sequence>  </xsd:complexType  <!--##################       POC复杂类型      ##################-->
<xsd:complexType name=″POCType″>  <xsd:sequence>    <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff5f″/>    <xsd:element name=″Lpoc″  type=″xsd:unsignedShort″/>    <xsd:element name=″data″>      <xsd:simpleType>        <xsd:restriction base=″xsd:binary″>          <xsd:length value=″$Lpoc″/>            <xsd:encoding value=″base64″/>            </xsd:restriction>          </xsd:simpleType>        </xsd:element>      </xsd:sequence>    </xsd:complexType>    <!--##################  PPM复杂类型  ##################  -->    <xsd:complexType name=″PPMType″>      <xsd:sequence>        <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff60″/>        <xsd:element name=″Lppm″  type=″xsd:unsignedShort″/>        <xsd:element name=″data″>          <xsd:simpleType>            <xsd:restriction base=″xsd:binary″>              <xsd:length value=″$Lppm″/>              <xsd:encoding value=″base64″/>            </xsd:restriction>          </xsd:simpleType>        </xsd:element>      </xsd:sequence>    </xsd:complexType>    <!--##################  TLM复杂类型    ##################  -->    <xsd:complexType name=″TLMType″>      <xsd:sequence>        <xsd:element name=″Marker″type=″jp2:markerType″  fixed″ff55″/>        <xsd:element name=″Ltlm″  type=″xsd:unuignedShort″/>        <xsd:element name=″data″>          <xsd:simpleType>            <xsd:restriction base=″xsd:binary″>              <xsd:lengthvalue=″$Ltlm″/>              <xsd:encoding value=″base64″/>            </xsd:restriction>          </xsd:simpleType>        </xsd:element>      </xsd:sequence>    </xsd:complexType>    <!--##################  PLM复杂类型  ##################  -->    <xsd:complexType name=″PLMType″>      <xsd:sequence>        <xsd:element name=″Marker″type″jp2:markerType″fixed=″ff57″/>        <xsd:element name=″Lplm″  type″xsd:unsignedShort″/>        <xsd:element name=″data″>          <xsd:simpleType>            <xsd:restriction base=″xsd:binary″>              <xsd:length value=″$Lplm″/>              <xsd:encoding value=″base64″/>            </xsd:restriction>          </xsd:simpleType>        </xsd:element>      </xsd:sequence>    </xsd:complexType>    <!--##################    CRG复杂类型    ##################  -->    <xsd:complexType name=″CRGType″>
   <xsd:sequence>     <xsd:element name=″Markr″type=″jp2:maxkertype″fixed=″ff63″/>     <xsd:element name=″Lcrg″ type=″xsd:unsigneShort″/>     <xsd:element name=″data″>       <xsd:simpleType>         <xsd:restriction base=″xsd:binary″>           <xsd:length value=″$Lcrg″/>           <xsd:encoding value=″base64″/>         </xsd:restriction>       </xsd:simpleType>     </xsd:element>   </xsd:sequence> </xsd:complexType> <!--##################  COM复杂类型  ##################--> <xsd:complexType name=″COMType″>   <xsd:sequence>   <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff64″/>   <xsd:element name=″Lcom″  type=″xsd:unsignedShort″/>     <xsd:element name=″data″>       <xsd:simpleType>         <xsd:restriction base=″xsd:binary″>           <xsd:length value=″$Lcom″/>           <xsd:encoding value=″base64″/>         </xsd: restriction>       </xsd:simpleType>     </xsd:element>   </xsd:sequence> </xsd:complexType> <!--##################  PPT复杂类型  ##################--> <xsd:complexType name=″PPTType″>   <xsd:sequence>     <xsd:element name=″Marker″type=″jp2:markerType″fixedi=″ff61″/>     <xsd:element name=″Lppt″  type=″xsd:unsignedSbort″/>     <xsd:element name=″data″>       <xsd:simpleType>         <xsd:restriction base=″xsd:binary″>           <xsd:length value=″$Lppt″/>           <xsd:encoding value=″base64″/>         </xsd:restriction>       </xsd:simpleType>     </xsd:element>   </xsd:sequence> </xsd:complexType> <!--##################  PLT复杂类型    ##################  --> <xsd:complex Type name=″PLTType″>  <xsd:sequence>   <xsd:element name=″Marker″type=″jp2:markerType″fixed=″ff58″/>   <xsd:element name=″Lplt″  type=″xsd:unsignedShort″/>   <xsd:element name=″data″>     <xsd:simpleType>       <xsd:restriction base=″xsd:binary″>         <xsd:length value=″$Lplt″/>            <xsd:encoding value=″base64″/>            </xsd:restriction>          </xsd:simpleType>        </xsd:element>      </xsd:sequence>    </xsd:complexType></xsd:schema>
附件B:大纲中使用的简单类型
<?xml version=″1.0″encoding=″UTF-8″?><xsd:schema    targetNamespace=″JP2″    xmlns:jp2=″JP2″    xmlns:xsd=″http://www.w3.orq/2000/10/XMLSchema″    xmlns:bsd=″BSDLPrimitiveTypes″    elementFotmDefault=″qualified″>  <xsd:import namespace=″″schemaLocation=″BSDLPrimitiveTypes.xsd″/>  <!--##################    简单类型定义    ##################      -->  <!--##################      标记类型      ##################      -->  <xsd:simpleType nama=″markerType″>     <xsd:restriction base=″xsd:binary″>        <xsd:encoding value=″hex″/>        <xsd:length value=″2″/>      </xsd:restriction>    </xsd:simpleType>    <!-- ##################     位流类型      ##################      -->    <!--    这个类型用于位流分组   -->    <!--    它们被以下之一划界:          -一个新的SOP标记(FF51)          -一个新的SOT标记(FF90)          -该EOC标记      (FFD9)    -->    <xsd:simpleType name=″packetDataType″>       <xsd:restriction base=″bsd:binaryNoLength″>          <xsd:encoding value=″externalData″/>          <bsd:stopFlagExclusivevalue=″FF51 | FFD9 |FF90″/>       </xsd:restriction>    </xsd:simpleType>    <xsd:simpleType name=″11b″>       <xsd:restriction base=″bsd:bitsArray″>          <bsd:bitsLength value=″11″/>       </xsd:restriction>    </xsd:simpleType>    <xsd:simpleType name=″7b″>       <xsd: restriction base=″bsd:bitsArray″>          <bsd:bitsLengthvalue=″7″/>       </xsd:restriction>    </xsd:simpleType>       <xsd:simpleType name=″5b″>          <xsd:restriction base=″bsd:bitsArray″>              <bsd:bitsLength value=″5″/>          </xsd:restriction>       </xsd:simpleType>       <xsd:simpleType name=″4b″>          <xsd:restriction base=″bsd:bitsArray″>             <bsd:bitsLength value=″4″/>          </xsd:restriction>       </xsd:simpleType>       <xsd:simpleType name=″3b″>         <xsd:restriction base=″bad:bitsArray″>            <bsd:bitsLength value=″3″/>         </xsd:restriction>       </xsd:simpleType>
    <xsd:simpleType name=″1b″>       <xsd:restriction base=″bsd:bitsArray″>          <bsd:bitsLength value=″1″/>       </xsd:restriction>    </xsd:simpleType>       <xsd:simpleType name=″2p1b″>          <xsd:restriction base=″bsd:bitsArray″>          <bsd:bitsLength value=″1″/>       <bsd:prePadding value=″2″/>    </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=″5p1b″>    <xsd:restriction base=″bsd:bitsArray″>       <bsd:bitsLength value=″1″/>       <bsd:pxePadding value=″5″/>    </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=″5b3p″>    <xsd:restriction base=″bsd:bitsArray″>      <bsd:bitsLength value=″5″/>      <bsd:postPaddingvalue=″3″/>    </xsd:restriction> </xsd:simpleType> <xsd:simpleTypename=″4p4b″>    <xsd:restriction base=″bsd:bitsArray″>      <bsd:bitsLength value=″4″/>      <bsd:prePadding value=″4″/>    </xsd:restriction>  </xsd:simpleType></xsd:schema>
附件C:大纲中使用的通用类型
<?xml version=″1.0″encoding=″UTF-8″?><xsd:schema  targetNamespace=″BSDLPrimitiveTypes″  xmlns:bsd=″BSDLPrimitiveTypes″  xmlns:xsd=″http://www.w3.org/2000/10/XMLSchema″  elementFormDefault=″qualified″>  <!--##################    位数组     ##################-->  <xsd:simpleType name=″bitsArray″>     <xsd:annotation>        <xsd:appinfo>           <xsd:hasFacet name=″bitsLength″/>           <xsd:hasFacet name=″prePadding″/>           <xsd:hasFacet name=″postPadding″/>        </xsd:appinfo>     </xsd:annotation>     <xsd:restriction base=″xsd:anySimpleType″/>  </xsd:simpleType>  <!--##################   无长度二进制  ##################       -->  <xsd:simpleType name=″binaryNoLength″>     <xsd:annotation>        <xsd:appinfo>           <!--              读取数据直到找到一个标志             -->           <xsd:hasFacet name=″stopFlagExclusive″/>           <!--             应如何示例二进制数据:                -->           <!-- base64,hex(对于xsd:vinary相同)                  -->           <!-- 外部数据(URI指向一个外部实体数据段)               -->           <xsd:hasFacet name=″encoding″/>        </xsd:appinfo>     </xsd:annotation>     <xsd:restriction base=″xsd:anySimpleType″/>  </xsd:simpleType></xsd:schema>
  附件D:大纲的实例文档
<?xml version=″1.0″?><!--    一个JP2位流的XML表示的示例    --><Codestream    xmlns=″JP2″    xmlns:xsi=″http://www.w3.org/2000/10/XMLSchema-instance″    xsi:schemaLocation=″JP2 JP2.xsd″>    <MainHeader>       <SOC>         <Marker>FF4F</Marker>       </SOC>       <SIZ>         <Marker>ff51</Marker>         <Lsiz>47</Lsiz>         <Rsiz>0</Rsiz>         <Xsiz>515</Xsiz>         <Ysiz>512</Ysiz>         <XOsiz>0</XOsiz>         <YOsiz>0</YOsiz>         <XTsiz>515</XTsiz>         <YTsiz>512</YTsiz>         <XTOsiz>0</XTOsiz>         <YTOsiz>0</YTOsiz>         <Csiz>3</Csiz>         <Comp_siz>           <Ssiz>             <sign>0</sign>             <bitDepth>7</bitDepth>           </Ssiz>           <XRsiz>1</XRsiz>           <YRsiz>1</YRsiz>         </Comp_siz>         <Comp_siz>           <Ssiz>             <sign>0</sign>             <bitDepth>7</bitDepth>          </Ssiz>          <XRsiz>1</XRsiz>          <YRsiz>1</YRsiz>        </Comp_siz>        <Comp_siz>          <Ssiz>             <sign>0</sign>             <bitDepth>7</bitDepth>        </Ssiz>        <XRsiz>1</XRsiz>        <YRsiz>1</YRsiz>        </Comp_siz>      </SIZ>      <COD>        <Marker>ff52</Marker>        <Lcod>12</Lcod>        <Scod>          <EPRMarkersUsed>0</EPHMarkersUsed>          <SOPMarkersUsed>1</SOPMarkersUsed>          <PrecinctsUsed>0</PrecinctsUsed>        </Scod>        <SGcod>          <progType>4</progType>          <numLayers>1</numLayers>          <mct>1</mct>
    </SGcod>    <SPcod>       <nDecompLevels>5</nDecompLevels>       <codeBlockWidth>4</codeBlockWidth>       <codeBlockHeight>4</codeBlockHeight>       <codeBlockStyle>           <optSegMarkers>0</optSegMarkers>           <optErTerm>0</optErTerm>           <optVertStrCausal>0</optVertStrCausal>           <optRegTerm>0</optRegTerm>           <optResetMQ>0</optResetMQ>           <optByPass>0</optByPass>       </codeBlockStyle>       <Transformation>0</Trans formation>    </SPcod>  </COD>  <QCD>    <Marker>ff5c</Marker>    <Lqcd>35</Lqcd>    <Sqcd>      <guardBits>2</guardBits>      <quantStyle>2</quantStyle>    </Sqcd>    <Spqcd_3>      <exponent>13</exponent>      <mantissa>1816</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>13</exponent>      <mantissa>1770</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>13</exponent>      <mantissa>1770</mantissa>    </Spqcd_3>    <Spqc_3>      <exponent>13</exponent>      <mantissa>1724</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>12</exponent>      <mantissa>1792</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>12</exponent>      <mantissa>1792</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>12</exponent>      <mantissa>1762</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>11</exponent>      <mantissa>1868</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>11</exponent>      <mantissa>1868</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>11</exponent>      <mantissa>1892</mantissa>    </Spqcd_3>    <Spqcd_3>      <exponent>9</exponent>      <mantissa>3</mantissa>    </Spcd_3>    <Spqcd_3>      <exponent>9</exponent>
       <mantissa>3</mantissa>    </Spqcd_3>    <Spqcd_3>       <exponent>9</exponent>       <mantissa>69</mantissa>    </Spqcd_3>    <Spqcd_3>       <exponent>9</exponent>       <mantissa>2002</mantissa>    </Spqcd_3>    <Spqcd_3>       <exponent>9</exponent>       <mantissa>2002</mantissa>    </Spqcd_3>    <Spqcd_3>       <exponent>9</exponent>       <mantissa>1889</mantissa>    </Spqcd_3>    </QCD>  </MainHeader>  <Tile>      <TileHeader>         <SOT>           <Marker>ff90</Marker>           <Lsot>10</Lsot>           <Isot>0</Isot>           <Psot>32722</Psot>           <TPsot>0</TPsot>           <TNsot>1</TNsot>    </SOT>    <SOD>           <Marker>FF93</Marker>        </SOD>    </TileHeader>    <Bitstream>        <Packet>         <SOP>           <Marker>ff91</Marker>           <Lsop>4</Lsop>           <Nsop>0</Nsop>         </SOP>         <Data>bachComp3.jp2#122-363</Data>       </Packet>       <Packet>         <SOP>           <Marker>ff91</Marker>           <Lsop>4</Lsop>           <Nsop>1</Nsop>         </SOP>         <Data>bachComp3.jp2#370-861</Data>      </Packet>      <Packet>        <SOP>           <Marker>ff91</Marker>           <Lsop>4</Lsop>           <nsop>2</Nsop>        </SOP>        <Data>bachComp3.jp2#868-2362</Data>      </Packet>      <Packet>        <SOP>          <Marker>ff91</Marker>          <Lsop>4</Lsop>          <Nsop>3</Nsop>        </SOP>        <Data>bachComp3.jp2#2369-6788</Data>      </Packet>      <Paeket>        <SOP>
          <Marker>ff91</Marker>          <Lsop>4</Lsop>          <Nsop>4</Nsop>       </SOP>       <Data>bachComp3.jp2#6795-17999</Data>    </Packet>    <Packet>       <SOP>         <Marker>ff91</Marker>         <Lsop>4</Lsop>         <Nsop>5</Nsop>       </SOP>       <Data>bachComp3.jp2#18006-26441</Data>    </Packet>    <Packet>       <SOP>         <Marker>ff91</Marker>         <Lsop>4</Lsop>         <Nsop>6</Nsop>       </SOP>       <Data>bachComp3.jp2#26448-26577</Data>    </Packet>    <Packet>       <SOP>         <Marker>ff91</Marker>         <Lsop>4</Lsop>         <Nsop>7</Nsop>       </SOP>       <Data>bachComp3.jp2#26584-26875</Data>    </Packet>    <Packet>       <SOP>         <Marker>ff91</Marker>         <Lsop>4</Lsop>         <Nsop>8</Nsop>    </SOP>       <Data>bachComp3.jp2#26882-27675</Data>    </Packet>    <Packet>      <SOP>        <Marker>ff91</Marker>        <Lsop>4</Lsop>        <Nsop>9</Nsop>      </SOP>      <Data>bachComp3.jp2#27682-29664</Data>    </Packet>    <Packet>      <SOP>        <Marker>ff91</Marker>        <Lsop>4</Lsop>        <Nsop>10</Nsop>      </SOP>      <Data>bachComp3.jp2#29671-31086</Data>    </Packet>    <Packet>      <SOP>        <Marker>ff91</Marker>        <Lsop>4</Lsop>        <Nsop>11</Nsop>      </SOP>      <Data>bachComp3.jp2#31093-31389</Data>    </Packet>    <Packet>       <SOP>        <Marker>ff91</Marker>        <Lsop>4</Lsop>        <Nsop>12</Nsop>    </SOP>    <Data>bachComp3.jp2#31396-31498</Data>
    </Packet>    <Packet>       <SOP>          <Marker>ff91</Marker>          <Lsop>4</Lsop>          <Nsop>13</Nsop>       </SOP>       <Data>bachComp3.jp2#31505-31688</Data>    </Packet>    <Packet>       <SOP>          <Marker>ff91</Marker>          <Lsop>4</Lsop>          <Nsop>14</Nsop>       </SOP>       <Data>bachComp3.jp2#31695-31956</Data>    </Packet>    <Packet>       <SOP>          <Marker>ff91</Marker>          <Lsop>4</Lsop>          <Nsop>15</Nsop>       </SOP>       <Data>bachComp3.jp2#31963-32497</Data>    </Packet>    <Packet>       <SOP>          <Marker>ff91</Marker>          <Lsop>4</Lsop>          <Nsop>16</Nsop>       </SOP>       <Data>bachComp3.jp2#32504-32816</Data>    </Packet>    <Packet>       <SOP>         <Marker>ff91</Marker>         <Lsop>4</Lsop>         <Nsop>17</Nsop>       </SOP>       <Data>bachComp3.jp2#32823-32823</Data>    </Packet>  </Bitstream></Tile> <EOC>  <Marker>FFD9</Marker> </EOC></Codestream>

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号