2012-11-26 3 views
3

Мы в процессе обновления приложения, которое в настоящее время используется для импорта контента из сторонней системы в Tridion. Текущей CMS является Tridion 2009, а новым экземпляром будет Tridion 2011 SP1 HR1.Проблема с комплексом Tridion 'Complex Schema' с 'xlink:' и атрибутом 'ref'

Задача, с которой мы столкнулись, состоит в том, что мы не можем получить комплексную схему для проверки. Я включил рабочий пример (работающий в 2009 году), и это подтверждается в SDL Tridion 2009. Однако, когда я пытаюсь создать эту же схему через CME в Tridion 2011, я получаю сообщение об ошибке, когда я выбираю «Validate», указывающий что

значение атрибута «ссылка» является «XLink: HREF» Недействительного = является недопустимого значения для атрибута «ссылки».

Я потратил некоторое время на чтение (это сложная схема с руками и руками со значительным содержанием, уже прижатым к ней!) И поверьте? что мы не можем просто вставлять имя и тип (или определять этот «глобальный» параметр локально как-то - и если бы мы могли - не было бы это «не очень хорошо» «практика». Я считаю, что это может быть устранено путем обновления . XML-(от xml problem with <attribute ref="...">), но это то, что мы не можем изменить

Любые комментарии/указатели бы прекрасно Благодаря

<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> 

UPDATE: чтобы иметь возможность продолжить, мы сделали изменение схемы 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"/> 

Это на самом деле происходит от cm_lnk.xsd от версии 2011 года. Реф должен фактически быть ссылкой на атрибут xlink: href, так что это может быть все еще некорректно - кто-нибудь знает о любых подводных камнях с этим изменением, которое мы можем проверить/наблюдать?

UPDATE (из CS) CS заявили, что они будут смотреть на это с R & D и, как представляется, согласились, что это была действительная схема в 2009 году, и теперь это не действует в 2011 году билет был закрыт, но это будет интересно следить за этим и посмотреть, будет ли это разрешено в 2013 году или принято как другой подход?

+1

Является ли схема для cm_lnk.xsd правильной? –

+0

Привет, Доминик, я пробовал без schemaLocation = "cm_lnk.xsd" в экземпляре Tridion 2009, и он все еще проверен - это сторона Tridion CME при проверке схемы. –

+0

В Tridion 2011 пространство имен xlink импортируется через импорт экземпляра. '' Если вы добавите это вместо импорта cm_lnk.xsd, это поможет? –

ответ

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"/> 

Итак, как Доминик уже упоминалось, я действительно запустил бы билет CS для этого, чтобы его можно было посмотреть. Ваш подход к обходу совершенно верен, но всегда полезно сообщать о дефектах, позволяющих им фиксироваться в будущем выпуске.

+0

Большое спасибо Барту (и Доминику). Я расскажу о проблеме через Tridion Support, и мы сможем продолжить решение. –

+0

Проблема была сообщена CS, ответ ... Благодарим вас за отзыв - так как это была действующая схема в 2009 году, и теперь она недействительна в 2011 году, мы свяжемся с R & D по этому вопросу, чтобы узнать, нужно ли что-то еще нужно адресовать в 2011 или 2013. –