第九章:XML文档集成(二)---XML结构
本文仅供AX从业者和爱好者交流之用,由于原文版权问题,请勿转载。
XML结构
AX的XML文档功能的首要目标是减少实现新的XML文档时所用的时间。由于大多数与AX集成的系统需要映射列而不关注架构(译注:原文为Schema,这个词有的翻译为模式,有的翻译为图解,可谓莫衷一是,SQL Server2005中翻译为架构,这里沿袭这一翻译方法,XML Schema就是描述一个XML文件的内容结构的,明白这个意思就OK啦,实在不行就直接用Schema,没必要为了这个词浪费太多时间,有很多东西本来就是可意会不好言传的),产品小组决定以API的形式实现内部架构(Schema)。这样,每一个集成的终结点只需要一个映射,大多数AX的开发者对内部架构(Schema)已经很熟悉了。
很明显,应该用AOT中的Queries来表示。AOT Query的数据源直接跟表关联,这些表包含的字段在XML中被转化为属性。由于在AOT中定义了EDT,XSD(XML Schema Definition)可以使用可用的描述数据类型的元数据进行限定,比如字段大小等。
在文档中属性以固定的顺序出现是XML社区广泛采纳的方式,Query的结构支持这种方式,表按照在Query中的顺序出现,XML文档框架自动将字段以字母顺序进行排序,这样文档不需要手动开发。注意如果一个表在Query中被多个结点引用,XML架构(Schema)要求名称必须唯一,表的字段在XML中引用时采用表的字段名,表的名称采用该表在Query中对应的名称。
限制是,每个查询只能由一个根表,XML文档的唯一实体键可以跟这个根表关联,在构造查询的时候,为了支持1:n的关系需要使用outer join,如果限定必须使用1:1关系,则需要使用inner join(译注:感觉这个地方有些混乱,在SQL中,outer join和inner join 根本就不是用来限定1:n和1:1关系的,而是用来区分,当子表中没有主表相应记录时是否显示主表记录,outer join显示,inner join不显示,这跟1:n和1:1根本不搭边,暂时搞不清楚这里的意思,等弄白了再说吧)。
图9-3显示了AOT中在Axd<Document>类中被引用的查询与XML结构的映射。
图9-3:AOT查询和XML文档结构的相互关系
XML结构
AX的XML文档功能的首要目标是减少实现新的XML文档时所用的时间。由于大多数与AX集成的系统需要映射列而不关注架构(译注:原文为Schema,这个词有的翻译为模式,有的翻译为图解,可谓莫衷一是,SQL Server2005中翻译为架构,这里沿袭这一翻译方法,XML Schema就是描述一个XML文件的内容结构的,明白这个意思就OK啦,实在不行就直接用Schema,没必要为了这个词浪费太多时间,有很多东西本来就是可意会不好言传的),产品小组决定以API的形式实现内部架构(Schema)。这样,每一个集成的终结点只需要一个映射,大多数AX的开发者对内部架构(Schema)已经很熟悉了。
很明显,应该用AOT中的Queries来表示。AOT Query的数据源直接跟表关联,这些表包含的字段在XML中被转化为属性。由于在AOT中定义了EDT,XSD(XML Schema Definition)可以使用可用的描述数据类型的元数据进行限定,比如字段大小等。
在文档中属性以固定的顺序出现是XML社区广泛采纳的方式,Query的结构支持这种方式,表按照在Query中的顺序出现,XML文档框架自动将字段以字母顺序进行排序,这样文档不需要手动开发。注意如果一个表在Query中被多个结点引用,XML架构(Schema)要求名称必须唯一,表的字段在XML中引用时采用表的字段名,表的名称采用该表在Query中对应的名称。
限制是,每个查询只能由一个根表,XML文档的唯一实体键可以跟这个根表关联,在构造查询的时候,为了支持1:n的关系需要使用outer join,如果限定必须使用1:1关系,则需要使用inner join(译注:感觉这个地方有些混乱,在SQL中,outer join和inner join 根本就不是用来限定1:n和1:1关系的,而是用来区分,当子表中没有主表相应记录时是否显示主表记录,outer join显示,inner join不显示,这跟1:n和1:1根本不搭边,暂时搞不清楚这里的意思,等弄白了再说吧)。
图9-3显示了AOT中在Axd<Document>类中被引用的查询与XML结构的映射。
图9-3:AOT查询和XML文档结构的相互关系