Какой формат я должен использовать для списка для синхронизации файлов? - PullRequest
0 голосов
/ 18 апреля 2011

Я создаю мобильное приложение, которое синхронизирует ресурсы с сервером. Это будет иметь следующее поведение:

  • На сервере есть список всех файлов
  • Существует значение, в котором удаленные файлы будут храниться локально
  • Существует контрольная сумма для сравнения с локальным списком, чтобы увидеть, изменился ли удаленный файл
  • Предпочтительно, файл должен быть зашифрован. (Но, конечно, мы можем использовать https)

Сначала я подумал о самом простом решении - использовать CSV для хранения значений. Затем мы рассмотрели расширяемость программы и пришли к выводу, что XML будет более открытым. Я немного погуглил и не нашел схему, которая соответствует нашей цели. RSS, ATOM не соответствует некоторым нашим требованиям, а XDI выглядит слишком сложно.

Должны ли мы создать нашу собственную XML-схему? Или есть какой-то простой формат по умолчанию, который подойдет для нашего случая.

Спасибо!

Ответ

Я сделал для этого собственную XML-схему, здесь есть ссылки для других.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!--Simple Types-->
<xs:simpleType name="remoteurltype">
  <xs:restriction base="xs:anyURI">
    <xs:pattern value="http(s)?://.*"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="localurltype">
  <xs:restriction base="xs:anyURI">
    <xs:pattern value="/.*"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="dectype">
  <xs:restriction base="xs:decimal">
    <xs:pattern value="[0-9]+\.?[0-9]*"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="hashtype">
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z0-9]{32}"/>
  </xs:restriction>
</xs:simpleType>

<!-- Complex Types -->
<xs:complexType name="resourcetype">
  <xs:attribute name="src" type="remoteurltype" use="required"/>
  <xs:attribute name="local" type="localurltype" use="required"/>
  <xs:attribute name="hash" type="hashtype" use="required"/>
</xs:complexType>

<xs:complexType name="resourcelisttype">
  <xs:sequence>
    <xs:element name="db" type="resourcetype"/>
    <xs:element name="img" maxOccurs="unbounded" type="resourcetype"/>
  </xs:sequence>
  <xs:attribute name="version" type="dectype" use="required"/>
</xs:complexType>

<!-- Root Element -->
<xs:element name="resources" type="resourcelisttype"/>

</xs:schema>

Это хорошо подтверждено, и вот пример.

<?xml version="1.0" encoding="UTF-8"?>

<resources version="0.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="resources.xsd">
  <db src="http://prdownloads.sourceforge.net/souptonuts/sqlite_examples.tar.gz?download"
    local="/database/default.sqlite" hash="64846a8f75d56fd68b01f55495ac5986" />
  <img src="http://www.google.com/images/logos/ps_logo2.png"
    local="/images/google.png" hash="4b9606a40bd81e8a047d2f74fa167e35" />
  <img src="http://www.baidu.com/img/baidu_sylogo1.gif"
    local="/images/baidu_sylogo1.gif" hash="52137eafacaf179057c837dfa720ecf9" />
</resources>

1 Ответ

1 голос
/ 18 апреля 2011

Для этого вы должны использовать собственную XML-схему. Легкость, с которой новая схема может быть спроектирована и реализована, является, вероятно, основным преимуществом использования XML.

Держитесь подальше от CSV, так как это будет источником постоянных проблем с наборами символов, встроенными кавычками, новыми строками и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...