元数据

数据喜欢元数据。随时运行 Datasette 时,您可以选择包含一个 JSON 文件,其中包含有关您的数据库和表的元数据。然后 Datasette 会在 Web UI 中显示这些信息。

按如下方式运行 Datasette

datasette database1.db database2.db --metadata metadata.json

您的 metadata.json 文件可以看起来像这样

{
    "title": "Custom title for your index page",
    "description": "Some description text can go here",
    "license": "ODbL",
    "license_url": "https://opendatacommons.org/licenses/odbl/",
    "source": "Original Data Source",
    "source_url": "http://example.com/"
}

您可以选择使用 YAML 而不是 JSON,参见 使用 YAML 作为元数据

上述元数据将显示在您的 Datasette 驱动站点的索引页上。来源和许可证信息也将包含在 Datasette 服务的所有页面的页脚中。

description 中的任何特殊 HTML 字符将被转义。如果您想在描述中包含 HTML,可以使用 description_html 属性代替。

按数据库和按表的元数据

JSON 顶层的元数据将显示在索引页和网站的每个页面的页脚中。许可证和来源预计适用于您的所有数据。

您也可以在按数据库或按表级别提供元数据,像这样

{
    "databases": {
        "database1": {
            "source": "Alternative source",
            "source_url": "http://example.com/",
            "tables": {
                "example_table": {
                    "description_html": "Custom <em>table</em> description",
                    "license": "CC BY 3.0 US",
                    "license_url": "https://creativecommons.org/licenses/by/3.0/us/"
                }
            }
        }
    }
}

顶层的每个元数据字段都可以在数据库和表级别使用。

来源、许可证和关于

您可以应用于所有内容、特定数据库或特定表的三种可见元数据字段是 source、license 和 about。这三个字段都是可选的。

sourcesource_url 应用于指示原始数据来源。

licenselicense_url 应用于指示数据可以使用的许可证。

aboutabout_url 可用于链接到有关项目的更多信息 - 例如一篇配套的博客文章。

对于这些字段中的每一个,您都可以只提供 *_url 字段,Datasette 会将其视为默认链接标签文本并直接在页面上显示 URL。

列描述

您可以通过在表的元数据中添加 "columns": {"name-of-column": "description-of-column"} 块来包含列的描述

{
    "databases": {
        "database1": {
            "tables": {
                "example_table": {
                    "columns": {
                        "column1": "Description of column 1",
                        "column2": "Description of column 2"
                    }
                }
            }
        }
    }
}

这些将显示在表页面的顶部,也会在每列的齿轮菜单中显示。

您可以在 latest.datasette.io/fixtures/roadside_attractions 查看这些内容的示例。

指定列的单位

Datasette 支持为列附加单位,这将在显示该列的值时使用。适当时将使用 SI 前缀。

列单位在元数据中配置如下

{
    "databases": {
        "database1": {
            "tables": {
                "example_table": {
                    "units": {
                        "column1": "metres",
                        "column2": "Hz"
                    }
                }
            }
        }
    }
}

单位使用 Pint 进行解释,您可以在 Pint 的单位注册表中查看可用单位的完整列表。您还可以向元数据添加自定义单位,这些单位将注册到 Pint 中

{
    "custom_units": [
        "decibel = [] = dB"
    ]
}

设置默认排序顺序

默认情况下,Datasette 表按主键排序。您可以使用 "sort""sort_desc" 元数据属性覆盖特定表的此默认设置

{
    "databases": {
        "mydatabase": {
            "tables": {
                "example_table": {
                    "sort": "created"
                }
            }
        }
    }
}

或者使用 "sort_desc" 按降序排序

{
    "databases": {
        "mydatabase": {
            "tables": {
                "example_table": {
                    "sort_desc": "created"
                }
            }
        }
    }
}

设置自定义页面大小

Datasette 默认每页显示 100 行,适用于表和视图。您可以使用 metadata.json 中的 "size" 键按表或按视图更改此默认页面大小

{
    "databases": {
        "mydatabase": {
            "tables": {
                "example_table": {
                    "size": 10
                }
            }
        }
    }
}

此大小仍然可以通过在查询字符串中传递例如 ?_size=50 来覆盖。

设置哪些列可用于排序

默认情况下,Datasette 允许任何列用于排序。如果您需要控制哪些列可用于排序,可以使用可选的 sortable_columns 键来实现

{
    "databases": {
        "database1": {
            "tables": {
                "example_table": {
                    "sortable_columns": [
                        "height",
                        "weight"
                    ]
                }
            }
        }
    }
}

这将限制 example_table 的排序仅限于 heightweight 列。

您也可以通过设置 "sortable_columns": [] 完全禁用排序

您可以使用 sortable_columns 为数据库 my_database 中名为 name_of_view 的视图启用特定的排序顺序,如下所示

{
    "databases": {
        "my_database": {
            "tables": {
                "name_of_view": {
                    "sortable_columns": [
                        "clicks",
                        "impressions"
                    ]
                }
            }
        }
    }
}

指定表的标签列

Datasette 的 HTML 界面尝试将外键引用显示为带标签的超链接。默认情况下,它查找仅有两个列的引用表:一个主键列和另一个列。它假定第二个列应用作链接标签。

如果您的表有两个以上的列,您可以使用 label_column 属性指定应使用哪个列作为链接标签

{
    "databases": {
        "database1": {
            "tables": {
                "example_table": {
                    "label_column": "title"
                }
            }
        }
    }
}

隐藏表

您可以使用 "hidden": true 从数据库列表视图中隐藏表(与 FTS 和 SpatiaLite 表自动隐藏的方式相同)

{
    "databases": {
        "database1": {
            "tables": {
                "example_table": {
                    "hidden": true
                }
            }
        }
    }
}

使用 YAML 作为元数据

Datasette 接受 YAML 作为元数据配置文件的 JSON 替代方案。YAML 对于包含多行 HTML 和 SQL 字符串特别有用。

这是一个 metadata.yml 文件示例,重用了来自 预置查询 (Canned queries) 的示例。

title: Demonstrating Metadata from YAML
description_html: |-
  <p>This description includes a long HTML string</p>
  <ul>
    <li>YAML is better for embedding HTML strings than JSON!</li>
  </ul>
license: ODbL
license_url: https://opendatacommons.org/licenses/odbl/
databases:
  fixtures:
    tables:
      no_primary_key:
        hidden: true
    queries:
      neighborhood_search:
        sql: |-
          select neighborhood, facet_cities.name, state
          from facetable join facet_cities on facetable.city_id = facet_cities.id
          where neighborhood like '%' || :text || '%' order by neighborhood;
        title: Search neighborhoods
        description_html: |-
          <p>This demonstrates <em>basic</em> LIKE search

metadata.yml 文件使用相同的 --metadata 选项传递给 Datasette

datasette fixtures.db --metadata metadata.yml