Extensible 3D (X3D) encodings
Part 2: Classic VRML encoding

4 Concepts

概念

--- X3D separator bar ---

cube 4.1 介绍和内容表

4.1.1 介绍

此条款描述了 ISO/IEC 19776 此部分的关键概念。其中包括如何对 ISO/IEC 19775-1 中定义的 X3D 结构进行编码。

4.1.2 内容表

此条款的内容表参见 表 4.1

表 4.1 — 本条款的主题

4.1 介绍和内容表 Introduction and table of contents  
   4.1.1 介绍 Introduction  
   4.1.2 内容表 Table of contents  
   4.1.3 惯例 Conventions used  

4.2 概述 Overview  
   4.2.1 X3D 文件结构 The structure of a X3D file 

4.3 Classic VRML 编码文件语法 Classic VRML encoding file syntax  
   4.3.1 Classic VRML 编码 Classic VRML encoding
   4.3.2 语句 Statements  
      4.3.2.1 语句的组织 Organization of statements   
      4.3.2.2 Header 语句语法 Header statement syntax   
      4.3.2.3 PROFILE 语句语法 PROFILE statement syntax   
      4.3.2.4 COMPONENT 语句语法 COMPONENT statement syntax   
      4.3.2.5 META 语句语法 META statement syntax   
      4.3.2.6 节点语句语法 Node statement syntax    
      4.3.2.7 域语句语法 Field statement syntax     
      4.3.2.8 PROTO 语句语法 PROTO statement syntax   
      4.3.2.9 IS 语句语法 IS statement syntax   
      4.3.2.10 EXTERNPROTO 语句语法 EXTERNPROTO statement syntax   
      4.3.2.11 USE 语句语法 USE statement syntax   
      4.3.2.12 ROUTE 语句语法 ROUTE statement syntax   

4.4  Classic VRML 编码的 X3D 文件和万维网 Classic VRML-encoded X3D files and the World Wide Web  
   4.4.1 文件扩展名和 MIME 类型 File extension and MIME type    
   4.4.2 脚本语言协议 Scripting language protocols   

4.1.3 惯例

在 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) 中的参考。

cube 4.2 概述

X3D 文件(X3D file)结构采用 ISO/IEC 19775-1 的 7.2.3, Abstract X3D structure(参见 2.[I19775-1])中的定义。ISO/IEC 19776 的这部分指定了满足 ISO/IEC 19775-1 规格需要的语法。

cube 4.3 Classic VRML 编码文件语法

4.3.1 Classic VRML 编码

本条款描述了 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、节点的名称:

4.3.2 语句

4.3.2.1 语句的组织

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 文件可以包含以下内容的任意组合:

  1. 任意数量的 PROTO 语句或 EXTERNPROTO 语句,规格定义见 ISO/IEC 19775-1 中的 4.4.3, Prototype semantics 和 4.4.4, External prototype semantics(参见 2.[I19775-1]);
  2. 任意数量的根节点语句,规格定义见 ISO/IEC 19775-1 中的 4.3.2, Root nodes(参见 2.[I19775-1]);
  3. 任意数量的 USE 语句,规格定义见 ISO/IEC 19775-1 中的 4.4.3, DEF/USE semantics(参见 2.[I19775-1]);
  4. 任意数量的  ROUTE 语句,规格定义见 ISO/IEC 19775-1 中的 4.4.7.2, Routes(参见 2.[I19775-1])。

4.3.2.2 Header 语句语法

每一个 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])。

4.3.2.3 PROFILE 语句语法

PROFILE 语句由 PROFILE 字和紧跟的任一的标准化概貌的名称组成:

    PROFILE <profileName>
    (PROFILE <概貌名称>)

概貌在 ISO/IEC 19775-1 的 4.6, Profiles (参见 2.[I19775-1])中讨论。

详细的 PROFILE 语句的文法规则参见 A.2, General

4.3.2.4 COMPONENT 语句语法

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

4.3.2.5 META 语句语法

META 语句由 META 字和紧跟的元数据(metadata)识别字符串和包含元数据值的字符串组成:

    META <key> <value>
    (META <关键字> <值>)

META 语句的三部分应由空白符分割。<key> 和 <value> 是被引号引用的字符串,其中可以包含任意的 UTF-8 字符。

详细的 META 语句的文法规则参见 A.2, General

4.3.2.6 节点语句语法

节点语句的构成,首先是一个可选的节点名称,接着是节点的类型,然后是节点的主体。通过使用关键字 DEF 和紧跟的节点的名称可以给节点命名。节点的主体用配对的大括号(“{ }”)括起来。 在 DEF、节点名称、节点类型之间应使用空白符进行分割,但用来包裹节点主体的大括号前后都不必须要分割。详细的节点文法规则参见 A.3, Nodes

    [DEF <name>] <nodeType> { <body> }
    [DEF <名称>] <节点类型> { <主体> }

节点主体由任意数量的域语句、IS 语句、ROUTE 语句、PROTO 语句、EXTERNPROTO 语句以任意次序构成。

4.3.2.7 域语句语法

域语句由域的名称和紧跟的域的值构成。以下是单值域的语法:

    <fieldName> <fieldValue>
    <域名> <域值>

以下是多值域的语法:

    <fieldName> [ <fieldValues> ]
    <域名> [ <域值> ]

详细的域语句文法规则参见 A.4, Fields

每种节点类型都定义了节点名和这种节点可以包含的域的类型。不同节点类型可以使用同样的域名。域类型的规格位于 ISO/IEC 19775-1 的 5, Field and event reference(参见 2.I19775-1])。

4.3.2.8 PROTO 语句语法

PROTO 语句由 PROTO 关键字、紧跟的原型名称、原型界面声明、原型定义构成:

    PROTO <name> [ <declaration> ] { <definition> }
    PROTO <名称> [ <声明> ] { <定义> }

详细的原型语句文法规则参见 A.2, General

原型界面声明由方括号包括的域声明(参见 4.3.4, Field statement syntax)构成。括号前后都不一定需要空格。

域声明由关键字 “field” 和其后的域类型、名称、给定域类型的初始域值构成。

    field <fieldType> <name> <initial field value>

    field <域类型> <名称> <初始域值>

4.3.2.9 IS 语句语法

原型内部的节点语句的主体中可以包含 IS 语句。IS 语句由节点公共界面的域名和 exposedField 或 eventIn 或 eventOut,IS 关键字,其后的原型界面声明中的域名和 exposedField 或 eventIn 或 eventOut 组成:

    <field/eventName> IS <field/eventName>
    <域/事件名> IS <域/事件名>

详细的原型节点的主体文法规则参见 A.3, Nodes

4.3.2.10 EXTERNPROTO 语句语法

EXTERNPROTO 语句由 EXTERNPROTO 关键字和紧跟的原型名称、原型的界面声明、用方括号括起的由双引号包裹起来的字符串列表(也可能为空)组成。如果列表中只有一项,方括号则为可选。

    EXTERNPROTO <name> [ <external declaration> ] URL or [ URLs ]
    (EXTERNPROTO <名称> [ <外部声明> ] URL or [ URLs ])

详细的外部原型语句文法规则参见 A.2, General

4.3.2.11 USE 语句语法

USE 语句由 USE 关键字和紧跟的节点名称组成:

    USE <name>
    USE <名称>)

详细的 USE 语句文法规则参见 A.2, General

4.3.2.12 ROUTE 语句语法

ROUTE 语句由 ROUTE  关键字和紧跟的节点名、句号符、域名、TO 关键字、节点名、句号符、域名组成。句号符前后可以使用空白符隔开,但不一定必须使用:

    ROUTE <name>.<field/eventName> TO <name>.<field/eventName>
    ROUTE <名称>.<域/事件名> TO <名称>.<域/事件名>)

详细的 ROUTE 语句文法规则参见 A.2, General

cube 4.4 Classic VRML 编码的 X3D 文件和万维网

4.4.1 文件扩展名和 MIME 类型

UTF-8 编码的 X3D 文件扩展名为 .wrl (表示场景)。

4.4.2 脚本语言协议

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 源代码。

--- X3D separator bar ---