{
    "id": "https://schema.org.uk/schemas/roofing-service/1.0",
    "version": "1.0",
    "name": "Roofing Service Schema",
    "description": "The Roofing Service Schema organises roofing service identity, contact, location, opening hours, roofing, and client information into a consistent format, using Schema.org vocabulary where applicable.",
    "sections": [
        {
            "name": "Identity",
            "key": "identity",
            "attributes": [
                {
                    "name": "roofingservice.id",
                    "label": "Identifier",
                    "description": "The permanent unique identifier already assigned to the roofing service. JSON-LD states the same value as @id. The identifier is not calculated from the name, telephone, or address.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": true,
                    "schema_org": "@id"
                },
                {
                    "name": "roofingservice.title",
                    "label": "Title",
                    "description": "The name of the roofing service.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": true,
                    "schema_org": "name"
                },
                {
                    "name": "roofingservice.description",
                    "label": "Description",
                    "description": "A text description of the roofing service.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "description"
                }
            ]
        },
        {
            "name": "Incorporation details",
            "key": "company",
            "attributes": [
                {
                    "name": "roofingservice.company.name",
                    "label": "Company name",
                    "description": "The registered company name, when the business is registered at Companies House and states that name. A missing value stays unknown. This is not the trading name. JSON-LD uses legalName.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "legalName",
                    "component": "https://schema.org.uk/schemas/components/company"
                },
                {
                    "name": "roofingservice.company.number",
                    "label": "Company number",
                    "description": "The company number, when the business is registered at Companies House and states that number. A missing value stays unknown. This is not a VAT number. When a number is stated, JSON-LD uses a PropertyValue named companyNumber.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "additionalProperty",
                    "component": "https://schema.org.uk/schemas/components/company"
                },
                {
                    "name": "roofingservice.company.incorporated_on",
                    "label": "Incorporation date",
                    "description": "The incorporation date, when the business is registered at Companies House and states that date. A missing date stays unknown. JSON-LD uses foundingDate for that stated date.",
                    "data_type": "date",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "foundingDate",
                    "component": "https://schema.org.uk/schemas/components/company"
                },
                {
                    "name": "roofingservice.company.vat",
                    "label": "VAT number",
                    "description": "The VAT number, when the business is registered for VAT and states that number. A missing value stays unknown. This is not the company number. JSON-LD uses vatID.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "vatID",
                    "component": "https://schema.org.uk/schemas/components/company"
                }
            ]
        },
        {
            "name": "Contact",
            "key": "contact",
            "attributes": [
                {
                    "name": "roofingservice.contact.phone",
                    "label": "Phone",
                    "description": "The telephone number of the roofing service.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "telephone",
                    "component": "https://schema.org.uk/schemas/components/contact"
                },
                {
                    "name": "roofingservice.contact.url",
                    "label": "Url",
                    "description": "The website address of the roofing service.",
                    "data_type": "url",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "url",
                    "component": "https://schema.org.uk/schemas/components/contact"
                },
                {
                    "name": "roofingservice.contact.social",
                    "label": "Social profiles",
                    "description": "Official profiles of the business on third-party social platforms. Excludes the business's own website (see contact.url) and booking or review listings. Each entry has a platform and the absolute https address of the business's own profile. The platform is facebook, instagram, x, linkedin, tiktok, youtube, threads, pinterest, or other. A platform is listed once, except other. The address must use that platform's site. A share or post address is omitted. An entry may also record source, date, confidence, and verification status. JSON-LD uses sameAs for each accepted address.",
                    "data_type": "list",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "sameAs",
                    "component": "https://schema.org.uk/schemas/components/contact",
                    "entry": {
                        "data_type": "object",
                        "fields": [
                            {
                                "name": "platform",
                                "data_type": "text",
                                "values": [
                                    "facebook",
                                    "instagram",
                                    "x",
                                    "linkedin",
                                    "tiktok",
                                    "youtube",
                                    "threads",
                                    "pinterest",
                                    "other"
                                ]
                            },
                            {
                                "name": "url",
                                "data_type": "url"
                            },
                            {
                                "name": "source",
                                "data_type": "text"
                            },
                            {
                                "name": "date",
                                "data_type": "date"
                            },
                            {
                                "name": "confidence",
                                "data_type": "text",
                                "values": [
                                    "high",
                                    "medium",
                                    "low"
                                ]
                            },
                            {
                                "name": "verification_status",
                                "data_type": "text",
                                "values": [
                                    "stated",
                                    "verified",
                                    "unknown"
                                ]
                            }
                        ]
                    }
                },
                {
                    "name": "roofingservice.contact.listings",
                    "label": "Booking and review listings",
                    "description": "Profiles of the business on booking and review platforms. Excludes the business's own website (see contact.url) and official social profiles (see contact.social). Each entry has a platform and the absolute https address of the business's own profile. The platform is tripadvisor, booking_com, google_business_profile, opentable, or other. A platform is listed once, except other. The address must use that platform's site. A share or post address is omitted. An entry may also record source, date, confidence, and verification status. JSON-LD uses sameAs for each accepted address.",
                    "data_type": "list",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "sameAs",
                    "component": "https://schema.org.uk/schemas/components/contact",
                    "entry": {
                        "data_type": "object",
                        "fields": [
                            {
                                "name": "platform",
                                "data_type": "text",
                                "values": [
                                    "tripadvisor",
                                    "booking_com",
                                    "google_business_profile",
                                    "opentable",
                                    "other"
                                ]
                            },
                            {
                                "name": "url",
                                "data_type": "url"
                            },
                            {
                                "name": "source",
                                "data_type": "text"
                            },
                            {
                                "name": "date",
                                "data_type": "date"
                            },
                            {
                                "name": "confidence",
                                "data_type": "text",
                                "values": [
                                    "high",
                                    "medium",
                                    "low"
                                ]
                            },
                            {
                                "name": "verification_status",
                                "data_type": "text",
                                "values": [
                                    "stated",
                                    "verified",
                                    "unknown"
                                ]
                            }
                        ]
                    }
                },
                {
                    "name": "roofingservice.contact.email",
                    "label": "Email",
                    "description": "An email address for the roofing service, when one is stated. Leave it empty when none is known.",
                    "data_type": "email",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "email",
                    "component": "https://schema.org.uk/schemas/components/contact"
                }
            ]
        },
        {
            "name": "Location and coordinates",
            "key": "location_and_coordinates",
            "attributes": [
                {
                    "name": "roofingservice.location.address",
                    "label": "Address",
                    "description": "The postal address of the roofing service. The original address line stays intact.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "address"
                },
                {
                    "name": "roofingservice.location.latitude",
                    "label": "Latitude",
                    "description": "The WGS84 latitude of the roofing service.",
                    "data_type": "number",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "latitude"
                },
                {
                    "name": "roofingservice.location.longitude",
                    "label": "Longitude",
                    "description": "The WGS84 longitude of the roofing service. A coordinate pair is required before JSON-LD includes GeoCoordinates.",
                    "data_type": "number",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "longitude"
                },
                {
                    "name": "roofingservice.location.postcode",
                    "label": "Postcode",
                    "description": "The UK postcode when one postcode is present in the postal address.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "postalCode",
                    "component": "https://schema.org.uk/schemas/components/address"
                },
                {
                    "name": "roofingservice.location.street",
                    "label": "Street",
                    "description": "The street line when the postal address separates it from the town. A borough is not the street.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "streetAddress",
                    "component": "https://schema.org.uk/schemas/components/address"
                },
                {
                    "name": "roofingservice.location.locality",
                    "label": "Locality",
                    "description": "The town or city when the postal address states it as its own part. A borough is not the locality.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "addressLocality",
                    "component": "https://schema.org.uk/schemas/components/address"
                },
                {
                    "name": "roofingservice.location.region",
                    "label": "Region",
                    "description": "The county or region when the postal address states it as its own part. A media-market code is not a region and is left empty.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "addressRegion",
                    "component": "https://schema.org.uk/schemas/components/address"
                },
                {
                    "name": "roofingservice.location.country",
                    "label": "Country",
                    "description": "The country when the address states it. A two-letter country code is recorded as the country name. Leave it empty when the country is not stated.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "addressCountry",
                    "component": "https://schema.org.uk/schemas/components/address"
                }
            ]
        },
        {
            "name": "Opening hours",
            "key": "opening_hours",
            "attributes": [
                {
                    "name": "roofingservice.hours.opening",
                    "label": "Opening hours",
                    "description": "The regular opening hours when a weekly timetable states each open day and its opening and closing times. A current open or closed status is not opening hours. Busy periods are not opening hours. A day with no stated times is left empty.",
                    "data_type": "object",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "openingHoursSpecification"
                }
            ]
        },
        {
            "name": "Images",
            "key": "images",
            "attributes": [
                {
                    "name": "roofingservice.image.logo",
                    "label": "Logo",
                    "description": "The address of the roofing service logo, when one is stated. A missing address is omitted.",
                    "data_type": "url",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "logo"
                },
                {
                    "name": "roofingservice.image.main",
                    "label": "Main image",
                    "description": "The address of the main image of the roofing service, when one is stated. A count of photographs is not an image. A missing address is omitted.",
                    "data_type": "url",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "image",
                    "component": "https://schema.org.uk/schemas/components/image"
                }
            ]
        },
        {
            "name": "Reputation",
            "key": "review_statistics",
            "attributes": [
                {
                    "name": "roofingservice.review.rating",
                    "label": "Review rating",
                    "description": "A review score from one provider. It is not a qualification or an award. A scale is recorded only when that provider states it. The score stays in the native record and is not copied into the core business JSON-LD.",
                    "data_type": "number",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "ratingValue",
                    "component": "https://schema.org.uk/schemas/components/reputation"
                },
                {
                    "name": "roofingservice.review.count",
                    "label": "Review count",
                    "description": "The number of reviews accompanying a review rating from the same provider. It is not calculated from another provider.",
                    "data_type": "integer",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "reviewCount",
                    "component": "https://schema.org.uk/schemas/components/reputation"
                },
                {
                    "name": "roofingservice.review.rating_count",
                    "label": "Rating count",
                    "description": "The number of ratings when the provider states it separately from the number of reviews. It is not calculated from the distribution.",
                    "data_type": "integer",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "ratingCount",
                    "component": "https://schema.org.uk/schemas/components/reputation"
                },
                {
                    "name": "roofingservice.review.distribution",
                    "label": "Rating distribution",
                    "description": "Numbers recorded against scores 1 to 5. They are not the review count. Schema.org has no single property for the five counts, so this stays unmapped.",
                    "data_type": "object",
                    "scope": "roofingservice",
                    "required": false,
                    "component": "https://schema.org.uk/schemas/components/reputation"
                },
                {
                    "name": "roofingservice.review.scale",
                    "label": "Rating scale",
                    "description": "The lowest and highest points of a review scale, when the scale is stated. Schema.org records those points as separate properties, so this attribute is not given one of them.",
                    "data_type": "object",
                    "scope": "roofingservice",
                    "required": false,
                    "component": "https://schema.org.uk/schemas/components/reputation"
                },
                {
                    "name": "roofingservice.review.provider",
                    "label": "Review provider",
                    "description": "The organisation that published these figures. Figures from another provider are a separate observation and are not averaged together.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "component": "https://schema.org.uk/schemas/components/reputation"
                },
                {
                    "name": "roofingservice.review.observed_on",
                    "label": "Observation date",
                    "description": "The date on which these figures were observed, when that date is stated.",
                    "data_type": "date",
                    "scope": "roofingservice",
                    "required": false,
                    "component": "https://schema.org.uk/schemas/components/reputation"
                }
            ]
        },
        {
            "name": "Price",
            "key": "price",
            "attributes": [
                {
                    "name": "roofingservice.price_range",
                    "label": "Price level",
                    "description": "A price indication using £, ££, or £££. Leave it empty when none is stated. This is not a fee.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "priceRange"
                }
            ]
        },
        {
            "name": "Roofing",
            "key": "services",
            "attributes": [
                {
                    "name": "roofingservice.service.repair",
                    "label": "Roof repair",
                    "description": "Whether the roofing service repairs a roof, including a tile. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.reroof",
                    "label": "Re-roofing",
                    "description": "Whether the roofing service replaces a roof. Repairing a roof is separate. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.emergency",
                    "label": "Emergency call-out",
                    "description": "Whether the roofing service attends an emergency. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.flat",
                    "label": "Flat roof installation and repair",
                    "description": "Whether the roofing service installs or repairs a flat roof. A rubber, fibreglass, steel, or green roof system is separate. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.chimney",
                    "label": "Chimney removal, repair and repointing",
                    "description": "Whether the roofing service removes, repairs, or repoints a chimney, including a cowl and clearing weeds from a chimney. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.guttering",
                    "label": "Guttering",
                    "description": "Whether the roofing service installs or cleans guttering. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.soffits",
                    "label": "Soffits and fascias",
                    "description": "Whether the roofing service works on soffits and fascias. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.lead",
                    "label": "Lead work",
                    "description": "Whether the roofing service carries out lead work. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.waste",
                    "label": "Waste removal",
                    "description": "Whether the roofing service removes waste from the job. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.ridge",
                    "label": "Ridge tile recementing",
                    "description": "Whether the roofing service recements ridge tiles or repoints mortar. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.scaffolding",
                    "label": "Scaffolding arranged",
                    "description": "Whether the roofing service arranges scaffolding or powered access. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.leaks",
                    "label": "Leak diagnosis and advice",
                    "description": "Whether the roofing service finds the cause of a leak and advises on it. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.matching",
                    "label": "Roof tile matching",
                    "description": "Whether the roofing service matches a tile to an existing roof. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.survey",
                    "label": "Site survey",
                    "description": "Whether the roofing service surveys a roof, including a survey from a drone. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.felt",
                    "label": "Felt membrane installation",
                    "description": "Whether the roofing service installs a felt membrane. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.verge",
                    "label": "Dry verge and ridge systems",
                    "description": "Whether the roofing service fits a dry verge or ridge system, including replacing a verge. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.slate",
                    "label": "Slate roofing",
                    "description": "Whether the roofing service works in slate. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.skylight",
                    "label": "Skylight and roof window installation",
                    "description": "Whether the roofing service installs a skylight, a roof window, or a sun tunnel. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.storm",
                    "label": "Storm damage repair",
                    "description": "Whether the roofing service repairs storm damage, including help with an insurance claim. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.insulation",
                    "label": "Loft insulation and insulated roofing",
                    "description": "Whether the roofing service installs loft insulation or an insulated roof. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.windows",
                    "label": "Windows and doors installation",
                    "description": "Whether the roofing service installs windows or doors, including a double-glazed unit. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.solar",
                    "label": "Solar panel roof work",
                    "description": "Whether the roofing service carries out roof work for solar panels, including bird protection around them. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.cladding",
                    "label": "Cladding installation",
                    "description": "Whether the roofing service installs cladding. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.systems",
                    "label": "Rubber, fibreglass and other flat roof systems",
                    "description": "Whether the roofing service installs a rubber, fibreglass, steel, or green roof. A general flat roof is separate. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.conservatory",
                    "label": "Conservatory work",
                    "description": "Whether the roofing service works on a conservatory roof. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                },
                {
                    "name": "roofingservice.service.asbestos",
                    "label": "Asbestos roof removal",
                    "description": "Whether the roofing service removes an asbestos roof. JSON-LD includes a Service of this name in hasOfferCatalog only when the value is stated as offered. An explicit no and an unknown value add nothing.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "Service"
                }
            ]
        },
        {
            "name": "Roofing details",
            "key": "details",
            "attributes": [
                {
                    "name": "roofingservice.details.quotes",
                    "label": "Free quotes",
                    "description": "Whether the roofing service provides a quote without a charge. A missing value stays unknown. This is not the price level. When a value is stated, JSON-LD uses a PropertyValue named freeQuotes.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "additionalProperty"
                },
                {
                    "name": "roofingservice.details.guarantee",
                    "label": "Guarantee or warranty",
                    "description": "The guarantee or warranty the roofing service states. A missing value is unknown. When a value is stated, JSON-LD uses a PropertyValue named guarantee.",
                    "data_type": "text",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "additionalProperty"
                },
                {
                    "name": "roofingservice.details.photos",
                    "label": "Before and after photos",
                    "description": "Whether the roofing service provides photographs of the work, including a way to follow progress. A missing value stays unknown. When a value is stated, JSON-LD uses a PropertyValue named progressPhotos.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "additionalProperty"
                },
                {
                    "name": "roofingservice.details.customers",
                    "label": "Customer type",
                    "description": "Whether the roofing service states that it works for residential customers, commercial customers, or both. The recorded values are Residential and Commercial. An empty list is omitted. When a value is stated, JSON-LD uses a PropertyValue named customerType.",
                    "data_type": "list",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "additionalProperty"
                },
                {
                    "name": "roofingservice.details.scheme",
                    "label": "Competent Roofer scheme",
                    "description": "Whether the roofing service is in the Competent Roofer scheme. A missing value stays unknown. When a value is stated, JSON-LD uses a PropertyValue named competentRooferScheme.",
                    "data_type": "boolean",
                    "scope": "roofingservice",
                    "required": false,
                    "schema_org": "additionalProperty"
                }
            ]
        }
    ],
    "components": [
        {
            "id": "https://schema.org.uk/schemas/components/address",
            "name": "Address",
            "description": "A postal address other category schemas can reuse. The original address line stays intact. Missing parts are left empty.",
            "fields": [
                "address",
                "postcode",
                "street",
                "locality",
                "region",
                "country"
            ]
        },
        {
            "id": "https://schema.org.uk/schemas/components/contact",
            "name": "Contact",
            "description": "Telephone, website, social profiles, booking and review listings, and email other category schemas can reuse. Each value is optional. A missing value stays empty.",
            "fields": [
                "phone",
                "url",
                "social",
                "listings",
                "email"
            ]
        },
        {
            "id": "https://schema.org.uk/schemas/components/company",
            "name": "Incorporation details",
            "description": "Registered company name, company number, and incorporation date when a business is registered at Companies House, and a VAT number when it is registered for VAT. Each value is included only when it is stated. A missing value stays unknown. Other category schemas reuse these fields.",
            "fields": [
                "name",
                "number",
                "incorporated_on",
                "vat"
            ]
        },
        {
            "id": "https://schema.org.uk/schemas/components/image",
            "name": "Image",
            "description": "An image, or one image in an ordered collection. Caption, attribution, and a rights note are optional. A missing note stays empty.",
            "fields": [
                "position",
                "url",
                "caption",
                "attribution",
                "rights"
            ]
        },
        {
            "id": "https://schema.org.uk/schemas/components/reputation",
            "name": "Reputation",
            "description": "Optional figures from one rating provider. A rating, a rating count, a review count, a scale, a distribution, and the date of the observation are recorded only when that provider states them. Themes are included only when a category records them. Figures from different providers are not combined. These figures are not copied into the core business JSON-LD.",
            "fields": [
                "provider",
                "rating",
                "rating_count",
                "count",
                "scale",
                "distribution",
                "observed_on",
                "themes"
            ]
        },
        {
            "id": "https://schema.org.uk/schemas/components/review-statistics",
            "name": "Review statistics",
            "alias_of": "https://schema.org.uk/schemas/components/reputation",
            "description": "Previous name of the Reputation component. New definitions use the Reputation component.",
            "fields": [
                "provider",
                "rating",
                "rating_count",
                "count",
                "scale",
                "distribution",
                "observed_on",
                "themes"
            ]
        },
        {
            "id": "https://schema.org.uk/schemas/components/offers",
            "name": "Offers",
            "optional": true,
            "description": "A contract for a later priced offer. It is not part of a core business schema. A service, a treatment, or a free or paid facility is not an offer by itself. The contract can record the item offered, the seller, the price and its currency, availability, the start and end dates, and the conditions. Live prices and bookings are not included.",
            "fields": [
                "item",
                "seller",
                "price",
                "currency",
                "availability",
                "valid_from",
                "valid_through",
                "conditions"
            ]
        }
    ]
}
