Models · Limits · Publication checklist · Sample report
English, international educational JSON-LD examples for Person, Organization, ProfilePage and Article, with an offline Python structural linter. Keep entity identifiers stable and relationships understandable across pages.
A clean report means only that this educational subset lint found no issues. It does not establish full schema.org validity, Google rich result eligibility, factual accuracy, rankings or AI citations. No network access, packages, API keys, telemetry or special “AI schema” are involved.
Actual browser capture of the suite explorer; fictional observations. Plays once. Static view · Text walkthrough.
Start your audit · Reusable GitHub Action · Real first-party technical baseline.
Your task: Model connected identities and publication relationships.
Method → · Audit → · Structure → · Measure →
Next step: ai-citation-tracker — For a real study, collect dated answers and explicit citations under a protocol.
Try it: complete fictional workflow · this tool’s inputs, command and expected output. All scenario records and engine answers are invented; generated reports are real CLI output.
Python CI: 3.10 / 3.13. The badge links to the real workflow; it describes automated checks, not ranking, factual accuracy or AI visibility. Map of all eight resources · Open an issue
Python 3.10+ supported; standard library only. Also exercised locally on Python 3.9.6.
python3 validate.py examples/04-article.json --output-dir reports
python3 validate.py --all examples --output-dir reports
python3 -m unittest discover -s tests -vOpen reports/report.html in a browser or read reports/report.json. Each run replaces those two files. Input/output collisions, including resolved paths, symlinks and hardlinks, are checked before writing. Keep a separate report directory; do not change file links during a run.
Exit codes: 0 no structural errors (warnings may exist); 1 lint errors, including syntax/duplicate keys/unreadable input; 2 command usage, output failure or file collision. Recommendations are warnings, never asserted schema.org legal requirements.
All people, organizations, publishing activity and copy are fictional. example.org is a reserved domain. Do not deploy the examples unchanged.
| Example | What to learn |
|---|---|
| Person | Stable person ID independent of their profile page |
| Organization | Separate publisher identity |
| Person profile | ProfilePage mainEntity and publisher |
| Article | author, publisher and mainEntityOfPage |
| Organization profile | A profile describing an organization |
The visible-copy companion explains the fictional page content these models reflect; it is not a deployed site. Definitions repeat deliberately: each file is independently linted, reusing the same identity IDs.
Strict JSON parsing, duplicate keys, exact supported context, graph shape, duplicate graph IDs, type representation, selected HTTP(S) URL properties, local references and selected relationship targets. Missing recommended fields are warnings. Unknown properties are not vocabulary-validated. Read the complete boundary before interpreting any report.
The checked-in JSON and standalone HTML were generated by python3 validate.py --all examples --output-dir reports. Output has no timestamps, remote resources or machine-specific paths when invoked as shown. CI compares regenerated files byte for byte.
Entity Consistency Auditor compares supplied entity records; Authority Evidence Mapper organizes claim evidence. See the method and boundaries. These links imply no integration or data collection. This independent project implies no employer, Google or schema.org endorsement.
Official references checked 2026-11-01 are in the modeling guide. See CONTRIBUTING, CHANGELOG and LICENSE. Code/tests/CI: MIT. Docs, examples, reports and original banner: CC BY 4.0.
