# @ldo/ldo
`@ldo/ldo` is the primary interface for accessing Linked Data Objects given raw RDF.
## Guide
A full walkthrough for using the `@ldo/ldo` library can be found in the [For RDF Usage Guide](https://ldo.js.org/latest/raw_rdf/).
## Installation
### Automatic Installation
Navigate into your project's root folder and run the following command:
```
cd my_project/
npx run @ldo/cli init
```
Manual Installation
If you already have generated ShapeTypes, you may install the `@ldo/ldo` library independently.
```
npm i @ldo/ldo
```
## Simple Example
Below is a simple example of LDO in a real use-case (changing the name on a Solid Pod). Assume that a ShapeType was previously generated and placed at `./.ldo/foafProfile.shapeTypes`.
```typescript
import {
parseRdf,
startTransaction,
toSparqlUpdate,
toTurtle,
set,
} from "@ldo/ldo";
import { FoafProfileShapeType } from "./.ldo/foafProfile.shapeTypes.js";
async function run() {
const rawTurtle = `
<#me> a ;
"Jane Doe".
`;
/**
* Step 1: Convert Raw RDF into a Linked Data Object
*/
const ldoDataset = await parseRdf(rawTurtle, {
baseIRI: "https://solidweb.me/jane_doe/profile/card",
});
// Create a linked data object by telling the dataset the type and subject of
// the object
const janeProfile = ldoDataset
// Tells the LDO dataset that we're looking for a FoafProfile
.usingType(FoafProfileShapeType)
// Says the subject of the FoafProfile
.fromSubject("https://solidweb.me/jane_doe/profile/card#me");
/**
* Step 2: Manipulate the Linked Data Object
*/
// Logs "Jane Doe"
console.log(janeProfile.name);
// Logs "Person"
console.log(janeProfile.type);
// Logs 0
console.log(janeProfile.knows?.size);
// Begins a transaction that tracks your changes
startTransaction(janeProfile);
janeProfile.name = "Jane Smith";
janeProfile.knows?.add({
"@id": "https://solidweb.me/john_smith/profile/card#me",
type: {
"@id": "Person",
},
name: "John Smith",
knows: set(janeProfile),
});
// Logs "Jane Smith"
console.log(janeProfile.name);
// Logs "John Smith"
console.log(janeProfile.knows?.toArray()[0].name);
// Logs "Jane Smith"
console.log(janeProfile.knows?.toArray()[0].knows?.toArray()[0].name);
/**
* Step 3: Convert it back to RDF
*/
// Logs:
// a ;
// "Jane Smith";
// .
// a ;
// "John Smith";
// .
console.log(await toTurtle(janeProfile));
// Logs:
// DELETE DATA {
// "Jane Doe" .
// };
// INSERT DATA {
// "Jane Smith" .
// .
// "John Smith" .
// .
// .
// }
console.log(await toSparqlUpdate(janeProfile));
}
run();
```
## API Details
Types
- [`LdoBase`](https://ldo.js.org/latest/api/ldo/LdoBase/)
- [`ShapeType`](https://ldo.js.org/latest/api/ldo/ShapeType/)
Getting an LdoDataset
- [`parseRdf`](https://ldo.js.org/latest/api/ldo/parseRdf/)
- [`createLdoDatasetFactory`](https://ldo.js.org/latest/api/ldo/createLdoDatasetFactory/)
- [`LdoDatasetFactory`](https://ldo.js.org/latest/api/ldo/LdoDatasetFactory/)
- [`createLdoDataset`](https://ldo.js.org/latest/api/ldo/createLdoDataset/)
- [`LdoDataset`](https://ldo.js.org/latest/api/ldo/LdoDataset/)
Getting a Linked Data Object
- [`LdoBuilder`](https://ldo.js.org/latest/api/ldo/LdoBuilder/)
Converting a Linked Data Object to Raw RDF
- [`toTurtle`](https://ldo.js.org/latest/api/ldo/toTurtle/)
- [`toNTriples`](https://ldo.js.org/latest/api/ldo/toNTriples/)
- [`serialize`](https://ldo.js.org/latest/api/ldo/serialize/)
Transactions
- [transactions](https://ldo.js.org/latest/api/ldo/transactions/)
- [`toSparqlUpdate`](https://ldo.js.org/latest/api/ldo/toSparqlUpdate/)
Language Tag Support
- [`languageOf`](https://ldo.js.org/latest/api/ldo/languageOf/)
- [`setLanguagePreferences`](https://ldo.js.org/latest/api/ldo/setLanguagePreferences/)
Graph Support
- [`graphOf`](https://ldo.js.org/latest/api/ldo/graphOf/)
- [`write`](https://ldo.js.org/latest/api/ldo/write/)
Other Helper Functions
- [`getDataset`](https://ldo.js.org/latest/api/ldo/getDataset/)
## Sponsorship
This project was made possible by a grant from NGI Zero Entrust via nlnet. Learn more on the [NLnet project page](https://nlnet.nl/project/SolidUsableApps/).
[
](https://nlnet.nl/)
[
](https://nlnet.nl/)
## Liscense
MIT