Я создаю мобильное приложение, которое синхронизирует ресурсы с сервером. Это будет иметь следующее поведение:
- На сервере есть список всех файлов
- Существует значение, в котором удаленные файлы будут храниться локально
- Существует контрольная сумма для сравнения с локальным списком, чтобы увидеть, изменился ли удаленный файл
- Предпочтительно, файл должен быть зашифрован. (Но, конечно, мы можем использовать 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>