{"library":"schema-salad","title":"Schema Annotations for Linked Avro Data (SALAD)","description":"Schema Salad (SALAD) is a schema language for describing JSON or YAML structured linked data documents. It provides rules for preprocessing, structural validation, and hyperlink checking, and supports rich data modeling features like inheritance, template specialization, object identifiers, and references. It also enables documentation and code generation, and transformation to RDF, bridging document-oriented data modeling with the Semantic Web. The current version is 8.9.20260327095315, and it appears to have a frequent release cadence, often multiple patch releases per month, indicating active development.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install schema_salad","pip install schema_salad[pycodegen]"],"cli":{"name":"schema-salad-tool","version":"/usr/local/bin/schema-salad-tool Current version: 8.9.20260417192335"}},"imports":["import schema_salad","from schema_salad.schema import load_and_validate","from schema_salad.fetcher import Fetcher"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport json\nfrom schema_salad.schema import load_and_validate\nfrom schema_salad.ref_resolver import Loader\n\n# Define a simple SALAD schema (YAML string)\nschema_content = \"\"\"\n$schema: http://json-schema.org/draft-07/schema#\n$id: https://example.com/myschema.yml\ntype: record\nname: MyRecord\ndocumentRoot: true\nfields:\n  - name: id\n    type: string\n    jsonldPredicate: '@id'\n  - name: message\n    type: string\n  - name: count\n    type: int\n\"\"\"\n\n# Define a document to validate (YAML string)\ndocument_content = \"\"\"\nid: 'my_first_doc'\nmessage: \"Hello, SALAD!\"\ncount: 42\n\"\"\"\n\n# Save schema and document to temporary files\nschema_file = 'temp_schema.yml'\ndocument_file = 'temp_document.yml'\n\nwith open(schema_file, 'w') as f:\n    f.write(schema_content)\nwith open(document_file, 'w') as f:\n    f.write(document_content)\n\n# Create a Loader instance\nloader = Loader({})\n\n# Load and validate the schema itself\nprint(f\"Validating schema: {schema_file}\")\nschema_salad_obj, _, _ = load_and_validate(schema_file, loader)\nprint(\"Schema is valid.\")\n\n# Load and validate the document against the schema\nprint(f\"Validating document: {document_file}\")\ntry:\n    validated_doc, _ = load_and_validate(schema_file, document_file, loader)\n    print(\"Document is valid.\")\n    print(\"Validated document (as Python object):\")\n    print(json.dumps(validated_doc, indent=2))\nexcept Exception as e:\n    print(f\"Document validation failed: {e}\")\n\n# Clean up temporary files\nos.remove(schema_file)\nos.remove(document_file)\n","lang":"python","description":"This quickstart demonstrates how to load and validate a SALAD schema and then use that schema to validate a data document. It creates temporary YAML files for the schema and document content, then uses `schema_salad.schema.load_and_validate` and `schema_salad.ref_resolver.Loader` to perform the validation.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"8.9.20251102115403","pypi_latest":"8.9.20260417192335","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":4.8,"avg_import_s":0.03,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"48.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"52.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.9,"import_time_s":0.01,"mem_mb":1.3,"disk_size":"49M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.5,"import_time_s":0.01,"mem_mb":1.3,"disk_size":"58M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"53.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"58.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.5,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"54M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.2,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"64M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"44.1M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"49.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"45M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"55M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.6,"disk_size":"44.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.6,"disk_size":"49.0M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.2,"import_time_s":0.03,"mem_mb":1.4,"disk_size":"45M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.8,"import_time_s":0.03,"mem_mb":1.4,"disk_size":"55M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"39.2M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"43.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"schema_salad","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.5,"import_time_s":0.01,"mem_mb":1.4,"disk_size":"41M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pycodegen","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.2,"import_time_s":0.01,"mem_mb":1.4,"disk_size":"49M"}]}}