GB/T 7714-2015 Reference Standardization & Link Validation
1. Why This Deserves Its Own Skill
This task has three characteristics: many detailed rules (document type identifiers, citation dates for electronic resources, different treatments for more than three authors), prone to error and silent (a mistake among dozens of strings is hard to spot), and once written incorrectly, hard to detect with the naked eye. Therefore, the focus is not on "remembering the rules" but on the programmatic write, read-back validation, and link verification workflow.
2. Key Points of GB/T 7714-2015 Description
Basic Structure
[Serial Number] Primary Author. Title[Document Type Identifier/Carrier Identifier]. Source, Year, Volume(Issue): Page Numbers.
Common Type Identifiers
| Type | Identifier | Electronic Format |
|---|---|---|
| Regular Book | [M] | [M/OL] |
| Journal Article | [J] | [J/OL] |
| Newspaper Article | [N] | [N/OL] |
| Thesis/Dissertation | [D] | [D/OL] |
| Report | [R] | [R/OL] |
| Standard | [S] | — |
| Electronic Bulletin | [EB/OL] | — |
| Patent | [P] | [P/OL] |
Three Critical Rules
- Electronic resources must include the access date and access path — per Section 4.9 of GB/T 7714-2015. For resources with URL/DOI, the standard format should be
[J/OL]. Journal Name, Year, Volume(Issue): Page Numbers[Access Date]. https://.... Conversely, if the target journal/institution does not require it, removing the access date is acceptable, but you must be aware that this is a trade-off you are making. - When there are more than 3 authors, write "Primary Author, et al." for Chinese references and "Primary Author, et al" for Western references. The standard allows listing all authors, but the style must be consistent throughout the same document.
- Western authors: surname first, given name abbreviated:
Büller HR, Verhamme P, Weitz JI. Do not simply copyBuller HRfrom PubMed and drop the umlaut, and do not writeHR Büller.
3. Link Validation (Core Tool)
# One item per line: URL / DOI / PMID / PMC ID; the script auto-detects the type
python3 scripts/check_refs.py refs.txt
# JSON input, supports explicit type specification
python3 scripts/check_refs.py refs.json --timeout 20 --workers 8
Exit code: 0 = no clearly failed items; 1 = failed items exist.
Supported input formats:
| Input | Parsed Result |
|---|---|
10.1056/NEJMoa2513880 or https://doi.org/... | DOI link |
25482425 (pure number) | PubMed link |
PMC2909362 | PMC link |
https://... or bare domain | Accessed as-is |
Judgment Logic (Important)
The script divides results into three buckets. Do not flag a non-200 response as a failure immediately:
| Bucket | Condition | Action |
|---|---|---|
| Directly accessible | 200 / 203 / 30x | Pass |
| Suspected anti-crawl | 403 / 412 / 429 / 503 / 000 (no fatal error) | Recheck via browser, not a broken link |
| Likely dead | curl clearly reports could not resolve host or similar DNS/certificate errors | Confirm, then replace or delete the link |
Two tested pitfalls:
- PubMed returns 203, which is not a failure. 203 was once treated as a failure, wasting a round of troubleshooting
curl -ssilences DNS errors, causing "domain does not exist" and "network blocked" — two completely different situations — to both show as 000. The script now uses-sSand differentiates via stderr
Access Characteristics of Common Sites
| Site | Characteristics |
|---|---|
nhc.gov.cn (National Health Commission) | curl often returns 412 (anti-crawl), browser can open it normally |
| Wanfang med. domain | Has anti-crawl measures; can instead use d.wanfangdata.com.cn/periodical/<xxx> format |
| CNKI | Usually does not provide direct links; as long as the document can be retrieved, a URL is not strictly necessary |
| NEJM / Lancet | Paywall; curl often returns 403; having the DOI is sufficient |
4. Writing Process: Preventing Character Corruption
This is the most easily overlooked and potentially harmful aspect of this skill.
Do not use long heredocs to write long lists of references directly into docx / json / py files.
In practice, character corruption has occurred multiple times: wrong DOI prefix (e.g., 10.19546 instead of 10.7723), misspelled author names, garbled policy document numbers — and the writing process does not report errors.
Correct approach:
# 1) Construct the reference list as a Python data structure and write it programmatically as a whole block
refs = [
{"id": 1, "text": "Büller HR, ...", "url": "https://...", "doi": "10.1056/..."},
...
]
# 2) Define a verification checklist
must_have = ["25482425", "10.1056/NEJMoa2513880", "Guoweiyifa", "Büller"]
bads = ["10.7723", "management guideline", "ERUOIMMUON"]
# 3) Read back and verify immediately after writing
content = read_back()
missing = [s for s in must_have if s not in content]
leaked = [s for s in bads if s in content]
assert not missing and not leaked, (missing, leaked)
must_have includes key identifiers (PMID, DOI, document numbers, difficult names/places); bads includes known incorrect forms. Both are necessary: the former prevents content loss; the latter prevents the generation of erroneous content.
5. Common Error Checklist (Review One by One)
| Error | Example | Correct Approach |
|---|---|---|
| Merging data from different measurement methods | Combining "2-4% (RCT)" and "2-5% (real-world)" into a single number | Keep the methodological differences and write them separately |
| Incorrect volume/issue/page numbers | Büller written as 2009;361:1722 | Actually from NEJM 2015;372:232-240 |
| Citing a secondary source as primary | Quoting a number from a secondary review but citing the original RCT | Trace back to the original source, or clearly state "quoted from" |
| Policy documents without a source | Five documents cited in the text, but none listed in the reference list | Every policy/report cited in the text must appear in the reference list |
| Title in citation does not match actual publication | The title of reference [1] does not match the actual published article | Verify the title of each entry individually |
| Misspelling of proper nouns | EUROIMMUN written as ERUOIMMUON | Visually verify proper nouns for each entry |
6. Zotero / CSL Related
When you need to adjust the Zotero citation style, it is more controllable to directly modify the .csl file than to use plugin configurations. For example, the GB/T 7714-2015 numeric style includes [Access Date] at the end of each entry. To remove it from the entire style (a one-place change), locate the accessed-date macro and clear its content to <group/>. Also modify id / title / updated to avoid conflicts with the official style.
But remind yourself: GB/T 7714-2015 requires the access date for electronic resources (Section 4.9). Removing it may not comply with the standards of formal journals/dissertations. This is the user's own trade-off, and you should clearly communicate this decision, not silently remove it.
The one remaining access-date fallback in the issued-year macro (using the access year when issued is missing) is reasonable — do not delete it along with the others.
7. Verification Checklist
- The document type identifier of each reference is consistent with whether
/OLis present - The treatment of more than 3 authors is consistent throughout
- Western names: surname first, given name abbreviated; diacritical marks are not lost
- Electronic resources include access date (unless explicitly decided not to) and access path
- DOI prefix is correct; no mixing of full-width and half-width characters
- Links have been run through
check_refs.py; "suspected anti-crawl" items have been rechecked with a browser - Passed the
must_have/badsread-back check after writing - Every reference cited in the text appears in the reference list, and vice versa