создать xslt, чтобы объединить повторяющиеся свойства термина, а затем удалить - PullRequest
0 голосов
/ 15 апреля 2011

извинения, если на этот вопрос ответили в другом месте, я посмотрел на связанные вопросы, но не мог видеть, как они связаны с этим.

У меня есть файл, подобный этому:

<?xml version="1.0" encoding="utf-8"?>
<Zthes>
  <term>
    <termId>1</termId>
    <termUpdate>Add</termUpdate>
    <termName>Science, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERM9998</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>2</termId>
    <termUpdate>Add</termUpdate>
    <termName>Sciences, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERMO9999</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>OMITERMO9998</termId>
    <termUpdate>Add</termUpdate>
    <termName>Biological Sciences</termName>
    <termType>Pt</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
   </term>
  <term>
    <termId>OMITERMO9999</termId>
    <termUpdate>Add</termUpdate>
    <termName>Biological Sciences</termName>
    <termType>Pt</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
   </term>
</Zthes>

Можно ли написать xlst, который проходит и объединяет все очки?В результате в этом случае будут имена 2-го термина, использующие один и тот же термин Pt.Идентификатор, который они используют, не важен.Каждый Nd будет ссылаться на Pt, не каждый Pt будет иметь ND, ссылающиеся на него, и Pts может иметь несколько Nds, ссылающихся на них

Спасибо за любые указатели, которые я безнадежен в этих вещах!

Редактировать: theВывод будет:

<?xml version="1.0" encoding="utf-8"?>
<Zthes>
  <term>
    <termId>1</termId>
    <termUpdate>Add</termUpdate>
    <termName>Science, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERM9998</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>2</termId>
    <termUpdate>Add</termUpdate>
    <termName>Sciences, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERMO9998</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>OMITERMO9998</termId>
    <termUpdate>Add</termUpdate>
    <termName>Biological Sciences</termName>
    <termType>Pt</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
   </term>
      </Zthes>

, чтобы отношения, которые имели 2 Nd-термины с 2-мя терминами с одинаковым именем, но с разными идентификаторами, были объединены в 2 Nd-термины, имеющие связь только с одним Pt-термином.Пока отношения были объединены в первый PT, второй PT мог быть удален, чтобы не было дубликатов, но отношения все еще были бы неповрежденными?

1 Ответ

1 голос
/ 15 апреля 2011

Я написал следующую таблицу стилей:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

<xsl:key name="k1" match="term[termType = 'Pt']" use="termName"/>
<xsl:key name="k2" match="term[termType = 'Pt']" use="termId"/>

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="term[termType = 'Pt'][not(generate-id() = generate-id(key('k1', termName)[1]))]"/>

<xsl:template match="term[termType = 'Nd']/relation/termId">
  <xsl:copy>
    <xsl:value-of select="key('k1', key('k2', .)/termName)[1]/termId"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Применительно к

<?xml version="1.0" encoding="utf-8"?>
<Zthes>
  <term>
    <termId>1</termId>
    <termUpdate>Add</termUpdate>
    <termName>Science, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERM9998</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>2</termId>
    <termUpdate>Add</termUpdate>
    <termName>Sciences, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERMO9999</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>OMITERMO9998</termId>
    <termUpdate>Add</termUpdate>
    <termName>Biological Sciences</termName>
    <termType>Pt</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
   </term>
  <term>
    <termId>OMITERMO9999</termId>
    <termUpdate>Add</termUpdate>
    <termName>Biological Sciences</termName>
    <termType>Pt</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
   </term>
</Zthes>

вывод равен

<?xml version="1.0" encoding="utf-8"?><Zthes>
  <term>
    <termId>1</termId>
    <termUpdate>Add</termUpdate>
    <termName>Science, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId/>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>2</termId>
    <termUpdate>Add</termUpdate>
    <termName>Sciences, Biological</termName>
    <termType>Nd</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
    <relation>
      <relationType>USE</relationType>
      <termId>OMITERMO9998</termId>
      <termName>Biological Sciences</termName>
    </relation>
  </term>
  <term>
    <termId>OMITERMO9998</termId>
    <termUpdate>Add</termUpdate>
    <termName>Biological Sciences</termName>
    <termType>Pt</termType>
    <termStatus>Active</termStatus>
    <termApproval>Approved</termApproval>
    <termCreatedDate>20110414T07:23:26</termCreatedDate>
    <termCreatedBy>admin</termCreatedBy>
    <termModifiedDate>20110414T07:35:54</termModifiedDate>
    <termModifiedBy>admin</termModifiedBy>
      <termAttribute label="A-Z Entry"/>
   </term>

</Zthes>

, поэтому одна перекрестная ссылка не разрешена правильноно я думаю, что проблема не в XSLT, а в ваших данных, где у вас есть <termId>OMITERM9998</termId>, а затем <termId>OMITERMO9998</termId> с ведущим 0.Это помогает?Идентификаторы в реальных данных в лучшей форме?Или вам нужно кодировать, чтобы как-то обрезать ведущие нули для соответствия / перекрестной ссылки?

...