XSLT, чтобы преобразовать вывод Zotero xml в FMPXMLRESULT xml?
Мне нужно получить элементы из базы данных Zotero в FileMaker Pro. Самый очевидный способ сделать это - экспортировать из Zotero в xml, перевести этот xml в формат FMPXMLRESULT xml, а затем импортировать в FileMaker Pro.
Я новичок в переводе XML-форматов.
У кого-нибудь есть xslt, который сделает это, или предоставит мне некоторые предложения, специфичные для этих двух форматов xml (не только общие ссылки xslt / xml)?
Вывод Zotero xml находится в форме MODS Библиотеки Конгресса: http://www.loc.gov/standards/mods/.
XML-формат FileMaker Pro FMPXMLRESULT описан здесь: http://www.filemaker.com/help/html/import_export.16.30.html.
Ниже приведен пример экспорта модов Zotero. (Извините, некоторые отступы были потеряны при копировании файла для формирования блока кода в этом посте. Вот ссылка Dropbox на фактический файл: https://www.dropbox.com/s/otrwr7xk0uwmff7/From_Zotero_MODS.xml)
<?xml version="1.0"?>
<modsCollection xsi:schemaLocation="http://www.loc.gov/mods/v3
http://www.loc.gov/standards/mods/v3/mods-3-2.xsd" xmlns="http://www.loc.gov/mods/v3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<mods>
<titleInfo>
<title>Roberto Giobbi's Card college. Volume 1</title>
</titleInfo>
<typeOfResource>text</typeOfResource>
<genre authority="local">book</genre>
<genre authority="marcgt">book</genre>
<name type="personal">
<namePart type="family">Giobbi</namePart>
<namePart type="given">Roberto</namePart>
<role>
<roleTerm type="code" authority="marcrelator">aut</roleTerm>
</role>
</name>
<originInfo>
<place>
<placeTerm type="text">Seattle, Wash.</placeTerm>
</place>
<publisher>Hermetic Press</publisher>
<copyrightDate>1996</copyrightDate>
<issuance>monographic</issuance>
</originInfo>
<identifier type="isbn">0945296185</identifier>
<subject>
<topic>Card tricks</topic>
</subject>
<note>External Resources: Cite This Item Search for versions with same title and author
| Advanced options ...
Uniform Title: Grosse kartenschule. Band 1. English
Edition: Rev. 2nd ed. ; English language ed.
Language: English
Note(s): Includes bibliographical references (p. [245]-247) and index.
Other Titles: Card college
Responsibility: illustrated by Barbara Giobbi-Ebnöther ; translated from the German by
Richard Hatch.
Vendor Info: Baker & Taylor YBP Library Services (BKTY YANK) 32.00 Status:
active Note: B&T Title: Card College
Entry: 19960709
Update: 20091103
Provider: OCLC</note>
</mods>
<mods>
<titleInfo>
<title>Book of magic.</title>
</titleInfo>
<typeOfResource>text</typeOfResource>
<genre authority="local">book</genre>
<genre authority="marcgt">book</genre>
<name type="personal">
<namePart type="family">Warlock</namePart>
<namePart type="given">Peter</namePart>
<role>
<roleTerm type="code" authority="marcrelator">aut</roleTerm>
</role>
</name>
<originInfo>
<publisher>London New York, Arco</publisher>
<copyrightDate>1956</copyrightDate>
<issuance>monographic</issuance>
</originInfo>
<subject>
<topic>Magic tricks</topic>
</subject>
<note>External Resources: Cite This Item Search for versions with same title and author
| Advanced options ...
Edition: [1st ed.]
Language: English
Class Descriptors: LC: GV1547; Dewey: 793.8
Entry: 19750729
Update: 20120116
Provider: OCLC</note>
</mods>
<mods>
<titleInfo>
<title>The amateur magician's handbook,</title>
</titleInfo>
<typeOfResource>text</typeOfResource>
<genre authority="local">book</genre>
<genre authority="marcgt">book</genre>
<name type="personal">
<namePart type="family">Hay, Henry</namePart>
<namePart type="given"/>
<role>
<roleTerm type="code" authority="marcrelator">aut</roleTerm>
</role>
</name>
<name type="personal">
<namePart type="family">Mussey</namePart>
<namePart type="given">June Barrows</namePart>
<role>
<roleTerm type="code" authority="marcrelator">aut</roleTerm>
</role>
</name>
<originInfo>
<publisher>New York, Crowell</publisher>
<copyrightDate>1972</copyrightDate>
<issuance>monographic</issuance>
</originInfo>
<identifier type="isbn">0690057113</identifier>
<subject>
<topic>Magic tricks</topic>
</subject>
<note>External Resources: Cite This Item Search for versions with same title and author
| Advanced options ...
Edition: 3d ed., rev. and expanded.
Language: English
Note(s): Bibliography: p. 365-373.
Class Descriptors: LC: GV1547; Dewey: 793.8
Responsibility: by Henry Hay. Photos. by Audrey Alley.
Vendor Info: Baker and Taylor (BTCP)
Entry: 19720814
Update: 20080829
Provider: OCLC</note>
</mods>
</modsCollection>
1 ответ
Так что это похоже на библиографию. Ну, это зависит от того, как вы хотите иметь его в FileMaker. Базовый FileMaker XSLT будет выглядеть так:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:mod="http://www.loc.gov/mods/v3"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT NAME="N/A" BUILD="N/A" VERSION="N/A"/>
<DATABASE NAME="N/A" LAYOUT="N/A" RECORDS="1"
DATEFORMAT="M/d/yyyy" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<!-- 1 -->
<FIELD EMPTYOK="YES" MAXREPEAT="1" TYPE="NUMBER"
NAME="Title" />
<!-- More field definitions -->
</METADATA>
<RESULTSET>
<xsl:for-each select="mod:modsCollection/mod:mods">
<ROW MODID="1" RECORDID="1">
<!-- 1. Title -->
<COL>
<DATA>
<xsl:value-of select="mod:titleInfo/mod:title" />
</DATA>
</COL>
<!-- More COL's in the same order as the fields -->
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
Этот должен импортировать заголовок. template match="/"
как main()
в C это (типичная) точка входа. Как только мы туда доберемся, мы выводим скелет полученного XML.
Как только мы доберемся до строк, мы используем инструкцию XSLT для циклического перебора элементов, которые должны быть записями в нашей таблице; в нашем случае это mod:modsCollection/mod:mods
то есть библиографические записи, но они могут быть чем угодно; например, мы можем перебрать все имена (//mod:name
). mod:
префикс является ярлыком для пространства имен Zotero (http://www.loc.gov/mods/v3
); в исходном XML он указан как пространство имен по умолчанию, поэтому он используется без префикса, но в XSLT я по умолчанию использую пространство имен XML FileMaker (см., как я его определяю в FMPXMLRESULT
) и определите префикс для ссылки на элементы Zotero.
Циклическое выражение является выражением XPath; Google это, чтобы найти полную спецификацию. Здесь я использовал простое выражение, чтобы получить все mods
элементы. Проходя через них, я выводлю больше канцелярских товаров FileMakerROW
), а затем для каждого поля также COL
а также DATA
, Теперь для первого поля DATA
Мне нужно прочитать данные заголовка. Так как я в mods
элемент, путь к данным titleInfo/title
; чтобы получить значение, которое я использую xsl:value-of
элемент.
Чтобы импортировать больше полей, добавьте больше определений полей и больше COL
s. Чтобы импортировать что-то еще (например, не записи, а всех людей), используйте другое выражение в xsl:for-each
, Это должно начать вас:)