2. CHI XML 基础语法:XML 节点定义、属性与值、命名空间、常见 Schema 约束

CHI (Camera Hardware Interface) 架构的配置核心是 XML 文件。这些 XML 文件定义了从传感器输入到最终图像输出的完整管线链路。理解 CHI XML 的基础语法,是进行参数调优的前提。本章将系统讲解 XML 节点定义、属性与值、命名空间以及常见的 Schema 约束,帮助您建立扎实的配置基础。

2.1 XML 节点定义与层级结构

在 CHI XML 中,所有配置信息都以节点(Element)的形式组织。节点是 XML 文档的基本构建块,通过嵌套形成树状层级结构。每个节点代表一个具体的配置对象,例如一个传感器、一个管线或一个算法模块。

核心概念: CHI XML 的根节点通常是 <CHI>,其下包含 <Sensor>、<Pipeline>、<Node> 等子节点。每个子节点又可以包含更细粒度的配置项。
CHI XML 节点层级结构 <CHI> <Sensor> <Pipeline> <Node> <Name> <Resolution> <StreamConfig> <NodePort> <Property> 说明: CHI XML 采用严格的树形层级。根节点 <CHI> 下包含多个一级配置块, 每个配置块下再包含具体的属性节点。这种结构便于模块化管理和解析。

节点定义的基本语法如下:

<节点名 属性1="值1" 属性2="值2">
    <子节点名>文本内容</子节点名>
    <空节点名 属性="值"/>
</节点名>
最佳实践: 在编写 CHI XML 时,建议每个节点缩进 2 个空格,保持层级清晰。空节点(无子节点和文本内容)应使用自闭合格式 <NodeName/>,减少文件冗余。

2.2 属性与值的定义规则

属性(Attribute)为节点提供额外的配置信息。在 CHI XML 中,属性通常用于指定节点的关键参数,如 ID、类型、名称等。属性值必须用双引号或单引号包裹。

属性类型 示例 说明
字符串 Name="IMX586" 用于标识名称、描述等文本信息
整数 Width="1920" 用于分辨率、索引、计数等数值
浮点数 FPS="30.0" 用于帧率、增益、时间等小数参数
枚举 Format="NV12" 从预定义集合中选择的值
布尔 Enable="true" 用于开关控制,值为 true/false
十六进制 Address="0x4A" 用于寄存器地址、掩码等

以下是一个典型的 CHI XML 节点属性使用示例:

<Sensor Name="IMX586" Type="RAW" I2CAddress="0x1A">
    <Resolution Width="1920" Height="1080"/>
    <FrameRate Min="10.0" Max="30.0" Default="30.0"/>
    <StreamConfig Format="NV12" Enable="true"/>
</Sensor>
常见错误: 属性值中不能直接包含 < 或 > 字符。如果需要使用,请使用预定义实体引用:&lt; 表示 <,&gt; 表示 >。另外,属性名不能以数字开头,且不能包含空格。

2.3 命名空间(Namespace)

命名空间用于避免 XML 元素名称冲突。在 CHI 配置中,命名空间主要用于区分不同模块或供应商的自定义配置。CHI XML 通常使用默认命名空间和前缀命名空间两种方式。

CHI XML 命名空间解析 默认命名空间 xmlns="http://www.qualcomm.com/chi" 所有无前缀元素属于此命名空间 前缀命名空间 xmlns:vendor="http://vendor.com/camera" 使用 <vendor:Property> 引用 示例: <CHI xmlns="http://www.qualcomm.com/chi" xmlns:vendor="http://vendor.com/camera"> <vendor:CustomProperty Value="123"/> <!-- 使用前缀引用 -->

命名空间声明通常放在根节点中:

<CHI xmlns="http://www.qualcomm.com/chi"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.qualcomm.com/chi chi_schema.xsd">
    <!-- 配置内容 -->
</CHI>
关键点: 在 CHI 配置中,xmlns:xsi 是 W3C 标准命名空间,用于关联 Schema 约束。xsi:schemaLocation 属性告诉解析器到哪里寻找 Schema 文件进行验证。正确使用命名空间可以避免不同模块间的属性名冲突。

2.4 常见 Schema 约束

XML Schema(XSD)用于定义 XML 文档的结构、数据类型和约束规则。CHI 配置使用 Schema 来确保 XML 文件的合法性和一致性。常见的 Schema 约束包括:

约束类型 XSD 示例 作用
元素顺序 <xs:sequence> 规定子节点必须按指定顺序出现
出现次数 minOccurs="0" maxOccurs="unbounded" 控制节点最少/最多出现次数
数据类型 type="xs:integer" 限制属性或文本内容的数据类型
枚举值 <xs:enumeration value="NV12"/> 限定属性只能取特定值
正则表达式 pattern="[0-9]+" 通过正则模式匹配值格式
唯一约束 <xs:unique> 确保某个属性或值在指定范围内唯一

以下是一个简化的 CHI Schema 片段,展示了如何约束 <Sensor> 节点:

<xs:element name="Sensor">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Resolution" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:attribute name="Width" type="xs:integer" use="required"/>
                    <xs:attribute name="Height" type="xs:integer" use="required"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="FrameRate" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="Name" type="xs:string" use="required"/>
        <xs:attribute name="Type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="RAW"/>
                    <xs:enumeration value="YUV"/>
                    <xs:enumeration value="JPEG"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>
调优提示: 在修改 CHI XML 时,建议始终使用 Schema 验证工具(如 xmllint)检查文件合法性。常见的错误包括:必填属性缺失、枚举值拼写错误、节点顺序颠倒。这些错误会导致管线加载失败或运行时异常。

2.5 节点定义与 Schema 约束的对应关系

理解节点定义与 Schema 约束之间的对应关系,有助于快速定位配置问题。下表总结了常见节点定义与 Schema 约束的映射:

XML 节点定义 Schema 约束 验证规则
<Sensor Name="IMX586"/> attribute Name required Name 属性必须存在且为字符串
<Resolution Width="1920" Height="1080"/> element Resolution, attributes integer Width 和 Height 必须为正整数
<StreamConfig Format="NV12"/> enumeration NV12, YUYV, ... Format 值必须在枚举列表中
<NodePort Id="0" Direction="Input"/> attribute Id unique, Direction enum Id 在父节点内唯一,Direction 为 Input/Output
<Property Key="test" Value="123"/> pattern for Value Value 必须匹配正则表达式(如数字格式)
节点定义与 Schema 验证流程 XML 节点定义 Schema 约束文件 XML 验证引擎 验证通过 ✓ 验证失败 ✗ 验证流程: 1. 解析器读取 XML 节点定义和 Schema 约束文件。 2. 验证引擎逐节点检查属性、子节点、数据类型是否符合 Schema 规则。

2.6 常见语法错误与调试技巧

在编写 CHI XML 时,以下错误最为常见。掌握这些错误的排查方法,可以大幅提高配置效率。

  • 标签未闭合: 如 <Sensor>...</Sensor> 写成 <Sensor>...</Sensr>,导致解析失败。
  • 属性值未加引号: 如 Width=1920 必须写成 Width="1920"。
  • 特殊字符未转义: 属性值中包含 & 时,应使用 &amp;。
  • 节点顺序错误: Schema 要求 <Resolution> 必须在 <FrameRate> 之前,但实际顺序颠倒。
  • 枚举值拼写错误: 如将 NV12 写成 Nv12,大小写不匹配。
调试建议: 使用支持 XML 语法高亮和 Schema 验证的编辑器(如 VS Code + XML 插件)。在提交配置前,务必运行 xmllint --schema chi_schema.xsd config.xml 进行验证。如果验证失败,解析器通常会给出具体的行号和错误描述,这是定位问题的第一线索。