Block元素是DataModel或Block的子元素。 Blocks用于将一个或多个数据元素(例如Number或String)组合到一个逻辑结构中。 Block和DataModel非常相似,唯一的区别是它们的位置。 DataModel是顶级元素,Blocks是DataModel的子元素。 Block和DataModel元素都可以用作其他Blocks或DataModel的“模板”。
<Block name="HelloWorld">
<String value="Hello world!" />
</Block>
除非另有说明,所有属性都是可选的。
最简单的block定义是一个空block。这种定义将不会产生输出。
<DataModel name="BlockExample1">
<Block>
</Block>
</DataModel>
Block可以根据需要嵌套。 Block有助于创建逻辑结构,并且不会更改其中包含的数据。
<DataModel name="BlockExample2">
<Block>
<Block>
<Block>
<String value="1" />
</Block>
<Block>
<String value="2" />
</Block>
<String value="3" />
</Block>
<String value="4" />
</Block>
</DataModel>
这种嵌入式定义下的Block将会产生如下输出:
1234
给Block一个友好的命名可使它们更容易理解和调试。
<DataModel name="BlockExample2">
<Block name="HeaderDef">
<String name="Header" />
<String name="Colon" value=":"/>
<String name="Val"/>
<Block>
<Block name="DataDef">
<Number name="Type" size="8" value="4"/>
<Number name="Data" size="8" value="32"/>
</Block>
</DataModel>
使用reference元素(ref属性)会把被引用的DataModel或者Block的内容复制过来以作为构建新Block的基础。新Block中的任何子元素将覆盖已存在的具有相同名称的元素。
<DataModel name="OtherDataModel">
<String value="Hello World"/>
</DataModel>
<DataModel name="ThisDataModel">
<Block name="MyName" ref="OtherDataModel"/>
</DataModel>
Block “MyName” 将被引用块“OtherDataModel”覆盖。 在解析它时,数据结构看起来像这样。
<DataModel name="ThisDataModel">
<Block name="MyName">
<String value="Hello World"/>
</Block>
</DataModel>
Reference允许构建功能强大的模板。 这是一个Key:Value \ r \ n的模板。
<DataModel name="Template">
<String name="Key" />
<String value=": " token="true" />
<String name="Value" />
<String value="\r\n" token="true" />
</DataModel>
引用此模板:
<DataModel name="OtherModel">
<String value="Before Block\r\n" />
<Block name="Customized" ref="Template">
<String name="Key" value="Content-Length" />
<String name="Value" value="55"/>
</Block>
</DataModel>
输出为:
Before Block\r\n
Content-Length: 55\r\n
这里发生了两件重要事情。 在分析时,”Customized Block”将用”Template”的DataModel替换它的结构。 添加“:”和“\ r \ n”的字符串值。
同时,“Customized”Block重写了Key和Value的String元素的值。 将它们替换为“Content-Length”和55.最终的DataModel将被解析为如此。
<DataModel name="OtherModel">
<String value="BeforeBlock" />
<Block name="Customized" ref="Template">
<String name="Key" value="Content-Length" />
<String value=": " token="true" />
<String name="Value" value="55" />
<String value="\r\n" token="true" />
</Block>
</DataModel>