@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix ex: <http://demo.openlinksw.com/schemas/claude_northwind#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.
@prefix gr: <http://purl.org/goodrelations/v1#>.
@prefix schema: <http://schema.org/>.

# Customer Mapping
<#CustomerMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Customers" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/customer/{CustomerID}";
        rr:class schema:Organization;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:name;
        rr:objectMap [ rr:column "CompanyName" ];
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:contactPoint;
        rr:objectMap [
            rr:template "http://demo.openlinksw.com/schemas/claude_northwind/contact/{CustomerID}";
            rr:termType rr:IRI;
        ];
        rr:graph ex:graph;
    ].

# Customer Contact Point Mapping
<#CustomerContactMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Customers" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/contact/{CustomerID}";
        rr:class schema:ContactPoint;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:name;
        rr:objectMap [ rr:column "ContactName" ];
        rr:graph ex:graph;
    ].

# Order Mapping
<#OrderMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Orders" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/order/{OrderID}";
        rr:class schema:Order;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:orderDate;
        rr:objectMap [ 
            rr:column "OrderDate";
            rr:datatype xsd:date;
        ];
        rr:graph ex:graph;
    ].

# Product Mapping
<#ProductMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Products" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/product/{ProductID}";
        rr:class gr:ProductOrService;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:name;
        rr:objectMap [ rr:column "ProductName" ];
        rr:graph ex:graph;
    ].

# Order Details Mapping
<#OrderDetailsMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Order_Details" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/orderitem/{OrderID}/{ProductID}";
        rr:class schema:OrderItem;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:orderItemNumber;
        rr:objectMap [ rr:column "ProductID" ];
        rr:graph ex:graph;
    ].

# Employee Mapping
<#EmployeeMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Employees" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/employee/{EmployeeID}";
        rr:class foaf:Person;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate foaf:firstName;
        rr:objectMap [ rr:column "FirstName" ];
        rr:graph ex:graph;
    ].

# Category Mapping
<#CategoryMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Categories" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/category/{CategoryID}";
        rr:class schema:Category;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:name;
        rr:objectMap [ rr:column "CategoryName" ];
        rr:graph ex:graph;
    ].

# Supplier Mapping
<#SupplierMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Suppliers" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/supplier/{SupplierID}";
        rr:class gr:BusinessEntity;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:name;
        rr:objectMap [ rr:column "CompanyName" ];
        rr:graph ex:graph;
    ].

# Shipper Mapping
<#ShipperMapping>
    a rr:TriplesMap;
    rr:logicalTable [ rr:tableName "Demo..Shippers" ];
    rr:subjectMap [
        rr:template "http://demo.openlinksw.com/schemas/claude_northwind/shipper/{ShipperID}";
        rr:class schema:ParcelDelivery;
        rr:graph ex:graph;
    ];
    rr:predicateObjectMap [
        rr:predicate schema:name;
        rr:objectMap [ rr:column "CompanyName" ];
        rr:graph ex:graph;
    ].