作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个很奇怪的问题。我有用 EAD 编码的 XML 文档,我正在将其转换为图书馆目录的 MARC 记录。 EAD 文档中有一段如下所示:
<controlaccess>
<list type="simple">
<item><subject encodinganalog="650" source="lcsh">Prisons -- History -- 19th century</subject></item>
<item><subject encodinganalog="650" source="lcsh">Prisons -- Statistics -- History -- 19th century</subject></item>
<item><subject encodinganalog="650" source="lcsh">Prisons -- Statistics -- Extra term 1 -- History -- 19th century</subject></item>
<item><subject encodinganalog="650" source="lcsh">Prisons -- Statistics -- Extra term 1 -- Extra term 2 -- History -- 19th century</subject></item>
</list>
</controlaccess>
<xsl:template name="subject_template">
<xsl:param name="string" />
<marc:datafield>
<xsl:choose>
<xsl:when test="contains($string, '--')!=0">
<xsl:variable name="tmp1" select="substring-before($string, '--')" />
<xsl:variable name="tmp2" select="substring-after($string, '--')" />
<marc:subfield code="a">
<xsl:value-of select="$tmp1" />
</marc:subfield>
<xsl:call-template name="subject_tokenize">
<xsl:with-param name="string" select="$tmp2" />
<xsl:with-param name="type" select="'x'" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<marc:subfield code="a">
<xsl:value-of select="$string" />
</marc:subfield>
</xsl:otherwise>
</xsl:choose>
</marc:datafield>
</xsl:template>
<xsl:template name="subject_tokenize">
<xsl:param name="string" />
<xsl:param name="type" />
<xsl:variable name="genx">
<xsl:call-template name="genx" />
</xsl:variable>
<xsl:variable name="geny">
<xsl:call-template name="geny" />
</xsl:variable>
<xsl:variable name="formlist">
<xsl:call-template name="formlist" />
</xsl:variable>
<xsl:variable name="geoglist">
<xsl:call-template name="geoglist" />
</xsl:variable>
<xsl:if test="contains($string, '--')!=0">
<xsl:variable name="str1" select="substring-before($string, '--')"/>
<xsl:variable name="str2" select="substring-after($string, '--')"/>
<xsl:if test="contains($str2, '--')!=0">
<xsl:variable name="newstr2" select="substring-after($str2, '--')"/>
<xsl:variable name="tmpvar" select="substring-before($str2, '--')"/>
<xsl:choose>
<xsl:when test="testsomething">
do stuff
</xsl:when>
<xsl:otherwise>
<xsl:if test="contains($geoglist, translate($str1, '.', ''))!=0">
<marc:subfield code="z">
<xsl:value-of select="$str1"/>
</marc:subfield>
<xsl:if
test="contains($formlist, translate(substring-before($str2, '--'), '.', ''))!=0">
<marc:subfield code="v">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($geny, translate(substring-before($str2, '--'), '.', ''))!=0">
<marc:subfield code="y">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($genx, translate(substring-before($str2, '--'), '.', ''))!=0">
<marc:subfield code="x">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($formlist, translate(substring-before($str2, '--'), '.', ''))=0 and contains($genx, translate(substring-before($str2, '--'), '.', ''))=0 and contains($geny, translate(substring-before($str2, '--'), '.', ''))=0">
<marc:subfield code="z">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
</xsl:if>
<xsl:if test="contains($formlist, translate($str1, '.', ''))!=0">
<marc:subfield code="v">
<xsl:value-of select="$str1"/>
</marc:subfield>
</xsl:if>
<xsl:if test="contains($geny, translate($str1, '.', ''))!=0">
<marc:subfield code="y">
<xsl:value-of select="$str1"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($formlist, translate($str1, '.', ''))=0 and contains($geny, translate($str1, '.', ''))!=0">
<marc:subfield code="x">
<xsl:value-of select="$str1"/>
</marc:subfield>
</xsl:if>
<xsl:if test="contains($geoglist, translate($str1, '.', ''))=0">
<xsl:if
test="contains($formlist, translate(substring-before($str2, '--'), '.', ''))!=0">
<marc:subfield code="v">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($geny, translate(substring-before($str2, '--'), '.', ''))!=0">
<marc:subfield code="y">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($geoglist, translate(substring-before($str2, '--'), '.', ''))!=0">
<marc:subfield code="z">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
<xsl:if
test="contains($geoglist, translate(substring-before($str2, '--'), '.', ''))=0 and contains($geny, translate(substring-before($str2, '--'), '.', ''))=0 and contains($formlist, translate(substring-before($str2, '--'), '.', ''))=0">
<marc:subfield code="x">
<xsl:value-of select="substring-before($str2, '--')"/>
</marc:subfield>
</xsl:if>
</xsl:if>
<xsl:call-template name="subject_tokenize">
<xsl:with-param name="string" select="$newstr2"/>
<xsl:with-param name="type" select="'x'"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
=650 \0$aPrisons $x History $x 19th century
=650 \0$aPrisons $x History $x 19th century
=650 \0$aPrisons $x Extra term 1 $x History $x 19th century
=650 \0$aPrisons $x Extra term 1 $x Extra term 2 $x History $x 19th century
最佳答案
我会改变这个:
<xsl:variable name="str1" select="substring-before($string, '--')"/>
<xsl:variable name="str2" select="substring-after($string, '--')"/>
对此:
<xsl:variable name="str1" select="substring-before($string, '--')"/>
<xsl:variable name="str2" select="substring-after($string, concat($str1,'--'))"/>
这将确保 str2 在您认为的“--”之后开始。
关于xml - 从 EAD 到 MARC 的 XSL 转换跳过了第二个主题词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939533/
来自那里的 XSD:http://www.loc.gov/ead/ead.xsd JAXB 命令:xjc ead.xsd -b ead.xjb ead.xjb :
我有一个很奇怪的问题。我有用 EAD 编码的 XML 文档,我正在将其转换为图书馆目录的 MARC 记录。 EAD 文档中有一段如下所示: Pris
我是一名优秀的程序员,十分优秀!