使用内容类型指定 XML 文档属性
上次修改时间: 2009年10月5日
适用范围: SharePoint Foundation 2010
在 Microsoft SharePoint Foundation 2010 调用内置 XML 分析程序分析 XML 文件时,此分析程序将使用文档的内容类型来确定哪一个文档属性映射到哪一个内容类型列,以及这些属性在文档中的存储位置。因此,若要让 SharePoint Foundation 将内置 XML 分析程序与 XML 文件一起使用,则必须执行下列操作:
创建包含必要的分析信息的内容类型。对于要升级或降级的每个文档属性,应包括一个字段定义,此字段定义包括映射到它所表示的列的文档属性的名称,以及文档属性在文档中的存储位置。
确保内容类型 ID 是一个降级到文档中的文档属性。这将确保内置 XML 分析程序可以标识和访问文档的正确内容类型。有关详细信息,请参阅指定文档内容类型以进行 XML 分析。
用于 XML 分析的内容类型信息
文档属性在存储文档的文档库中的列上进行升级和降级。如果已为文档分配内容类型,则将在内容类型定义中指定这些列。在内容类型定义 XML 中,内容类型中包含的每个列由 FieldRef 元素表示。
备注
Field 元素表示为网站或列表定义的列。FieldRef 元素表示对内容类型中包含的列的引用。FieldRef 元素包含一些列属性,当列在此特定内容类型中出现时可以为列重写这些列属性(例如,列的显示名称)以及是在内容类型上隐藏列属性还是在内容类型上需要列属性。此信息还包括当列在内容类型中出现时映射到此列的文档属性的位置。这使您能够为映射到不同的内容类型中的列的文档属性指定不同的位置。
因此,若要指定内置 XML 分析程序在升级和降级文档属性时所需的信息,则必须编辑 FieldRef 元素,此元素表示内容类型定义中的文档属性的相应列。
下图演示分析程序在 XML 文件签入文档库中时所采用的操作。SharePoint Foundation 调用分析程序,该分析程序将查看内容类型 ID 列以确定其内容类型 ID 在文档中的存储位置。然后,分析程序在文档内的此位置上查找其内容类型。分析程序检查内容类型以确定哪些 FieldRef 元素包含文档属性信息。对于映射到文档属性的每个 FieldRef 元素,分析程序在匹配的 FieldRef 元素中指定的文档中查找此位置的文档属性。如果分析程序在指定位置找到文档属性,则它会将该值升级为匹配列。
当第一次将 XML 文档上载到文档库时,内置 XML 分析程序必须确定文档的内容类型以及此内容类型是否与文档库关联。有关详细信息,请参阅指定文档内容类型以进行 XML 分析。
可以在 Field 或 FieldRef 元素中编辑多个属性以将该元素映射到文档属性,并指定该属性在文档中的位置。
首先,Field 或 FieldRef 元素必须包含一个指定文档库中的列的 ID 的 ID 属性。例如:
<FieldRef
ID="{4B1BF6C6-4F39-45ac-ACD5-16FE7A214E5E}"
Name="EmployeeID”/>
紧接着,将其他属性添加到指定文档属性在文档中的位置的 Field 或 FieldRef 元素。文档属性可以存储在下列位置:
文档的 XML 内容
文档的处理指令
添加到 Field 或 FieldRef 元素的属性 (Attribute) 可指定属性 (Property) 位置,具体取决于属性 (Property) 是存储为 XML 内容还是处理指令。这些属性是互相排斥的;如果添加指定 XML 内容中的位置的属性,则不能同时添加指定处理指令中的位置的属性。
若要以编程方式编辑列的字段定义架构,请使用 SPField.SchemaXML 对象。
指定文档 XML 内容中的属性
如果将文档中的文档属性存储为 XML 内容,则指定一个表示文档内的属性位置的 XPath 表达式。将 Node 属性添加到 Field 或 FieldRef 元素,并将它设置为等于 XPath 表达式。例如:
<FieldRef
ID="{4B1BF6C6-4F39-45ac-ACD5-16FE7A214E5E}"
Name="EmployeeID"
node="/my:myFields/my:employee"/>
文档属性值集合
如果指定一个返回值的集合的 XPath 表达式,则也可以在 Field 或 FieldRef 元素中包含一个聚合属性。此聚合属性指定在返回的值集上执行的操作。此操作可以是一个聚合函数,也可以指定集合中的特定元素。
可能的值包括:
sum
count
average
min
max
merge
plaintext 将节点文本内容转换为纯文本。
first 对集合中的第一个元素应用属性升级和降级。
last 对集合中的最后一个元素应用属性升级和降级。
例如:
<FieldRef
ID="{4B1BF6C6-4F39-45ac-ACD5-16FE7A214E5E}"
Name="TotalToExpense”
node="/my:myFields/my:expense"
aggregation="sum"/>
指定文档处理指令中的属性
由于处理指令可以包含 XML 之外的数据,因此 XPath 表达式不足以标识处理指令中存储的文档属性。相反,必须将一对属性 (Attribute) 添加到 Field 或 FieldRef 元素,指定需处理指令和要用作文档属性 (Property) 的处理指令属性 (Attribute):
添加 PITarget 属性 (Attribute) 可指定文档中存储文档属性 (Property) 的处理指令。
添加 PIAttribute 属性 (Attribute) 可指定用作文档属性 (Property) 的属性 (Attribute)。
例如:
<FieldRef
ID="{4B1BF6C6-4F39-45ac-ACD5-16FE7A214E5E}"
Name="columnName"
PITarget="mydocumenttype"
PIAttribute="propertyAttribute"/>
这些属性指示分析程序检查文档属性值的以下处理指令和属性:
<?mydocumenttype propertyAttribute="value"?>
还可以添加另一对属性:PrimaryPITarget 和 PrimaryPIAttribute。此属性对是可选的。与 PITarget 和 PIAttribute 一样,将它们一起使用可标识文档属性的位置。但是,如果它们存在,则内置 XML 分析程序在它们第一次指定的位置查找文档属性。如果该位置上存在一个值,则分析程序将使用该值并忽略 PITarget 和 PIAttribute 属性。仅当 PrimaryPITarget 和 PrimaryPIAttribute 属性指定的位置返回一个空值时,分析程序才会在 PITarget 和 PIAttribute 属性对指定的位置查找文档属性。
如果指定 PrimaryPITarget 和 PrimaryPIAttribute 属性,则还必须指定 PITarget 和 PIAttribute 属性。仅当 PITarget 和 PIAttribute 属性对指定的处理指令属性在文档中不存在时(而不是在该属性存在但为空的情况下),分析程序才使用 PrimaryPITarget 和 PrimaryPIAttribute 属性。