Quarkus style and content guidelines
提供指南帮助您提供清晰且一致的内容,这些内容也存在于 Quarkus 文档所需的 diataxis 结构和组成中。
Website publication
该存储库中的内容会发布到 Quarkus.io website 中。
-
从主分支构建的文档将在每晚发布(main-SNAPSHOT)。
-
其他分支的文档将在发布时发布。
Titles and headings
无论内容类型如何,确保文档中的主要标题和任何标题:
-
以目标为导向,并使用听众的语言和关键词
-
具有描述性,避免使用填充词
-
每行使用 3-12 个单词和 50-80 个字符以优化搜索引擎中的可查找性
-
采用句子大小写风格
您的标题必须遵循适用于 Quarkus 内容类型的特定指导,如下表所述:
Content type | Should … | Good example | Bad example |
---|---|---|---|
Concept |
|
在 Quarkus 中的安全性和认证机制 |
在 Quarkus 中发现反应式 SQL 客户端 |
How-To Guide |
|
使用 WebAuthn 身份验证保护您的 Quarkus 应用程序 |
在 Quarkus 中应用 WebAuthn 身份验证 |
Reference |
|
Hibernate Reactive API 配置属性 |
配置 Hibernate Reactive API 配置属性的参考指南 |
Tutorial |
|
通过使用快速入门示例在 JVM 模式下创建 Quarkus 应用程序 |
Creating an App |
File conventions
Source locations
-
AsciiDoc 文件位于
docs
的 Quarkus GitHub repository 模块中的src/main/asciidoc
目录中。 -
配置文档由 Java 源文件中的 JavaDoc 注释生成。
-
Java、YAML 及其他源文件也可以由 AsciiDoc 文件引用。
Output locations
- Configuration references
-
Configuration reference documentation is generated from Javadoc comments discovered in MicroProfile Config source files. These generated files are in
target/asciidoc/generated/config/
(from the project root). - AsciiDoc output to HTML
-
AsciiDoc processing creates HTML files in
docs/target/generated-docs/
.
Templates
使用适合内容类型的相应模板创建新文档文件:
- Concepts
-
Use
docs/src/main/asciidoc/_templates/template-concept.adoc
- How-To Guides
-
Use
docs/src/main/asciidoc/_templates/template-howto.adoc
- Reference
-
Use
docs/src/main/asciidoc/_templates/template-reference.adoc
- Tutorials
-
Use
docs/src/main/asciidoc/_templates/template-tutorial.adoc
File names
Quarkus 文档使用扁平层次结构。
文件名的大部分内容应为标题的某种表示形式,所有字母都用小写,单词之间用连字符隔开,避免使用符号和特殊字符。
- Prefix
-
Use a common prefix to group-related documents. Documents related to writing and contributing to Quarkus docs share the
doc-
prefix, for example. - Suffix
-
Use a suffix that reflects the document type (optional):
-
-concept.adoc
for concept documents -
-howto.adoc
for how-to guides -
-reference.adoc
for references -
-tutorial.adoc
for tutorials
-
Document structure
使用 Quarkus 模板以确保您的内容与首选的 Quarkus 文档结构和样式一致。
Document header
每个文档都应定义一个文档范围属性的标题,每个文档都应至少定义一个 ID 和一个标题,并包含常见的属性(_attributes.adoc
)。
[id="doc-reference"] (1)
= Quarkus style and content guidelines (2)
// Common attributes.
// --> No blank lines (it ends the document header)
:project-name: Quarkus
:quarkus-version: ${project.version}
:quarkus-platform-groupid: io.quarkus.platform
// .
:maven-version: ${proposed-maven-version}
:graalvm-version: ${graal-community.version-for-documentation}
:graalvm-docs-version: ${graal-community.tag-for-documentation}
:graalvm-flavor: ${graal-community.image-tag-for-documentation}
:mandrel-flavor: ${mandrel.image-tag-for-documentation}
:surefire-version: ${version.surefire.plugin}
:gradle-version: ${gradle-wrapper.version}
:elasticsearch-version: ${elasticsearch-server.version}
:elasticsearch-image: ${elasticsearch.image}
:opensearch-image: ${opensearch.image}
:infinispan-version: ${infinispan.version}
:infinispan-protostream-version: ${infinispan.protostream.version}
:logstash-image: ${logstash.image}
:kibana-image: ${kibana.image}
:keycloak-docker-image: ${keycloak.docker.image}
:jandex-version: ${jandex.version}
:jandex-gradle-plugin-version: ${jandex-gradle-plugin.version}
:kotlin-version: ${kotlin.version}
:grpc-version: ${grpc.version}
:protoc-version: ${protoc.version}
:gcf-invoker-version: ${gcf-invoker.version}
// Cannot simply use the name 'hibernate-*-version' here as it somehow gets
// overridden to the full version, at least when building locally.
:hibernate-orm-version-major-minor: ${hibernate-orm.majorVersion}.${hibernate-orm.minorVersion}
:hibernate-search-version-major-minor: ${hibernate-search.majorVersion}.${hibernate-search.minorVersion}
// .
:quarkus-home-url: ${quarkus-home-url}
:quarkus-org-url: https://github.com/quarkusio
:quarkus-site-getting-started: /get-started
:quarkus-writing-extensions-guide: /guides/writing-extensions
:quarkus-site-publications: /publications
:quarkus-base-url: ${quarkus-base-url}
:quarkus-clone-url: ${quarkus-base-url}.git
:quarkus-archive-url: ${quarkus-base-url}/archive/main.zip
:quarkus-blob-url: ${quarkus-base-url}/blob/main
:quarkus-tree-url: ${quarkus-base-url}/tree/main
:quarkus-issues-url: ${quarkus-base-url}/issues
:quarkus-images-url: https://github.com/quarkusio/quarkus-images/tree
:quarkus-chat-url: https://quarkusio.zulipchat.com
:quarkus-mailing-list-subscription-email: quarkus-dev+subscribe@googlegroups.com
:quarkus-mailing-list-index: https://groups.google.com/d/forum/quarkus-dev
:quickstarts-base-url: ${quickstarts-base-url}
:quickstarts-clone-url: ${quickstarts-base-url}.git
:quickstarts-archive-url: ${quickstarts-base-url}/archive/main.zip
:quickstarts-blob-url: ${quickstarts-base-url}/blob/main
:quickstarts-tree-url: ${quickstarts-base-url}/tree/main
// .
:hibernate-orm-docs-url: https://docs.jboss.org/hibernate/orm/{hibernate-orm-version-major-minor}/userguide/html_single/Hibernate_User_Guide.html
:hibernate-orm-dialect-docs-url: https://docs.jboss.org/hibernate/orm/{hibernate-orm-version-major-minor}/dialect/dialect.html
:hibernate-search-docs-url: https://docs.jboss.org/hibernate/search/{hibernate-search-version-major-minor}/reference/en-US/html_single/
// .
:amazon-services-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-amazon-services/dev/index.html
:config-consul-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-config-extensions/dev/consul.html
:hibernate-search-orm-elasticsearch-aws-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-hibernate-search-extras/dev/index.html
:neo4j-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-neo4j/dev/index.html
:vault-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-vault/dev/index.html
:vault-datasource-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-vault/dev/vault-datasource.html
:micrometer-registry-guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-micrometer-registry/dev/index.html
:quarkus-migration-guide: https://github.com/quarkusio/quarkus/wiki/Migration-Guides[Migration Guides]
// .
:create-app-group-id: org.acme
:create-cli-group-id: {create-app-group-id}
// .
// for rendering the final website the attributes are set in the appropriate
// location based on source versions in https://github.com/quarkusio/quarkusio.github.io/
// they are duplicated here to ease the preview when editing in the IDE
// --> No blank lines (it ends the document header)
:idprefix:
:idseparator: -
:icons: font
:generated-dir: ../../../target/quarkus-generated-doc
:doc-examples: ./_examples
:imagesdir: ./images
:includes: ./_includes
:toc: preamble
:iokays-category: quarkus
:iokays-path: modules/ROOT/pages/doc-reference.adoc (3)
:diataxis-type: {type} (4)
:categories: contributing (5)
1 | 将文件名用作文档的 ID。 |
2 | 按照 Titles and headings中的指南定义文档标题。 |
3 | Include common document attributes. |
4 | 指定二轴类型: concept 、howto 、reference 或 tutorial 。 |
5 | Categories(以逗号隔开)指定相关信息。 |
Other common document header attributes
:extension-status: preview
-
Use this attribute to flag special types of content. Valid values:
experimental
,preview
,stable
(not usually used), anddeprecated
. :summary: <text>
-
Use the summary to provide a concise (26 words or less) description of the document. The value of this attribute is used in tiles or other descriptions on the website and is not required in newer diataxis-styled docs, as outlined in Abstracts (preamble). If not present, the first sentence of the abstract is automatically used to generate the tile summary.
处理文件范围属性时,请注意空格。文件头以第一个空行结束。
Abstracts (preamble)
正文中的第一段被视为摘要,也称为导言。添加一个简短的描述,以帮助您的受众快速找到并理解页面目的和意图。摘要的第一句提供了摘要,并会自动添加到 Quarkus guides homepage中的瓷砖上。
尝试使用以下准则来编写摘要:
-
*User oriented:*包含用户熟悉的术语和关键字。
-
*Concise:*避免自反表达式和填充词,例如:
-
"This document.."
-
"This tutorial…"
-
"The following…"
-
-
*Brief:*不超过三句话。
确保第一句话解释了内容的价值以及一些好处,且不超过 26 个词。
如果第一句话太长或无法简化为适合网站瓷砖,您可以在文件头属性中定义 `:summary:`属性以达到此目的。有关更多信息,请参阅 Other common document header attributes。
Semantic line breaks
段落、列表和表中的文本应分成更易于查看的部分Rhodes[role="bare"]https://rhodesmill.org/brandon/2012/one-sentence-per-line/]。在每个句子的末尾开始新的一行,并在子句之间的自然中断处拆分句子本身。
Sections
部分标题应采用句子大小写书写,而不是标题大小写。
从标题开始您的文档,在 AsciiDoc 中,标题定义为 = Level 0`标题。在适当的地方,将您的内容划分为子部分,在 AsciiDoc 中,子部分定义为 `== Level 1`到 `====== Level 5
。请勿跳过任何级别。
尽可能避免深度嵌套 (
关于内容类型和组织的更多信息,请参阅 Quarkus documentation content types。 |
Links
通常, url macros优于空白链接或自动链接。为链接提供人类可读文本,尤其是在链接包含在其他文本中间时。
A URL Macro link with attributes
URL 宏还支持 additional attributes,这可能很相关,比如在另一个窗口中打开一个链接。
|
Cross-references
Quarkus 文档是从不同环境中的源构建的。
Cross-reference source attributes
在交叉引用中使用属性, 从而确保我们的文档可以在这些环境中构建。
Attribute | Description |
---|---|
|
相对路径到包含收集的示例源文件的目录 |
|
相对路径到文档指南的源示例 |
|
相对路径到生成的配置 `*.adoc`文件 |
|
相对路径到包含图像的目录 |
|
相对路径到包含局部/可重用内容的目录 |
在交叉引用内容时, 始终使用交叉文档 `xref:`语法并为您链接提供人类可读的标签。
xref:doc-concept.adoc[Quarkus Documentation concepts] 1
1 | 交叉引用从 xref:`开始, 并提供可读的说明: `[Quarkus Documentation concepts] . |
Anchors for in-file and cross-file navigation
-
为创建锚定 ID, 使用小写字符和 `-`分隔每个单词, 并将 ID 括在 `[[]]`中, 如下例所示。[source, asciidoc]
[[title-heading]] == Title heading
-
为调用在同一文件中创建的锚点, 请在 `<<>>`xref 宏中插入锚定 ID。[source, asciidoc]
<<title-heading>>
-
为创建带有自定义 URL 说明示例的锚点, 请指定锚定 ID 并用 `,`分隔所需的名称, 且无空白字符。[source, asciidoc]
<<title-heading,Title heading description that fits the context of your content>>
不要在逐字标题或章节说明中使用 <<>>
格式,例如 [Title heading]
。
-
为从不同文件中调用锚定 ID, 请使用完整文件名和 `#`分隔锚定 ID, 然后指定人类可读的 URL 说明。[source, asciidoc]
xref:<other-file-name>.adoc#title-heading[Title heading]
-
为引用其他文件, 请使用 xref 宏和完整文件名语法, 始终指定人类可读的 URL 说明。[source, asciidoc]
xref:<name-of-the-file>.adoc[Human-readable label]
关于锚定 ID 的更多详情, 请参阅 "为 Quarkus 文档提供支持" 指南的 Cross-reference in-file and cross-file content by using anchors部分。
Cross-reference phrasing
为确保一致性和上下文清晰性, 根据以下指南构建您的交叉引用短语:
-
提供到该部分的直接超链接, 使用上一节中 `xref`的指导。
-
将章节的完整标题规范为句首字母大写。
-
在章节标题前面添加定冠词“the”,并在标题后直接指定“章节”。
-
在指南标题前面添加定冠词“the”和“Quarkus”,除非标题中已包含“Quarkus”一词。
-
将指南标题插入双引号中,并在标题后直接指定“指南”。
-
如果需要上下文,则以以下短语开头:
-
“有关 … 的更多信息”
-
Correct | Incorrect |
---|---|
有关更多信息,请参阅 Quarkus “使用 Hibernate Validator 进行验证”指南的 Configuring the ValidatorFactory 部分。 |
有关更多信息,请参阅 VALIDATION WITH HIBERNATE VALIDATOR guide 的“配置 ValidatorFactory”部分。 |
有关更多信息,请参阅 Quarkus “应用程序数据缓存”指南的 Generating a cache key with CacheKeyGenerator 部分。 |
有关更多信息,请参阅 Generating a cache key with CacheKeyGenerator。 |
有关更多信息,请参阅 Quarkus “OpenID Connect (OIDC) 授权码流机制”指南的 PKCE-related section。 |
有关更多信息,请参阅 OpenID Connect (OIDC) Authorization Code Flow Mechanism。 |
Reference source code
将源代码和示例包含在文档中有很多方法。
最简单的方法是直接在文件中编写,如下所示:
[source,java]
System.out.println("Hello, World!");
在教程等文档中,你可能希望引用定期构建和测试的源代码。Quarkus 文档构建会将 *-examples/yaml
文件中列出的源文件复制到 target/asciidoc/examples
目录中(从项目根目录开始)的扁平结构中。
examples:
- source: path/to/source/file/SomeClassFile.java 1
target: prefix-simplified-unique-filename.java 2
1 | 定义要复制的源路径 |
2 | 在将文件复制到 target/asciidoc/examples 目录时要使用的简化目标文件名。 |
通过这种方式复制的内容由 {code-examples}
源属性引用。源文件中(如果存在)的文本字符串 {{source}}
将被替换为复制中源文件的路径。
-
要复制的源文件是:
integration-tests/micrometer-prometheus/src/main/java/documentation/example/telemetry/micrometer/tutorial/ExampleResource.java
-
我们在文档中要使用的目标文件名是:
telemetry-micrometer-tutorial-example-resource.java
. -
源文件和目标文件在
docs/src/main/asciidoc/telemetry-examples.yaml
中声明:[source, yaml]
examples: - source: integration-tests/micrometer-prometheus/src/main/java/io/quarkus/doc/micrometer/ExampleResource.java target: telemetry-micrometer-tutorial-example-resource.java
-
然后用以下路径引用此源文件中的代码片段:
{code-examples}/telemetry-micrometer-tutorial-example-resource.java
. -
源文件包含以下注释:
// Source: {{source}}
-
复制的文件包含此注释:
// Source: integration-tests/micrometer-prometheus/src/main/java/io/quarkus/doc/micrometer/ExampleResource.java
Document attributes and variables
Categories
Quarkus 文档被归为以下类别。
Category | Description |
---|---|
|
对其他语言(即 Kotlin 和 Scala)的支持 |
|
Quarkus 运行时和生态系统架构 |
|
Business automation integrations |
|
与云服务的集成和支持 |
|
Command Line Applications |
|
与其他语言和框架的兼容性 |
|
有关如何为 Quarkus 做贡献的指南和参考。 |
|
关于 Quarkus 工作原理的信息 |
|
与在 Quarkus 中使用数据源相关的主题 |
|
Getting started materials |
|
对集成扩展(Camel)的支持 |
|
与消息系统(如 Kafka、AMQP 或 RabbitMQ)的集成。 |
|
Miscellaneous |
|
所有与本机可执行文件相关的内容 |
|
用于运行时和应用程序可观测性的扩展和集成 |
|
Security |
|
Serialization |
|
Tooling |
|
Web |
|
Writing Extensions |
通过向 document header 中的 categories 属性行添加至少一类来标记您的内容以提高可查找性。要添加多类,请使用逗号分隔的值。例如:
:categories: contributing, data
Quarkus documentation variables
以下变量将外部化随着时间推移而变化的关键信息。此类信息的引用应使用大括号中的变量,{}
以下表中给出了要使用的外部化变量的完整列表:
Property Name | Value | Description |
---|---|---|
|
|
项目的当前版本。 |
|
|
项目主页的位置。 |
项目 GitHub 组织的位置。 |
||
|
|
Quarkus GitHub URL 通用基本前缀。 |
|
|
文档引用的 |
|
|
Quarkus URL 到主源存档。 |
|
|
Quarkus URL 到主 Blob 源树;用于引用源文件。 |
|
|
Quarkus URL 到主源树根目录;用于引用目录。 |
|
|
Quarkus URL 到问题页。 |
Quarkus URL 到为 Quarkus 提供的容器镜像集。 |
||
URL of our chat. |
||
用于订阅我们的邮件列表的电子邮件。 |
||
Mailing list index page. |
||
|
|
快速入门 URL 通用基本前缀。 |
|
|
文档引用的 |
|
|
快速入门 URL 到主源存档。 |
|
|
快速入门 URL 到主 Blob 源树;用于引用源文件。 |
|
|
快速入门到主源树根的 URL;用于引用目录。 |
|
|
推荐使用的 GraalVM 版本。 |
|
|
要使用的 GraalVM 的构建器镜像标记,例如 |