3

我们正在升级当前用于将内容从 3rd 方系统导入 Tridion 的应用程序。当前的 CMS 是 Tridion 2009,新实例是 Tridion 2011 SP1 HR1。

我们遇到的挑战是我们无法验证复杂的模式。我在下面包含了一个工作示例(即在 2009 年工作),这在 SDL Tridion 2009 中得到了验证。但是,当我尝试通过 Tridion 2011 中的 CME 创建相同的模式时,当我选择“验证”指示时出现错误那

'ref' 属性的值无效 = 'xlink:href' 是 'ref' 属性的无效值。

我花了一些时间阅读(这是一个流传下来的复杂模式,已经有相当多的内容被压在它上面!)你相信吗?我们不能只保留名称和类型(或以某种方式在本地定义这个“全局”参数 - 如果我们可以的话 - 这不是“不太好”的做法吗?我相信这可以通过更新 XML 来解决(来自<attribute ref="..."> 的 xml 问题)但这是我们无法修改的。

任何评论/指针都会很棒!谢谢

<xs:schema targetNamespace="http://www.ccc.com/tridion/pelements" elementFormDefault="qualified" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tcmapi="http://www.tridion.com/ContentManager/5.0/TCMAPI" xmlns="http://www.ccc.com/tridion/pelements" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="cm_lnk.xsd"/>
    <!--maps to DITA element: xref -->
    <xs:element name="link" type="reference"/>
  <xs:complexType name="reference">
    <xs:sequence>
      <xs:element name="title" minOccurs="1" maxOccurs="1" type="xs:string"/>
      <xs:choice>
        <xs:element name="internal">
          <xs:complexType>
            <xs:attribute ref="xlink:href" use="required"/>
            <xs:attribute ref="xlink:title" use="optional"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="external">
          <xs:complexType>
            <xs:attribute name="href" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:choice>
      <xs:element name="text" minOccurs="0" maxOccurs="1" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="type" type="referenceType" use="required"/>
  </xs:complexType>
  <!-- ******************** Enumerations ************************** -->
  <xs:simpleType name="referenceType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="normal"/>
      <xs:enumeration value="binary"/>
      <xs:enumeration value="embedded"/>
      <xs:enumeration value="reusable"/>
      <xs:enumeration value="component"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

更新: 为了能够继续,我们对 xsd 模式进行了更改:

<xs:attribute ref="xlink:href" use="required"/>
<xs:attribute ref="xlink:title" use="optional"/>

<xs:attribute name="href" type="xs:anyURI" use="required"/>
<xs:attribute name="title" type="xs:string" use="optional"/>

这实际上来自2011 版本的cm_lnk.xsd 。ref 实际上应该是对 xlink:href 属性的引用,所以这可能仍然是不正确的 - 任何人都知道我们可能测试/关注的此更改的任何陷阱吗?

更新(来自 CS) CS 已经表示他们将通过研发来调查这个问题,并且似乎已经同意它在 2009 年是一个有效的模式,现在它在 2011 年无效。票已经关闭,但跟进这件事会很有趣,看看如果这是在 2013 年解决还是被接受为不同的方法?

4

1 回答 1

2

使用

<xs:attribute name="href" type="xs:anyURI" use="required"/>
<xs:attribute name="title" type="xs:string" use="optional"/>

代替

<xs:attribute ref="xlink:href" use="required"/>
<xs:attribute ref="xlink:title" use="optional"/>

完全没问题,正如您打算参考的那样cm_lnk.xsd,它只是意味着如果cm_lnk.xsd会发生变化,您也应该相应地更改您的架构。但这只是理论上的,因为cm_lnk.xsd模式永远不会改变它的定义。

更有趣的是您提到这在 2009 版本中确实有效,这表明 2011 版本似乎无法处理您的导入

<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="cm_lnk.xsd"/>

所以正如 Dominic 已经提到的,我确实会为此提出一张 CS 票,以便对其进行查看。您的解决方法是完全有效的,但报告缺陷以便在将来的版本中修复它们总是好的。

于 2012-11-28T10:01:34.847 回答