下面是些范例,以说明目标路径包含的内容:
- /svg:svg匹配根svg元素,其名字包括前缀“svg”
- /lodges/donkey[8]匹配登记元素的第八个元素,没有命名空间
- / 匹配根节点,表示文档。
- /foo/text() 匹配所有的文本节点,它们是foo元素的子元素。
- /xhtml:html/xhtml:body/svg:svg[3]/@width匹配第三个svg元素的宽度属性,它是根元素的子元素,然后成为HTML元素。
- id("dahut")匹配元素的ID “dahut”
- id("dahut")/svg:circle/@cx匹配循环元素的cx属性,它是具有ID“dahut”元素的子元素。
可以使用语法产生目标路径不匹配任何东西(实例/元素[2]),这一句法可能造成忽略事件。表B给出一个例子,说明REX消息有不同的目标(表 B - example2.xml)。
表 B - example2.xml
<rexxmlns='http://www.w3.org/2006/rex'
xmlns:svg='http://www.w3.org/2000/svg'>
<event target='id("shiny-donkey")' name='DOMNodeRemoved'/>
<event target='/svg:svg/svg:g[5]/svg:a[2]' name='activate'/>
<event target='/svg:svg/svg:g[7]' name='DOMNodeInserted' position='9'>
<svg:rect x='9' y='42' width='432' height='217' fill='red'/>
</event>
<event target='id("dahut")' name='DOMNodeRemoved'>
<svg:circlecx='19' cy='17' r='42' fill='orange'/>
</event>
</rex>
推荐使用流方式处理REX消息。因此,用户代理不需要构建消息树。这是因为单个REX消息在一段时间内可能捕获很长的单个事件列表,否则导致内存开销过大。
为了接收REX消息,用户代理不需要支持DOM界面。例如,SMIL或 XML事件规范在文件树DOM表述缺失的情况下,处理接收到的REX消息。
为了保证REX的可扩展性,有必要定义严格的扩展模型,允许将来的版本引入新的信息构造,并且仍能被旧的用户代理所理解。只有用户代理支持REX规范的最小版本设置成对应的“version”属性后,REX消息才能被解析。
所有的突变事件都在http://www.w3.org/2001/xml-events命名空间。只有下面的事件被REX规范支持:DOMNodeInserted, DOMNodeRemoved, DOMAttrModified和DOMCharacterDataModified。在REX处理中,突变事件是特殊事件,它导致DOM树的修改。当一个用户代理处理REX消息接收的事件时,除了指派事件,还必须根据事件的类型修改树(在事件之前之后均可,依赖于事件的类型)。
DOMNodeInserted事件指示向DOM树种插入一个节点。可选的“position”属性指定位置,此位置的有效载荷必须插入到目标元素的子节点。例如,假设调用parent.childNodes.item(position),将返回第一个节点的有效值。如果位置没有指定,或者其值超过范围,则节点被插入到子节点列表后面。
放眼未来
REX规范现在仍旧是个草样,但是它会成为未来主要的标准XML更新机制标准。以前也有类似的情况,例如XML:DB initiative的XUpdate语言。并且REX将在REX的技术设计上很有影响力。2000年以来,它成为了该领域的主题。
W3C提到的XML事件的另一个开端是2003年出现的XML Events recommendation,它提供了XML语言,此语言采用文档对象模型(DOM)Level 2事件界面统一地整合了事件的收听者和相关事件处理者。这一结果提供相关措施和文档水平标记的交互操作途径。
责任编辑:张琎
查看原文国际来源
|