FileMakerでデータをインポートするには「ファイル」->「レコードのインポート」から、もしくはスクリプトの「レコードのインポート」から行える。

ファイルの中身のインポート、フォルダ内のファイル自体をインポート、ODBCを介して直接他データベースからSQLを発行してインポート
そして、xmlを経由してのデータインポートがある。
下記はxmlを使用した場合のデータインポートの例。
様式:
といった方式がありえるかと。
おまじない的なテンプレートxslt。ほとんどすべてこれで足りるかと。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/*">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="" NAME="" VERSION=""/>
<DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="{count(/*/*)}" TIMEFORMAT="h:mm:ss a"/>
<METADATA>
<!-- xsl:for-eachで一つのFIELDエレメントを決めている -->
<xsl:for-each select="/*/*[position()=1]/*">
<FIELD>
<xsl:attribute name="EMPTYOK">YES</xsl:attribute>
<xsl:attribute name="MAXREPEAT">1</xsl:attribute>
<xsl:attribute name="NAME"><xsl:value-of select="name()"/></xsl:attribute>
<xsl:attribute name="TYPE">TEXT</xsl:attribute>
</FIELD>
</xsl:for-each>
</METADATA>
<RESULTSET>
<xsl:attribute name="FOUND"><xsl:value-of select="count(child::*)"/></xsl:attribute>
<xsl:for-each select="child::*">
<ROW>
<xsl:attribute name="MODID">0</xsl:attribute>
<xsl:attribute name="RECORDID">0</xsl:attribute>
<xsl:for-each select="child::*">
<COL>
<DATA>
<xsl:value-of select="."/>
</DATA>
</COL>
</xsl:for-each>
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
これを、http経由で得られるようにするか、FM内部に予め登録しておきます。
次に、実際に取り込むデータですが、http要求、もしくはスクリプトの実行結果として、下記の様式で得られるようにします。
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xml" href=""?>
<root>
<child>
<query>0000011</query>
<hit>hsa2840</hit>
<start>75</start>
<end>326</end>
<score>312</score>
<evalue>2.8e-102</evalue>
<date>2007-10-04</date>
</child>
</root>
kegg-human配列へblast検索を実施した結果を上記のようなxmlで得たとします。上記のxsltとこのxmlでインポート/更新が可能になります。
httpリクエストの変数にquery:0000011を入れて、blast検索サーバに繋げ、リクエストを受けたサーバは、CGIを介してblast検索を
実行して、その結果をxml形式にして出力する。そういった流れ。CGIはBioPerlとかで賄えば宜しいかと
下記はFMサーバ内にあるWindowsSerch全文検索に対して「天使」なる言葉を含むファイル検索を依頼して、その出力をxmlで得る場合の例である。
vbsなファイルです。
set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
set rs = CreateObject("ADODB.recordset")
rs.open "SELECT System.FileName FROM SYSTEMINDEX where CONTAINS('天使'), conn
set io = CreateObject("Scripting.FileSystemObject")
set fs = io.OpenTextFile("test.txt",2,true)
fs.writeLine("<?xml version="1.0" encoding="UTF-8" ?>")
fs.writeLine("<?xml-stylesheet type="text/xml" href=""?>")
fs.writeLine("<root>")
Do while rs.EOF <> true
Wscript.Echo rs.Fields.Item("System.FileName")
fs.writeline("<child><fileName>" & rs.Fields.Item("System.FileName") & "</fileName></child>" )
rs.MoveNext
Loop
fs.writeLine("</root>")
rs.Close
conn.close
fs.close
これをFMのeventで実行させると、下記のような出力となる。
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xml" href=""?>
<root>
<child>
<fileName>C:\Users\foo\Document\sample.doc</fileName>
</child>
</root>
*注意点
httpを経由したxmlインポート/更新は問題ないのだが、内部にあるvbsなスクリプトを実施して、その結果を取り込む場合、
vbsの出力ファイルの完成を待たず、FMへのインポートを開始してしまう事がある。それゆえ、出力ファイルを確認してからの
FMへの取り込みと言った予防策を張る必要が生じる。