ФИАС: различия между версиями
Перейти к навигации
Перейти к поиску
Mavka (обсуждение | вклад) (rus-ref) |
Mavka (обсуждение | вклад) м (→MySQL) |
||
Строка 79: | Строка 79: | ||
== MySQL == | == MySQL == | ||
Готовые данные http://basicdata.ru/ | Готовые данные http://basicdata.ru/ | ||
[http://code.google.com/p/rus-ref/w/list Классификаторы России (rus-ref)] | [http://code.google.com/p/rus-ref/w/list Классификаторы России (rus-ref)] | ||
= Структура данных ФИАС (описание таблиц) = | = Структура данных ФИАС (описание таблиц) = |
Версия от 20:50, 3 января 2013
Эта страница является черновиком статьи.
Введение
Наследие КЛАДР...
Загрузка данных
PostgreSQL
Структура таблиц
Формат XML. XSD схемы выгрузки БД ФИАС в формате XML. XSL Transformation:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" indent="no"/>
<xsl:template match="/">
<xsl:variable name="filename" select="lower-case(tokenize(tokenize(base-uri(.), '/')[last()],'\.')[1])" />
CREATE TABLE <xsl:value-of select="$filename"/> (
<xsl:for-each select="/xs:schema/xs:element[1]/xs:complexType[1]/xs:sequence[1]/xs:element[1]/xs:complexType[1]/xs:attribute" >
<a> "<xsl:value-of select="@name" />" </a>
<xsl:choose>
<!-- тип данных -->
<xsl:when test="xs:simpleType/xs:restriction/@base='xs:integer'">integer</xsl:when>
<xsl:when test="xs:simpleType/xs:restriction/@base='xs:byte'">integer</xsl:when>
<xsl:when test="xs:simpleType/xs:restriction/@base='xs:string'">text</xsl:when>
<xsl:when test="@type='xs:date'">date</xsl:when>
</xsl:choose>
<xsl:if test="@use='required'"> NOT NULL</xsl:if>
<xsl:if test="position()!=last()">,
</xsl:if>
</xsl:for-each>
);
<xsl:for-each select="/xs:schema/xs:element[1]/xs:complexType[1]/xs:sequence[1]/xs:element[1]/xs:complexType[1]/xs:attribute" >
<a>COMMENT ON COLUMN <xsl:value-of select="$filename"/>."<xsl:value-of select="@name" />" IS </a>
<xsl:choose>
<!-- Часть комментариев слишком длинные, обрезаем лишние строки -->
<xsl:when test="contains(xs:annotation/xs:documentation,'
')">
<a>'<xsl:value-of select="substring-before(xs:annotation/xs:documentation,'
')"/>'</a>
</xsl:when>
<xsl:otherwise>'<xsl:value-of select="xs:annotation/xs:documentation"/>'</xsl:otherwise>
</xsl:choose>
<xsl:text>;
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Схема подходит для всех таблиц ФИАС. Для работы требуется парсер, поддерживающий XSLT 2.0. Например, для Windows - Saxon XSLT Processor (MPL). Тогда обработка файлов может принять вид (для версии .NET):
@echo off
SET PATH=%PATH%;d:\Program Files\Saxonica\SaxonHE9.4N\bin
for %%f in (*.xsd) do (
Transform ^
-xsl:xsd2db.xslt ^
-s:%%f ^
-o:sql\%%~nf.sql
)
Далее полученные файлы SQL желательно откорректировать, чтобы явно назначить ключи (primary keys).
//// Ссылка на готовые файлы
Импорт данных
MySQL
Готовые данные http://basicdata.ru/
Классификаторы России (rus-ref)