SEO. JSONLD. CovidTestingFacility
(SEO v0.3.0-rc.0)
View Source
A CovidTestingFacility is a SEO.JSONLD.MedicalClinic where testing for the COVID-19 Coronavirus
disease is available. If the facility is being made available from an established SEO.JSONLD.Pharmacy, SEO.JSONLD.Hotel, or other
non-medical organization, multiple types can be listed. This makes it easier to re-use existing schema.org information
about that place, e.g. contact info, address, opening hours. Note that in an emergency, such information may not always be reliable.
Helper for building a Schema.org CovidTestingFacility JSON-LD structure.
Summary
Types
A JSON-LD map ready to be nested or rendered. String-keyed, always
includes "@type" set to "CovidTestingFacility", plus any camelCased
field keys the caller provided (see build/1). "@context" is added
at render time by SEO.JSONLD.meta/1 on the top-level node only.
Functions
Build a CovidTestingFacility JSON-LD map.
Types
@type attrs() :: %{ optional(:available_service) => SEO.JSONLD.MedicalProcedure.t() | map() | SEO.JSONLD.MedicalTest.t() | SEO.JSONLD.MedicalTherapy.t(), optional(:medical_specialty) => :anesthesia | :cardiovascular | :community_health | :dentistry | :dermatologic | :dermatology | :diet_nutrition | :emergency | :endocrine | :gastroenterologic | :genetic | :geriatric | :gynecologic | :hematologic | :infectious | :laboratory_science | :midwifery | :musculoskeletal | :neurologic | :nursing | :obstetric | :oncologic | :optometric | :otolaryngologic | :pathology | :pediatric | :pharmacy_specialty | :physiotherapy | :plastic_surgery | :podiatric | :primary_care | :psychiatric | :public_health | :pulmonary | :radiography | :renal | :respiratory_therapy | :rheumatologic | :speech_pathology | :surgical | :toxicologic | :urologic, optional(:health_plan_network_id) => String.t(), optional(:is_accepting_new_patients) => boolean(), optional(:branch_of) => SEO.JSONLD.Organization.t() | map(), optional(:currencies_accepted) => String.t(), optional(:floor_level) => String.t(), optional(:opening_hours) => String.t(), optional(:payment_accepted) => String.t(), optional(:price_range) => String.t(), optional(:accepted_payment_method) => SEO.JSONLD.PaymentMethod.t() | map() | SEO.JSONLD.LoanOrCredit.t() | String.t(), optional(:actionable_feedback_policy) => SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), optional(:address) => String.t() | SEO.JSONLD.PostalAddress.t() | map(), optional(:agent_interaction_statistic) => SEO.JSONLD.InteractionCounter.t() | map(), optional(:aggregate_rating) => SEO.JSONLD.AggregateRating.t() | map(), optional(:alumni) => SEO.JSONLD.Person.t() | map(), optional(:area_served) => SEO.JSONLD.GeoShape.t() | map() | SEO.JSONLD.AdministrativeArea.t() | SEO.JSONLD.Place.t() | String.t(), optional(:award) => String.t(), optional(:awards) => String.t(), optional(:brand) => SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Brand.t(), optional(:company_registration) => SEO.JSONLD.Certification.t() | map(), optional(:contact_point) => SEO.JSONLD.ContactPoint.t() | map(), optional(:contact_points) => SEO.JSONLD.ContactPoint.t() | map(), optional(:corrections_policy) => URI.t() | String.t() | SEO.JSONLD.CreativeWork.t() | map(), optional(:department) => SEO.JSONLD.Organization.t() | map(), optional(:dissolution_date) => Date.t() | String.t(), optional(:diversity_policy) => SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), optional(:diversity_staffing_report) => URI.t() | String.t() | SEO.JSONLD.Article.t() | map(), optional(:duns) => String.t(), optional(:email) => String.t(), optional(:employee) => SEO.JSONLD.Person.t() | map(), optional(:employees) => SEO.JSONLD.Person.t() | map(), optional(:ethics_policy) => SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), optional(:event) => SEO.JSONLD.Event.t() | map(), optional(:events) => SEO.JSONLD.Event.t() | map(), optional(:fax_number) => String.t(), optional(:founder) => SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), optional(:founders) => SEO.JSONLD.Person.t() | map(), optional(:founding_date) => Date.t() | String.t(), optional(:founding_location) => SEO.JSONLD.Place.t() | map(), optional(:funder) => SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), optional(:funding) => SEO.JSONLD.Grant.t() | map(), optional(:global_location_number) => String.t(), optional(:has_certification) => SEO.JSONLD.Certification.t() | map(), optional(:has_credential) => SEO.JSONLD.Credential.t() | map(), optional(:has_gs1_digital_link) => URI.t() | String.t(), optional(:has_member_program) => SEO.JSONLD.MemberProgram.t() | map(), optional(:has_merchant_return_policy) => SEO.JSONLD.MerchantReturnPolicy.t() | map(), optional(:has_offer_catalog) => SEO.JSONLD.OfferCatalog.t() | map(), optional(:has_pos) => SEO.JSONLD.Place.t() | map(), optional(:has_shipping_service) => SEO.JSONLD.ShippingService.t() | map(), optional(:interaction_statistic) => SEO.JSONLD.InteractionCounter.t() | map(), optional(:isic_v4) => String.t(), optional(:iso6523_code) => String.t(), optional(:keywords) => SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(), optional(:knows_about) => String.t() | URI.t() | SEO.JSONLD.Thing.t() | map(), optional(:knows_language) => String.t() | SEO.JSONLD.Language.t() | map(), optional(:legal_address) => SEO.JSONLD.PostalAddress.t() | map(), optional(:legal_name) => String.t(), optional(:legal_representative) => SEO.JSONLD.Person.t() | map(), optional(:lei_code) => String.t(), optional(:location) => String.t() | SEO.JSONLD.PostalAddress.t() | map() | SEO.JSONLD.VirtualLocation.t() | SEO.JSONLD.Place.t(), optional(:logo) => URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(), optional(:makes_offer) => SEO.JSONLD.Offer.t() | map(), optional(:member) => SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), optional(:member_of) => SEO.JSONLD.ProgramMembership.t() | map() | SEO.JSONLD.Organization.t() | SEO.JSONLD.MemberProgramTier.t(), optional(:members) => SEO.JSONLD.Person.t() | map() | SEO.JSONLD.Organization.t(), optional(:naics) => String.t(), optional(:nonprofit_status) => :charitable_incorporated_organization | :de_cooperative_charity | :de_foundation_charity | :de_joint_stock_company_charity | :de_limited_liability_charity | :de_not_registered_association_charity | :de_public_charity | :de_registered_association_charity | :it_cooperative_charity | :it_mutual_aid_charity | :it_social_company_charity | :it_social_promotion_charity | :it_sport_company_charity | :it_volunteer_association_charity | :limited_by_guarantee_charity | :nonprofit501a | :nonprofit501c1 | :nonprofit501c10 | :nonprofit501c11 | :nonprofit501c12 | :nonprofit501c13 | :nonprofit501c14 | :nonprofit501c15 | :nonprofit501c16 | :nonprofit501c17 | :nonprofit501c18 | :nonprofit501c19 | :nonprofit501c2 | :nonprofit501c20 | :nonprofit501c21 | :nonprofit501c22 | :nonprofit501c23 | :nonprofit501c24 | :nonprofit501c25 | :nonprofit501c26 | :nonprofit501c27 | :nonprofit501c28 | :nonprofit501c3 | :nonprofit501c4 | :nonprofit501c5 | :nonprofit501c6 | :nonprofit501c7 | :nonprofit501c8 | :nonprofit501c9 | :nonprofit501d | :nonprofit501e | :nonprofit501f | :nonprofit501k | :nonprofit501n | :nonprofit501q | :nonprofit527 | :nonprofit_anbi | :nonprofit_sbbi | :uk_trust | :unincorporated_association_charity, optional(:number_of_employees) => SEO.JSONLD.QuantitativeValue.t() | map(), optional(:ownership_funding_info) => SEO.JSONLD.AboutPage.t() | map() | SEO.JSONLD.CreativeWork.t() | String.t() | URI.t(), optional(:owns) => SEO.JSONLD.Thing.t() | map(), optional(:parent_organization) => SEO.JSONLD.Organization.t() | map(), optional(:publishing_principles) => SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), optional(:review) => SEO.JSONLD.Review.t() | map(), optional(:reviews) => SEO.JSONLD.Review.t() | map(), optional(:seeks) => SEO.JSONLD.Demand.t() | map(), optional(:service_area) => SEO.JSONLD.GeoShape.t() | map() | SEO.JSONLD.AdministrativeArea.t() | SEO.JSONLD.Place.t(), optional(:skills) => String.t() | SEO.JSONLD.DefinedTerm.t() | map(), optional(:slogan) => String.t(), optional(:sponsor) => SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), optional(:sub_organization) => SEO.JSONLD.Organization.t() | map(), optional(:tax_id) => String.t(), optional(:telephone) => String.t(), optional(:unnamed_sources_policy) => SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), optional(:vat_id) => String.t(), optional(:additional_property) => SEO.JSONLD.PropertyValue.t() | map(), optional(:amenity_feature) => SEO.JSONLD.LocationFeatureSpecification.t() | map(), optional(:branch_code) => String.t(), optional(:contained_in) => SEO.JSONLD.Place.t() | map(), optional(:contained_in_place) => SEO.JSONLD.Place.t() | map(), optional(:contains_place) => SEO.JSONLD.Place.t() | map(), optional(:geo) => SEO.JSONLD.GeoShape.t() | map() | SEO.JSONLD.GeoCoordinates.t(), optional(:geo_contains) => SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), optional(:geo_covered_by) => SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), optional(:geo_covers) => SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), optional(:geo_crosses) => SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), optional(:geo_disjoint) => SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), optional(:geo_equals) => SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), optional(:geo_intersects) => SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), optional(:geo_overlaps) => SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), optional(:geo_touches) => SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), optional(:geo_within) => SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), optional(:has_drive_through_service) => boolean(), optional(:has_map) => URI.t() | String.t() | SEO.JSONLD.Map.t() | map(), optional(:is_accessible_for_free) => boolean(), optional(:latitude) => String.t() | number(), optional(:longitude) => String.t() | number(), optional(:map) => URI.t() | String.t(), optional(:maps) => URI.t() | String.t(), optional(:maximum_attendee_capacity) => integer(), optional(:opening_hours_specification) => SEO.JSONLD.OpeningHoursSpecification.t() | map(), optional(:photo) => SEO.JSONLD.Photograph.t() | map() | SEO.JSONLD.ImageObject.t(), optional(:photos) => SEO.JSONLD.Photograph.t() | map() | SEO.JSONLD.ImageObject.t(), optional(:public_access) => boolean(), optional(:smoking_allowed) => boolean(), optional(:special_opening_hours_specification) => SEO.JSONLD.OpeningHoursSpecification.t() | map(), optional(:tour_booking_page) => URI.t() | String.t(), optional(:additional_type) => String.t() | URI.t(), optional(:alternate_name) => String.t(), optional(:description) => SEO.JSONLD.TextObject.t() | map() | String.t(), optional(:disambiguating_description) => String.t(), optional(:identifier) => String.t() | URI.t() | SEO.JSONLD.PropertyValue.t() | map(), optional(:image) => URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(), optional(:main_entity_of_page) => SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), optional(:name) => String.t(), optional(:owner) => SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), optional(:potential_action) => SEO.JSONLD.Action.t() | map(), optional(:same_as) => URI.t() | String.t(), optional(:subject_of) => SEO.JSONLD.Event.t() | map() | SEO.JSONLD.CreativeWork.t(), optional(:url) => URI.t() | String.t() } | [ available_service: SEO.JSONLD.MedicalProcedure.t() | map() | SEO.JSONLD.MedicalTest.t() | SEO.JSONLD.MedicalTherapy.t(), medical_specialty: :anesthesia | :cardiovascular | :community_health | :dentistry | :dermatologic | :dermatology | :diet_nutrition | :emergency | :endocrine | :gastroenterologic | :genetic | :geriatric | :gynecologic | :hematologic | :infectious | :laboratory_science | :midwifery | :musculoskeletal | :neurologic | :nursing | :obstetric | :oncologic | :optometric | :otolaryngologic | :pathology | :pediatric | :pharmacy_specialty | :physiotherapy | :plastic_surgery | :podiatric | :primary_care | :psychiatric | :public_health | :pulmonary | :radiography | :renal | :respiratory_therapy | :rheumatologic | :speech_pathology | :surgical | :toxicologic | :urologic, health_plan_network_id: String.t(), is_accepting_new_patients: boolean(), branch_of: SEO.JSONLD.Organization.t() | map(), currencies_accepted: String.t(), floor_level: String.t(), opening_hours: String.t(), payment_accepted: String.t(), price_range: String.t(), accepted_payment_method: SEO.JSONLD.PaymentMethod.t() | map() | SEO.JSONLD.LoanOrCredit.t() | String.t(), actionable_feedback_policy: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), address: String.t() | SEO.JSONLD.PostalAddress.t() | map(), agent_interaction_statistic: SEO.JSONLD.InteractionCounter.t() | map(), aggregate_rating: SEO.JSONLD.AggregateRating.t() | map(), alumni: SEO.JSONLD.Person.t() | map(), area_served: SEO.JSONLD.GeoShape.t() | map() | SEO.JSONLD.AdministrativeArea.t() | SEO.JSONLD.Place.t() | String.t(), award: String.t(), awards: String.t(), brand: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Brand.t(), company_registration: SEO.JSONLD.Certification.t() | map(), contact_point: SEO.JSONLD.ContactPoint.t() | map(), contact_points: SEO.JSONLD.ContactPoint.t() | map(), corrections_policy: URI.t() | String.t() | SEO.JSONLD.CreativeWork.t() | map(), department: SEO.JSONLD.Organization.t() | map(), dissolution_date: Date.t() | String.t(), diversity_policy: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), diversity_staffing_report: URI.t() | String.t() | SEO.JSONLD.Article.t() | map(), duns: String.t(), email: String.t(), employee: SEO.JSONLD.Person.t() | map(), employees: SEO.JSONLD.Person.t() | map(), ethics_policy: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), event: SEO.JSONLD.Event.t() | map(), events: SEO.JSONLD.Event.t() | map(), fax_number: String.t(), founder: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), founders: SEO.JSONLD.Person.t() | map(), founding_date: Date.t() | String.t(), founding_location: SEO.JSONLD.Place.t() | map(), funder: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), funding: SEO.JSONLD.Grant.t() | map(), global_location_number: String.t(), has_certification: SEO.JSONLD.Certification.t() | map(), has_credential: SEO.JSONLD.Credential.t() | map(), has_gs1_digital_link: URI.t() | String.t(), has_member_program: SEO.JSONLD.MemberProgram.t() | map(), has_merchant_return_policy: SEO.JSONLD.MerchantReturnPolicy.t() | map(), has_offer_catalog: SEO.JSONLD.OfferCatalog.t() | map(), has_pos: SEO.JSONLD.Place.t() | map(), has_shipping_service: SEO.JSONLD.ShippingService.t() | map(), interaction_statistic: SEO.JSONLD.InteractionCounter.t() | map(), isic_v4: String.t(), iso6523_code: String.t(), keywords: SEO.JSONLD.DefinedTerm.t() | map() | String.t() | URI.t(), knows_about: String.t() | URI.t() | SEO.JSONLD.Thing.t() | map(), knows_language: String.t() | SEO.JSONLD.Language.t() | map(), legal_address: SEO.JSONLD.PostalAddress.t() | map(), legal_name: String.t(), legal_representative: SEO.JSONLD.Person.t() | map(), lei_code: String.t(), location: String.t() | SEO.JSONLD.PostalAddress.t() | map() | SEO.JSONLD.VirtualLocation.t() | SEO.JSONLD.Place.t(), logo: URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(), makes_offer: SEO.JSONLD.Offer.t() | map(), member: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), member_of: SEO.JSONLD.ProgramMembership.t() | map() | SEO.JSONLD.Organization.t() | SEO.JSONLD.MemberProgramTier.t(), members: SEO.JSONLD.Person.t() | map() | SEO.JSONLD.Organization.t(), naics: String.t(), nonprofit_status: :charitable_incorporated_organization | :de_cooperative_charity | :de_foundation_charity | :de_joint_stock_company_charity | :de_limited_liability_charity | :de_not_registered_association_charity | :de_public_charity | :de_registered_association_charity | :it_cooperative_charity | :it_mutual_aid_charity | :it_social_company_charity | :it_social_promotion_charity | :it_sport_company_charity | :it_volunteer_association_charity | :limited_by_guarantee_charity | :nonprofit501a | :nonprofit501c1 | :nonprofit501c10 | :nonprofit501c11 | :nonprofit501c12 | :nonprofit501c13 | :nonprofit501c14 | :nonprofit501c15 | :nonprofit501c16 | :nonprofit501c17 | :nonprofit501c18 | :nonprofit501c19 | :nonprofit501c2 | :nonprofit501c20 | :nonprofit501c21 | :nonprofit501c22 | :nonprofit501c23 | :nonprofit501c24 | :nonprofit501c25 | :nonprofit501c26 | :nonprofit501c27 | :nonprofit501c28 | :nonprofit501c3 | :nonprofit501c4 | :nonprofit501c5 | :nonprofit501c6 | :nonprofit501c7 | :nonprofit501c8 | :nonprofit501c9 | :nonprofit501d | :nonprofit501e | :nonprofit501f | :nonprofit501k | :nonprofit501n | :nonprofit501q | :nonprofit527 | :nonprofit_anbi | :nonprofit_sbbi | :uk_trust | :unincorporated_association_charity, number_of_employees: SEO.JSONLD.QuantitativeValue.t() | map(), ownership_funding_info: SEO.JSONLD.AboutPage.t() | map() | SEO.JSONLD.CreativeWork.t() | String.t() | URI.t(), owns: SEO.JSONLD.Thing.t() | map(), parent_organization: SEO.JSONLD.Organization.t() | map(), publishing_principles: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), review: SEO.JSONLD.Review.t() | map(), reviews: SEO.JSONLD.Review.t() | map(), seeks: SEO.JSONLD.Demand.t() | map(), service_area: SEO.JSONLD.GeoShape.t() | map() | SEO.JSONLD.AdministrativeArea.t() | SEO.JSONLD.Place.t(), skills: String.t() | SEO.JSONLD.DefinedTerm.t() | map(), slogan: String.t(), sponsor: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), sub_organization: SEO.JSONLD.Organization.t() | map(), tax_id: String.t(), telephone: String.t(), unnamed_sources_policy: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), vat_id: String.t(), additional_property: SEO.JSONLD.PropertyValue.t() | map(), amenity_feature: SEO.JSONLD.LocationFeatureSpecification.t() | map(), branch_code: String.t(), contained_in: SEO.JSONLD.Place.t() | map(), contained_in_place: SEO.JSONLD.Place.t() | map(), contains_place: SEO.JSONLD.Place.t() | map(), geo: SEO.JSONLD.GeoShape.t() | map() | SEO.JSONLD.GeoCoordinates.t(), geo_contains: SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), geo_covered_by: SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), geo_covers: SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), geo_crosses: SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), geo_disjoint: SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), geo_equals: SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), geo_intersects: SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), geo_overlaps: SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), geo_touches: SEO.JSONLD.Place.t() | map() | SEO.JSONLD.GeospatialGeometry.t(), geo_within: SEO.JSONLD.GeospatialGeometry.t() | map() | SEO.JSONLD.Place.t(), has_drive_through_service: boolean(), has_map: URI.t() | String.t() | SEO.JSONLD.Map.t() | map(), is_accessible_for_free: boolean(), latitude: String.t() | number(), longitude: String.t() | number(), map: URI.t() | String.t(), maps: URI.t() | String.t(), maximum_attendee_capacity: integer(), opening_hours_specification: SEO.JSONLD.OpeningHoursSpecification.t() | map(), photo: SEO.JSONLD.Photograph.t() | map() | SEO.JSONLD.ImageObject.t(), photos: SEO.JSONLD.Photograph.t() | map() | SEO.JSONLD.ImageObject.t(), public_access: boolean(), smoking_allowed: boolean(), special_opening_hours_specification: SEO.JSONLD.OpeningHoursSpecification.t() | map(), tour_booking_page: URI.t() | String.t(), additional_type: String.t() | URI.t(), alternate_name: String.t(), description: SEO.JSONLD.TextObject.t() | map() | String.t(), disambiguating_description: String.t(), identifier: String.t() | URI.t() | SEO.JSONLD.PropertyValue.t() | map(), image: URI.t() | String.t() | SEO.JSONLD.ImageObject.t() | map(), main_entity_of_page: SEO.JSONLD.CreativeWork.t() | map() | URI.t() | String.t(), name: String.t(), owner: SEO.JSONLD.Organization.t() | map() | SEO.JSONLD.Person.t(), potential_action: SEO.JSONLD.Action.t() | map(), same_as: URI.t() | String.t(), subject_of: SEO.JSONLD.Event.t() | map() | SEO.JSONLD.CreativeWork.t(), url: URI.t() | String.t() ]
A JSON-LD map ready to be nested or rendered. String-keyed, always
includes "@type" set to "CovidTestingFacility", plus any camelCased
field keys the caller provided (see build/1). "@context" is added
at render time by SEO.JSONLD.meta/1 on the top-level node only.