Skip to content

关于 @attr 的语法扩展 #390

@wevsty

Description

@wevsty

我在 issues #28 中提出了基于多种 attr 共存的想法。
现在过了一段时间,我认为从讨论结果上看,社区整体对多种 attr 共存的方案接受程度比较高,我们基本上可以达成共识。

同时为了更好的实践多重属性的方案,include语法势必要进行扩展。
如同 issues #256 中提到的语法扩展方案。
只不过我个人认为 include:filename@attribute 这样的语法还是略有不足。
我个人认为改为 include:filename @attribute1 @attribute2 这样的形式会更加灵活,也更简单。

那么为了实践多重属性的方案,我在这里想重新归纳整理一下对于 @attr 语法的改变,同时我会提出 PR 来实践。

  1. 支持为一个域名设置多种属性 (目前 master 分支已经支持)
    例如:
domain:google.com @attr1 @attr2
  1. include的语法扩展。
    语法:
# 包含 filename 中的所有条目(与目前的语法一致)
include:filename

# 代表包含 filename 中含有 @attribute1 和 @attribute2 这两种属性的条目。
include:filename @attribute1 @attribute2

# 代表包含 filename 中不含 attribute1 属性的条目和包含 attribute2 属性的条目
include:filename @!attribute1 @attribute2

这样做的好处是我们可以针对为不同国家同时提供服务的企业实现最合适的访问路径,并且更易于后续的管理。
举个例子:

# filename hsbc
hsbc.com
hsbc.com.hk @hk
hsbc.com.cn @cn
hsbc.co.uk @uk

# geolocation-cn file
include:hsbc @cn

# geolocation-!cn file
include:hsbc @!cn

我个人觉得这样的写法更符合人类认知,也更好操作。

  1. 规范化属性标签

关于属性标签的问题,我这里参考 Loyalsoldier 的建议,同时也是作为一个规范。
我们可以把属性规范为2类。

3.1. 传统的地域属性
按照企业或网站所在地区来进行分类。

比如:
中国企业为中国用户提供服务的使用@cn
中国企业的美国分支机构,只为美国提供服务的可使用@us
美国企业为美国用户提供服务的使用@us
美国企业专为中国用户提供服务的使用@cn

接受所有国家代码(2字母小写)作为属性,同时为了方便以及兼容性也接受不写该属性。
这样无论任何域名都可以按照此方法来分类,并且现有的数据无需更改可以继续使用。

如果按照规范实施的话,最后的成果可能会变成这样。

amazon.com
163.com @cn
github.com @us
samsung.com @kr
rakuten.co.jp @jp

注1:此外对于域名条目中@!cn这样的语法为了兼容性予以保留,等待后续修改。
注2:除国家代码以外的所有2字母组合均定义为保留字。

3.2. 增加如下使用属性

# anycast 代表具有多国接入点
@anycast
# gfw 代表被 GFW 污染
@gfw
# ads 代表该域名被用于展示广告
@ads

按照这几条来实施的话,我个人认为对于目前的版本来说是易于实施的,并且不会导致不兼容的情况
以上是我对 @attr 语法的一些想法,欢迎大家来讨论。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions