Extensible 3D (X3D) encodings
Part 2: Classic VRML encoding
4 Concepts
概念
此条款描述了 ISO/IEC 19776 此部分的关键概念。其中包括如何对 ISO/IEC 19775-1 中定义的 X3D 结构进行编码。
此条款的内容表参见 表 4.1。
在 ISO/IEC 19776 此部分使用以下惯例:
Italics(斜体) 被用于事件名或域名,也用于新引入的术语或引用的方程变量。
fixed-space
(等宽)字体用于 URL 网址和源代码范例。ISO/IEC 19776 Classic VRML
编码范例采用 bold,
fixed-space(等宽的加粗)
字体。
节点类型名首字母大写(例如,“Billboard 节点是一种背景节点...”)。然而在涉及到节点的语义而不是节点本身时,节点的概念通常使用小写(例如,“为了旋转 billboard...”)。
“0xhh” 形式十六进制数为比特位的形势来表示了一个字节。
在 ISO/IEC 19776 的此部分中,以 "x.[ABCD]" 符号来表示参考,此时“x” 表示参考了哪一条款或附件,“[ABCD]”是参考的标题的缩写。例如,2.[ABCD] 涉及 clause 2 (条款 2)中的参考,B.[ABCD] 涉及到 annex B (附件 B) 中的参考。
X3D 文件(X3D file)结构采用 ISO/IEC 19775-1 的 7.2.3, Abstract X3D structure(参见 2.[I19775-1])中的定义。ISO/IEC 19776 的这部分指定了满足 ISO/IEC 19775-1 规格需要的语法。
本条款描述了 Classic VRML 编码的可读的 X3D 文件的语法。形式文法描述位于 Annex A, Grammar definition。采用 Classic VRML 编码的 X3D 的语法在 ISO/IEC 19776 此部分中介绍。X3D 的语义采用 ISO/IEC 19775-1(参见 2.[I19775-1])中的定义。
对于 UTF-8 编码,字符 # 将开始一个注释。文件的第一行,即文件头,也以“#”字符开始。除了 SFString 域和 MFString 域中被双引号包括的被定义为字符串的一部分被“#”字符,其它“#”之后直到下一个行终止符之间的所有字符都将被忽略。
字符串域之外出现的逗号、空格、跳格符、换行符、回车符都是分割符。分隔符和注释统称为空白符(whitespace)。
X3D 文档服务器可以在传输前剥离包括 X3D 文件首行注释部分的注释或额外的分割符。ISO/IEC 19775-1(参见 2.[I19775-1])10.4.5, WorldInfo 中定义的 WorldInfo 节点可以用来保留版权或者作者之类的信息。
域、事件、PROTO、EXTERNPROTO 和节点的名称不应该包括控制符(0x0 至 0x1f、0x7f)、空格(0x20)、单引号和双引号(0x22:"、0x27:')、升半音符(0x23:#)、逗号(0x2c:,)、句号(0x2e:.)、括号(0x5b、0x5d:[])、反斜杠(0x5c:\)、大括号(0x7b、0x7d:{})。另外名称的首字符不能为数字(0x30 至 0x39)、加号(0x2b:+)、减号(0x2d:-)。除此之外,名称中可以包含使用 UTF-8 编码的任意的 ISO 10646 字符。X3D 是大小写敏感的;例如“Sphere”和“sphere”是不同的,“BEGIN”"和“begin”也是不同的。
以下是保留的关键词,不能用作域、事件、PROTO、EXTERNPROTO、节点的名称:
X3D 文件中应包含:首先是必须的 4.3.2.2, Header statement 中定义的 Header 语句,然后是一个 4.3.2.3, PROFILE statement 中定义的 PROFILE 语句,随后是 4.3.2.4, COMPONENT statement 中定义的零个或多个 COMPONENT 语句,再随后是零个或多个 4.3.2.5 META statements 定义的 META 语句。
在前述段中的定义配置信息之后,X3D 文件可以包含以下内容的任意组合:
每一个 Classic VRML 编码的 X3D 文件应开始为:
#X3D V3.0 utf8 [optional comment]<line terminator>
(#X3D V3.0 utf8 [可选注释]<行终止符>)
文件头(header)是一个单行的 UTF-8 文本用以识别此文件为 X3D 文件并识别此文件的编码类型和概貌。文件头也可以包括额外的语义信息。“#X3D” 和 “V3.0” 之间、“V3.0” 和 <encoding type> 之间、<encoding type> 和 <profile> 之间应该用单个的空格隔开。<encoding type> 之后应该紧跟一个换行符(0x0a)或回车符(0x0d),或者紧跟一个或多个空格符(0x20)或跳格符(0x09),这些空格符或跳格符之后可以跟其它字符以作为注释,并最终以一个换行符或回车符来终止。
识别符 “utf8” 指采用 ISO/IEC 10646-1 (又称为 Unicode 参见 2.[I10646-1])中定义的 UTF-8 明文编码的方式,以在 ISO/IEC 19776 的此部分中显示国际字符。UTF-8 的用法详见 ISO/IEC 19775-1 的 15, Text component (参见 2.[I19775-1])。
PROFILE 语句由 PROFILE 字和紧跟的任一的标准化概貌的名称组成:
PROFILE <profileName>
(PROFILE <概貌名称>)
概貌在 ISO/IEC 19775-1 的 4.6, Profiles (参见
2.[I19775-1])中讨论。
详细的 PROFILE 语句的文法规则参见 A.2, General。
COMPONENT 语句由 COMPONENT 字和紧跟的组件支持指示组成:
COMPONENT <componentName>:<supportLevel>
(COMPONENT <组件名称>:<支持级别>)
支持级别(support level)是一个整数值用以指示其中可用的一个支持级别,可用的支持级别在 ISO/IEC 19775-1 中不同组件条款(参见
2.[I19775-1])或 ISO/IEC 19775
附加部分的新增条款中指定。组件在 ISO/IEC 19775-1 的 4.5, Components(参见
2.[I19775-1])中讨论。
详细的 COMPONENT 语句的文法规则参见 A.2, General。
META 语句由 META 字和紧跟的元数据(metadata)识别字符串和包含元数据值的字符串组成:
META <key> <value>
(META <关键字> <值>)
META 语句的三部分应由空白符分割。<key> 和 <value> 是被引号引用的字符串,其中可以包含任意的 UTF-8 字符。
详细的 META 语句的文法规则参见 A.2, General。
节点语句的构成,首先是一个可选的节点名称,接着是节点的类型,然后是节点的主体。通过使用关键字 DEF 和紧跟的节点的名称可以给节点命名。节点的主体用配对的大括号(“{ }”)括起来。 在 DEF、节点名称、节点类型之间应使用空白符进行分割,但用来包裹节点主体的大括号前后都不必须要分割。详细的节点文法规则参见 A.3, Nodes。
[DEF <name>] <nodeType> { <body> }
[DEF <名称>] <节点类型> { <主体> }
节点主体由任意数量的域语句、IS 语句、ROUTE 语句、PROTO 语句、EXTERNPROTO 语句以任意次序构成。
域语句由域的名称和紧跟的域的值构成。以下是单值域的语法:
<fieldName> <fieldValue>
<域名> <域值>
以下是多值域的语法:
<fieldName> [ <fieldValues> ]
<域名> [ <域值> ]
详细的域语句文法规则参见 A.4, Fields。
每种节点类型都定义了节点名和这种节点可以包含的域的类型。不同节点类型可以使用同样的域名。域类型的规格位于 ISO/IEC 19775-1 的 5, Field and event reference(参见 2.I19775-1])。
PROTO 语句由 PROTO 关键字、紧跟的原型名称、原型界面声明、原型定义构成:
PROTO <name> [ <declaration> ] { <definition> }
PROTO <名称> [ <声明> ] { <定义> }
详细的原型语句文法规则参见 A.2, General。
原型界面声明由方括号包括的域声明(参见 4.3.4, Field statement syntax)构成。括号前后都不一定需要空格。
域声明由关键字 “field” 和其后的域类型、名称、给定域类型的初始域值构成。
field <fieldType> <name> <initial field value>
field <域类型> <名称> <初始域值>
原型内部的节点语句的主体中可以包含 IS 语句。IS 语句由节点公共界面的域名和 exposedField 或 eventIn 或 eventOut,IS 关键字,其后的原型界面声明中的域名和 exposedField 或 eventIn 或 eventOut 组成:
<field/eventName> IS <field/eventName>
<域/事件名> IS <域/事件名>
详细的原型节点的主体文法规则参见 A.3, Nodes。
EXTERNPROTO 语句由 EXTERNPROTO 关键字和紧跟的原型名称、原型的界面声明、用方括号括起的由双引号包裹起来的字符串列表(也可能为空)组成。如果列表中只有一项,方括号则为可选。
EXTERNPROTO <name> [ <external declaration> ] URL or [ URLs ]
(EXTERNPROTO <名称> [ <外部声明> ] URL or [ URLs ])
详细的外部原型语句文法规则参见 A.2, General。
USE 语句由 USE 关键字和紧跟的节点名称组成:
USE <name>
(USE <名称>)
详细的 USE 语句文法规则参见 A.2, General。
ROUTE 语句由 ROUTE 关键字和紧跟的节点名、句号符、域名、TO 关键字、节点名、句号符、域名组成。句号符前后可以使用空白符隔开,但不一定必须使用:
ROUTE <name>.<field/eventName> TO <name>.<field/eventName>
(ROUTE <名称>.<域/事件名> TO <名称>.<域/事件名>)
详细的 ROUTE 语句文法规则参见 A.2, General。
UTF-8 编码的 X3D 文件扩展名为 .wrl (表示场景)。
Script 脚本节点的 url 域可以支持不同的脚本语言所使用的定制协议。例如以 ecmascript 为前缀的脚本 url 应包括 ECMAScript 元代码,此时可以在字符串中使用行终止符。每种语言协议 ISO/IEC 19777 中对应相应语言的部分(参见 2.[I19777])中有详细定义。以下例子说明在单个 url 域中混合使用定制协议和标准协议的用法(先后顺序决定优先权):
#X3D V3.0 utf8 Script { url [ "ecmascript: ...", # custom protocol ECMAScript< "http://bar.com/foo.js", # std protocol ECMAScript "http://bar.com/foo.class" ] # std protocol Java platform bytecode }
在以上例子中 "..." 表示内嵌的 ECMAScript 源代码。
编译 m17 保留版权 如需转载请联系 http://m17design.myetang.com/x3d