私のArcGIS Data Interoperability ETLプロセスは順調でしたが、突然ArcGIS Online Feature Serviceライターがエラーを出し、ワークスペースが終了しました。エラーメッセージは次のようなものでした:<\/P>
サーバーからのエラーコードは「400」で、メッセージは次の通りです: ''. 詳細: 'Field public_description has invalid html content.<\/FONT><\/P>データは地方自治体の311サイトからのもので、フィールドpublic_descriptionは一般市民がサービスリクエストの詳細を記録した場所です。どうしてHTMLがそこに入ったのでしょうか?何が無効だったのでしょうか?この種の問題を検出するために翻訳処理をどのように強化すればよいでしょうか?
多くの調査を行い、Safeにwriter rejection handlingについて再度相談することを自分にメモしつつ、不正なデータを見つけました。調査中、アイザック・ニュートンのレグラ・ファルシ法を数学の授業で学んだことを思い出し、キャッシュをオンにして2つのSamplerトランスフォーマーで問題箇所を絞り込みました。それはHTMLですらなく、角括弧で囲まれたメールアドレスでした: <somebody@hotmail.com><\/STRONG>。
なるほど、自由記述欄にメールアドレスを入れるのは合理的だと思いました。ではなぜフィーチャ サービスはそれに対してこんなに厳しいのでしょうか?
実はフィーチャ サービスには(デフォルトでオンになっている)潜在的に有害なコンテンツをブロックする設定があります。選択肢はいくつかあります。もし本当にHTMLコンテンツが含まれているなら、TextEncoderのHTMLモードでパーセントエンコードすることもできますし、手動で角括弧を<と>にエンコードすることもできます。また、正規表現<.*><\/STRONG>とStringReplacerでタグ内の内容を削除することも可能です。あるいはサービスプロパティを切り替えてデータを通過させることもできます。ここでは最後のオプションを選ぶとしましょう。
管理者REST APIコールを使用する必要があります。変更すべきプロパティはxssPreventionInfoです。
これを行うには、ブラウザでサービス所有者としてログインし、HomeアプリのContentセクションからフィーチャ サービスアイテムに移動します。右下にアイテムREST APIを見るためのコントロールがあります:
<\/P>
ブラウザでそこへアクセスしてください(URLはもちろん異なります)。
https://services.arcgis.com/FQD0rKU8X5sAQfh8/arcgis/rest/services/Get_It_Done_311_Requests/FeatureServer?token=<yourtoken><\/A>
管理APIにアクセスするには、「rest」と「services」の間に'admin'という単語を挿入します:
https://services.arcgis.com/FQD0rKU8X5sAQfh8/ArcGIS/rest/admin/services/Get_It_Done_311_Requests/FeatureServer?token=<yourtoken><\/A>
ページ下部でUpdateDefinitionエンドポイントへ移動します:
https://services.arcgis.com/FQD0rKU8X5sAQfh8/ArcGIS/rest/admin/services/Get_It_Done_311_Requests/FeatureServer/updateDefinition?token=<yourtoken><\/A>
次にxssPreventionInfoプロパティを探し、xssInputRuleの値をsanitizeInvalid:に設定します。
<\/P>
Update Service Definitionボタンをクリックし、正常に完了したことを確認してください。これでHTMLや<somebody@hotmail.com>のような内容を書き込めるようになります!