#xml #xslt #filemaker
#xml #xslt #filemaker
Вопрос:
Я создал xslt для импорта xml в FileMaker.
XML — это сценарий, который я хочу импортировать, и он имеет следующую структуру:
<FinalDraft DocumentType="Script" Template="No" Version="3">
<Content>
<Paragraph Number="1" Type="Scene Heading">
<SceneProperties Length="2/8" Page="1" Title="">
</SceneProperties>
<Text>Int. Containerhafen ContainerbrÜcke - tag </Text>
</Paragraph>
<Paragraph Type="Action">
<Text>Der Mann zündet sich eine Zigarette an und marschiert über das Terminal. Hafenarbeiter, die ihn passieren, grüßen respektvoll. Plötzlich klingelt sein Telefon. Der Mann bleibt stehen. Er zögert. Das Telefon klingelt weiter. Schließlich hebt er ab.</Text>
</Paragraph>
<Paragraph Type="Character">
<Text>Mann</Text>
</Paragraph>
<Paragraph Type="Dialogue">
<Text>Ja?</Text>
</Paragraph>
<Paragraph Type="Action">
<Text>Der Mann zündet sich eine Zigarette an und marschiert über das Terminal. Hafenarbeiter, die ihn passieren, grüßen respektvoll. Plötzlich klingelt sein Telefon. Der Mann bleibt stehen. Er zögert. Das Telefon klingelt weiter. Schließlich hebt er ab.</Text>
</Paragraph>
<Paragraph Type="Character">
<Text>Mann</Text>
</Paragraph>
<Paragraph Type="Dialogue">
<Text>Ja?</Text>
</Paragraph>
</Content>
</FinalDraft>
Абзац «Заголовок сцены» с абзацем «Действие, персонаж, диалог» повторяется очень часто для каждой сцены в сценарии.
Я пытаюсь импортировать много информации в Filemaker, каждая сцена состоит из одной строки: номер сцены, длина сцены, текст заголовка сцены и т.д. И теперь я также хочу импортировать в одно поле всю информацию о сцене в ones: «Заголовок сцены, действие, персонаж, диалог». Заголовок сцены — это не проблема, но «Действие, персонаж, диалог» часто повторяется, поэтому мне нужен второй «для каждого», но у меня проблема с путем, и я не знаю, правильный ли это путь?
Это XSLT, проблемная часть находится в самом конце, в последнем столбце «Szeneninhalt». Я пометил путь «???», и это html-код, потому что мне это нужно в FileMaker.
<RESULTSET>
<xsl:for-each select="FinalDraft/Content/Paragraph[@Type='Scene Heading']">
<ROW>
<!-- Szenennummer
-->
<COL>
<DATA>
<xsl:value-of select="@Number"/></DATA>
</COL>
<!-- Szenenlaenge
-->
<COL>
<DATA>
<xsl:value-of select="SceneProperties/@Length"/></DATA>
</COL>
<!-- Szenenbezeichnung
-->
<COL>
<DATA><!--
<xsl:variable name="Szene" select="Text"/>
<xsl:value-of select="replace('$Szene', 'Ext.', '123')" />
-->
<xsl:value-of select="Text"/>
</DATA>
</COL>
<!-- Szenensynopsis
-->
<COL>
<DATA>
<xsl:value-of select="following-sibling::Paragraph[@Type='Action']/Text"/></DATA>
</COL>
<!-- Drehbuchname
-->
<COL>
<DATA>
Drehbuch Ersatzname
</DATA>
</COL>
<!-- ExtInt
-->
<COL>
<DATA>
<xsl:if test="contains(Text, 'Ext.')">
<p>Ext.</p>
</xsl:if>
<xsl:if test="contains(Text, 'Int.')">
<p>Int.</p>
</xsl:if>
</DATA>
</COL>
<!-- TagNacht
-->
<COL>
<DATA>
<xsl:if test="contains(Text, 'tag')">
<p>Tag</p>
</xsl:if>
<xsl:if test="contains(Text, 'nacht')">
<p>Nacht</p>
</xsl:if>
</DATA>
</COL>
<!-- Szeneninhalt
-->
<COL>
<DATA>
amp;<htmlamp;>
amp;<headamp;>
amp;</headamp;>
amp;<bodyamp;>
amp;<ul class="screenbox"amp;>
amp;<li class="scenenumber"amp;><xsl:value-of select="@Number"/>amp;</liamp;>
amp;<li class="sceneheader"amp;><xsl:value-of select="Text"/>amp;</liamp;>
<xsl:for-each select=" ??? ">
amp;<li class="action"amp;><xsl:value-of select=" ??? "/>amp;</liamp;>
<!--
amp;<li class="character"amp;><xsl:value-of select=" ??? "/>amp;</liamp;>
amp;<li class="dialogue"amp;><xsl:value-of select=" ??? "/>amp;</liamp;>
-->
</xsl:for-each>
amp;</ulamp;>
amp;</bodyamp;>
amp;</htmlamp;>
</DATA>
</COL>
</ROW></xsl:for-each>
</RESULTSET>
Спасибо за любую помощь!
Комментарии:
1. 1. Я не уверен, что это хорошая идея помещать все абзацы сцены в одно поле. Я бы посоветовал вам использовать отдельные записи в связанной таблице. — 2. Я не смог понять формат, который вы хотите использовать, если и при размещении их в одном поле. Я думаю, было бы (еще одной) ошибкой смешивать данные с форматированием. Сохраняйте свои данные в чистоте, и если вам нужно отобразить их в формате HTML, используйте отдельный процесс.
2. Я хочу показывать каждую страницу сцены в FileMaker как настоящую страницу сценария, я могу сделать это с помощью «web viewer» — это поле, в котором я отображаю html-код. Моя идея заключалась в том, чтобы подготовить html-код в xslt, в Filemaker это не так просто сделать. Но я также не уверен, что это правильный путь. Разделение абзацев в xml больше для лучшего форматирования, а не для данных. xml — это способ работы приложения screenplay.
3. Я совершенно уверен, что это неправильный путь. Просто подумайте, что потребовалось бы, если бы вы захотели хотя бы немного изменить HTML-код. Правильный способ — использовать HTML-код в качестве шаблона в веб-средстве просмотра или в скрипте, который заполняет веб-средство просмотра. Этот шаблон будет использовать данные из ваших записей / полей для создания HTML-кода по запросу. Это не так сложно сделать (и вы всегда можете задать другой вопрос по этому поводу).
4. Да, если я подумаю об этом сейчас, возможно, имеет смысл сначала импортировать данные в FileMaker в чистом виде, а затем распространить их в FileMaker и обработать так, как мне нужно. С одной стороны, мне нужен обзор всех сцен с информацией, потому что они обрабатываются дальше, чем представление самой сцены в «Webviewer». Я попробую этот способ, спасибо за пищу для размышлений! — Еще один вопрос, который не совсем подходит к этой теме, но, возможно, у вас есть идея или ссылка на сообщение: как мне получить имя файла xml в FileMaker?
5. XSLT 1.0 не знает имени файла. Если вам это нужно, используйте скрипт Filemaker, чтобы получить его (например, сначала вставьте XML в поле контейнера, затем экспортируйте его в temp и импортируйте оттуда).