XML-схема indexedDB?

Я пишу небольшой и простой API, чтобы абстрагироваться от Web SQL, indexedDB и, возможно, даже localStorage / JSON. API позволит программисту рассматривать базу данных как небольшую реляционную базу данных, даже если фактически используемая база данных является indexedDB или структурой данных localStorage / JSON.

Я не знаю, существует ли «стандартный» способ сделать это, но у меня структура базы данных должна быть представлена ​​как реляционная база данных, которая определена в схеме XML. Я думаю, что конечный продукт будет выглядеть так: xsd -> xml (следует схеме, определяет db) -> javascript api -> (indexeddb / wwebsql / localStorage-JSON). Отличная идея? Имейте в виду, что производительность можно настроить внутри API. То есть я знаю, что indexedDB не является реляционной базой данных и что для некоторых, представляющих ее как таковую, это нечестивый UNION, но сам API будет работать с indexedDB способом indexedDB и Web SQL в стиле Web SQL.

Сказав это, я представляю вам свою схему. Я хочу, чтобы это было очень просто. Как можно проще. Можете ли вы что-нибудь улучшить? Одна вещь, которую я хотел бы добавить, - это определенный тип поля. Так что поле может иметь тип атрибута, но это могут быть только определенные значения (строка, число, blob, w / e).

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!-- DATABASE -->
  <xs:element name="database">
    <xs:complexType>
      <xs:choice>
          <!-- TABLE-->
              <xs:element name="table" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:choice>
                      <!-- FIELD -->
                      <xs:element name="field" minOccurs="0" maxOccurs="unbounded">
                        <xs:complexType>
                          <xs:attribute name="name" type="xs:string" use="required"/>
                          <xs:attribute name="pk" type="xs:boolean"/>
                          <xs:attribute name="fk" type="xs:string"/>
                          <xs:attribute name="unique" type="xs:boolean"/>
                          <xs:attribute name="index" type="xs:boolean"/>
                          <xs:attribute name="indentity" type="xs:boolean"/>
                          <xs:attribute name="maxSize" type="xs:long"/>
                        </xs:complexType>
                      </xs:element>
                      <!-- END FIELD -->
                  </xs:choice>
                  <xs:attribute name="name" type="xs:string" use="required"/>
                </xs:complexType>
              </xs:element>
          <!-- END TABLE -->
      </xs:choice>
      <xs:attribute name="version" type="xs:double" use="required"/>
    </xs:complexType>
  </xs:element>
  <!-- END DATABASE -->
</xs:schema>

person anonymous    schedule 26.04.2012    source источник


Ответы (1)


IndexedDB - это гораздо больше документально-ориентированное (на самом деле объектно-ориентированное) хранилище, а не реляционное. Хотя можно реализовать отношения "многие ко многим" в IndexedDB, это не так. совершенно естественно.

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

person buley    schedule 27.04.2012
comment
Как вы думаете, безопасно ли использовать только indexeddb, или автономное решение также должно включать веб-sql для устройств, которые еще не поддерживают indexeddb? - person anonymous; 27.04.2012