[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C0QJDZXAYM9FD5FFD24KPK":3,"skill-same:01M6C0QJDZXAYM9FD5FFD24KPK":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":47,"install":48,"resources":61},"01M6C0QJDZXAYM9FD5FFD24KPK","sparql-expert",null,"Expert system for SPARQL 1.1 and SPARQL-star query generation, validation, and execution. Handles differences between GraphDB, Stardog, Fuseki, and local rdflib graphs. Use when querying knowledge graphs or debugging SPARQL.","beep-effect\u002Fbeep-effect","beep-effect","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F293012014?v=4","01M6C0KM5WSBFT39QDNXKH1JVY","Beep Effect","01M6C0KM9QBN9R26F3EHTSWR14",80,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsparql-expert\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"sparql expert","expert","debugging","validation","graphdb","execution","knowledge","system","use","query","local","generation","graphs","STAR","for","when","2026-11-10 10:12:30",false,"---\nname: sparql-expert\ndescription: >\n  Expert system for SPARQL 1.1 and SPARQL-star query generation,\n  validation, and execution. Handles differences between GraphDB,\n  Stardog, Fuseki, and local rdflib graphs. Use when querying\n  knowledge graphs or debugging SPARQL.\n---\n\n# SPARQL Expert\n\n## Role Statement\n\nYou are responsible for generating, validating, and executing SPARQL\nqueries across different backends. You handle dialect differences between\ntriple stores, write correct PREFIX declarations, validate syntax before\nexecution, and optimize query performance. You serve all other skills\nthat need SPARQL queries — CQ test generation, anti-pattern detection,\ncoverage metrics, and ad hoc data exploration.\n\n## When to Activate\n\n- User mentions \"SPARQL\", \"query\", or \"knowledge graph\"\n- User wants to extract data from an ontology or triple store\n- User wants to debug or optimize a SPARQL query\n- Another skill needs a SPARQL query generated or executed\n\n## Shared Reference Materials\n\nRead these files from `_shared\u002F` before beginning work:\n\n- `_shared\u002Fnamespaces.json` — canonical prefix-to-IRI map (always include\n  correct PREFIX declarations)\n- `_shared\u002Fmethodology-backbone.md` — lifecycle context (cross-cutting)\n\n## Core Workflow\n\n### Step 1: Analyze Intent\n\nDetermine:\n- **Query type**: SELECT, CONSTRUCT, ASK, DESCRIBE\n- **Target**: Local file (ROBOT\u002Frdflib), SPARQL endpoint, or oaklib adapter\n- **Purpose**: Exploration, testing, reporting, or data extraction\n- **Constraints**: Result size limits, performance requirements\n\n### Step 2: Schema Lookup\n\nBefore writing the query:\n1. Read `_shared\u002Fnamespaces.json` for correct prefixes\n2. If targeting an endpoint, check available named graphs\n3. If querying a specific ontology, check its class\u002Fproperty structure\n\n### Step 3: Draft Query\n\nRules:\n- ALWAYS include PREFIX declarations for every prefix used\n- Use `LIMIT` for exploratory queries (default: 100)\n- Add comments for complex patterns\n- Use `FILTER(!isBlank(?x))` to exclude blank nodes when counting\n- SPARQL matching is homomorphism-based: two variables may bind to the same node\n  unless explicitly constrained (use `FILTER(?x != ?y)` when required)\n- For RDF-star: embedded triples are NOT asserted by default in GraphDB\n\n```sparql\nPREFIX rdf: \u003Chttp:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#>\nPREFIX rdfs: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2000\u002F01\u002Frdf-schema#>\nPREFIX owl: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2002\u002F07\u002Fowl#>\nPREFIX skos: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2004\u002F02\u002Fskos\u002Fcore#>\n\n# Purpose: {what this query does}\nSELECT ?class ?label ?definition\nWHERE {\n  ?class a owl:Class ;\n         rdfs:label ?label .\n  OPTIONAL { ?class skos:definition ?definition }\n  FILTER(!isBlank(?class))\n}\nORDER BY ?label\nLIMIT 100\n```\n\n### Step 4: Validate Syntax\n\n```bash\n# Validate via rdflib parser\nuv run python -c \"\nfrom rdflib.plugins.sparql import prepareQuery\nq = '''\nPREFIX rdf: \u003Chttp:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#>\nPREFIX owl: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2002\u002F07\u002Fowl#>\nSELECT ?s WHERE { ?s rdf:type owl:Class }\n'''\nprepareQuery(q)\nprint('Valid SPARQL')\n\"\n```\n\n### Step 5: Execute\n\n```bash\n# Via ROBOT (local ontology files)\nrobot query --input ontology.ttl --query query.sparql --output output.csv\n\n# Via oaklib\nuv run runoak -i sqlite:obo:hp query \\\n  \"SELECT ?x ?label WHERE { ?x rdfs:label ?label } LIMIT 10\"\n\n# Via rdflib (Python)\nuv run python -c \"\nfrom rdflib import Graph\ng = Graph()\ng.parse('ontology.ttl', format='turtle')\nresults = g.query(open('query.sparql').read())\nfor row in results:\n    print(row)\n\"\n```\n\n## Tool Commands\n\n### Common query patterns\n\nReuse the prefix prologue below with each query. Replace the illustrative\n`http:\u002F\u002Fexample.org\u002F` namespace with the dataset's namespace.\n\n```sparql\nPREFIX : \u003Chttp:\u002F\u002Fexample.org\u002F>\nPREFIX rdf: \u003Chttp:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#>\nPREFIX rdfs: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2000\u002F01\u002Frdf-schema#>\nPREFIX owl: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2002\u002F07\u002Fowl#>\nPREFIX skos: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2004\u002F02\u002Fskos\u002Fcore#>\nPREFIX obo: \u003Chttp:\u002F\u002Fpurl.obolibrary.org\u002Fobo\u002F>\n\n# List all classes with labels\nSELECT ?class ?label WHERE {\n  ?class a owl:Class ; rdfs:label ?label .\n  FILTER(!isBlank(?class))\n}\n\n# Count classes\nSELECT (COUNT(DISTINCT ?class) AS ?count) WHERE {\n  ?class a owl:Class .\n  FILTER(!isBlank(?class))\n}\n\n# Find subclasses of a specific class\nSELECT ?sub ?label WHERE {\n  ?sub rdfs:subClassOf :ParentClass ;\n       rdfs:label ?label .\n}\n\n# Find classes missing definitions\nSELECT ?class ?label WHERE {\n  ?class a owl:Class ; rdfs:label ?label .\n  FILTER NOT EXISTS { ?class skos:definition ?def }\n  FILTER NOT EXISTS { ?class obo:IAO_0000115 ?def }\n  FILTER(!isBlank(?class))\n}\n\n# Property usage statistics\nSELECT ?prop (COUNT(*) AS ?usage) WHERE {\n  ?s ?prop ?o .\n  ?prop a owl:ObjectProperty .\n}\nGROUP BY ?prop\nORDER BY DESC(?usage)\n```\n\n### Property Path Reference\n\n| Pattern | Meaning | Example |\n|---------|---------|---------|\n| `*` | Zero or more hops | `?x rdfs:subClassOf* ?y` |\n| `+` | One or more hops | `?x rdfs:subClassOf+ ?y` |\n| `|` | Alternative path | `?x (skos:exactMatch|skos:closeMatch) ?y` |\n| `^` | Inverse property | `?x ^rdfs:subClassOf ?parent` |\n| `\u002F` | Concatenation | `?x rdfs:subClassOf\u002Frdfs:subClassOf ?gparent` |\n\nCommon caution points:\n- Property paths over cyclic graphs can explode result sizes.\n- Add selective anchors and `LIMIT` when exploring transitive paths.\n- Prefer bounded patterns for production queries when possible.\n\n### RDF-star patterns\n\n```sparql\nPREFIX : \u003Chttp:\u002F\u002Fexample.org\u002F>\n\n# GraphDB: match asserted triple with metadata\nSELECT ?s ?p ?o ?metaValue WHERE {\n  ?s ?p ?o .\n  \u003C\u003C ?s ?p ?o >> :hasConfidence ?metaValue .\n}\n\n# Stardog: edge properties (if enabled)\nSELECT ?s ?p ?o ?conf WHERE {\n  ?s ?p ?o .\n  \u003C\u003C ?s ?p ?o >> :confidence ?conf .\n}\n```\n\n### Federated queries\n\n```sparql\nPREFIX : \u003Chttp:\u002F\u002Fexample.org\u002F>\nPREFIX dbo: \u003Chttp:\u002F\u002Fdbpedia.org\u002Fontology\u002F>\nPREFIX rdfs: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2000\u002F01\u002Frdf-schema#>\n\n# Query across multiple endpoints\nSELECT ?local ?external WHERE {\n  ?local a :LocalClass .\n  SERVICE \u003Chttp:\u002F\u002Fdbpedia.org\u002Fsparql> {\n    ?external a dbo:Thing ;\n              rdfs:label ?label .\n  }\n}\n```\n\n## Entailment Regime Awareness\n\nQuery results depend on whether inference is applied:\n\n- Local\u002Fraw file queries typically return only asserted triples.\n- Reasoned artifacts or reasoner-backed endpoints may return inferred triples.\n- CQ interpretation must state which entailment regime is assumed\n  (asserted-only vs inferred).\n\n## Outputs\n\nThis skill produces:\n\n| Artifact | Location | Format | Description |\n|----------|----------|--------|-------------|\n| Query files | `sparql\u002F{name}.sparql` | SPARQL | Stored, validated queries |\n| Query results | `{context-dependent}` | CSV\u002FTSV\u002FJSON | Query output |\n\n## Handoff\n\n**Receives from**: Any skill that needs SPARQL queries generated or executed\n\n**Passes to**: Requesting skill (query files and\u002For results)\n\n**Handoff checklist**:\n- [ ] Query syntax is validated\n- [ ] PREFIX declarations are complete and correct\n- [ ] Results are in the requested format\n- [ ] Query is saved to `sparql\u002F` if reusable\n\n## Performance Tips\n\n- Always use `LIMIT` for exploratory queries\n- Avoid leading wildcards in `FILTER regex` (`regex(?var, \".*pattern\")`) —\n  they prevent index usage\n- Use property paths (`rdfs:subClassOf+`) sparingly on large graphs\n- Check `OPTIONAL` patterns for Cartesian products\n- Prefer `FILTER EXISTS` \u002F `FILTER NOT EXISTS` over subqueries\n- Use `VALUES` clause for parameterized queries\n- Place most selective triple patterns first in the WHERE clause\n\n## Anti-Patterns to Avoid\n\n- **Missing PREFIXes**: Every CURIE must have a corresponding PREFIX\n  declaration. Use `_shared\u002Fnamespaces.json` as the source.\n- **No LIMIT on exploration**: Always limit exploratory queries. An\n  unbounded SELECT against a large graph can timeout or crash.\n- **SPARQL UPDATE on production**: Never execute UPDATE\u002FDELETE against\n  production endpoints. (Safety Rule #8)\n- **Assuming RDF-star assertion**: In GraphDB, `\u003C\u003C s p o >>` does NOT\n  assert the triple. You must also state `s p o .` separately.\n- **Ignoring blank nodes**: Always filter blank nodes when counting or\n  listing named entities.\n- **Assuming variable distinctness**: SPARQL can bind `?x` and `?y` to the\n  same node. Add `FILTER(?x != ?y)` when distinct entities are required.\n- **Ignoring entailment regime**: A query that works on materialized endpoint\n  results may fail on asserted-only local files.\n\n## Error Handling\n\n| Error | Likely Cause | Recovery |\n|-------|-------------|----------|\n| Parse error | Syntax error in SPARQL | Run through validator; check missing PREFIXes or braces |\n| Timeout | Query too complex or graph too large | Add LIMIT, rewrite with more selective patterns |\n| Empty results | Wrong prefix IRI or term not in graph | Verify prefix resolves correctly; check term existence |\n| 403 Forbidden | Endpoint requires authentication | Check credentials configuration |\n| RDF-star syntax error | Store doesn't support RDF-star | Check store capabilities; fall back to standard reification |\n","# SPARQL Expert\n\n## Role Statement\n\nYou are responsible for generating, validating, and executing SPARQL\nqueries across different backends. You handle dialect differences between\ntriple stores, write correct PREFIX declarations, validate syntax before\nexecution, and optimize query performance. You serve all other skills\nthat need SPARQL queries — CQ test generation, anti-pattern detection,\ncoverage metrics, and ad hoc data exploration.\n\n## When to Activate\n\n- User mentions \"SPARQL\", \"query\", or \"knowledge graph\"\n- User wants to extract data from an ontology or triple store\n- User wants to debug or optimize a SPARQL query\n- Another skill needs a SPARQL query generated or executed\n\n## Shared Reference Materials\n\nRead these files from `_shared\u002F` before beginning work:\n\n- `_shared\u002Fnamespaces.json` — canonical prefix-to-IRI map (always include\n  correct PREFIX declarations)\n- `_shared\u002Fmethodology-backbone.md` — lifecycle context (cross-cutting)\n\n## Core Workflow\n\n### Step 1: Analyze Intent\n\nDetermine:\n- **Query type**: SELECT, CONSTRUCT, ASK, DESCRIBE\n- **Target**: Local file (ROBOT\u002Frdflib), SPARQL endpoint, or oaklib adapter\n- **Purpose**: Exploration, testing, reporting, or data extraction\n- **Constraints**: Result size limits, performance requirements\n\n### Step 2: Schema Lookup\n\nBefore writing the query:\n1. Read `_shared\u002Fnamespaces.json` for correct prefixes\n2. If targeting an endpoint, check available named graphs\n3. If querying a specific ontology, check its class\u002Fproperty structure\n\n### Step 3: Draft Query\n\nRules:\n- ALWAYS include PREFIX declarations for every prefix used\n- Use `LIMIT` for exploratory queries (default: 100)\n- Add comments for complex patterns\n- Use `FILTER(!isBlank(?x))` to exclude blank nodes when counting\n- SPARQL matching is homomorphism-based: two variables may bind to the same node\n  unless explicitly constrained (use `FILTER(?x != ?y)` when required)\n- For RDF-star: embedded triples are NOT asserted by default in GraphDB\n\n```sparql\nPREFIX rdf: \u003Chttp:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#>\nPREFIX rdfs: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2000\u002F01\u002Frdf-schema#>\nPREFIX owl: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2002\u002F07\u002Fowl#>\nPREFIX skos: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2004\u002F02\u002Fskos\u002Fcore#>\n\n# Purpose: {what this query does}\nSELECT ?class ?label ?definition\nWHERE {\n  ?class a owl:Class ;\n         rdfs:label ?label .\n  OPTIONAL { ?class skos:definition ?definition }\n  FILTER(!isBlank(?class))\n}\nORDER BY ?label\nLIMIT 100\n```\n\n### Step 4: Validate Syntax\n\n```bash\n# Validate via rdflib parser\nuv run python -c \"\nfrom rdflib.plugins.sparql import prepareQuery\nq = '''\nPREFIX rdf: \u003Chttp:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#>\nPREFIX owl: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2002\u002F07\u002Fowl#>\nSELECT ?s WHERE { ?s rdf:type owl:Class }\n'''\nprepareQuery(q)\nprint('Valid SPARQL')\n\"\n```\n\n### Step 5: Execute\n\n```bash\n# Via ROBOT (local ontology files)\nrobot query --input ontology.ttl --query query.sparql --output output.csv\n\n# Via oaklib\nuv run runoak -i sqlite:obo:hp query \\\n  \"SELECT ?x ?label WHERE { ?x rdfs:label ?label } LIMIT 10\"\n\n# Via rdflib (Python)\nuv run python -c \"\nfrom rdflib import Graph\ng = Graph()\ng.parse('ontology.ttl', format='turtle')\nresults = g.query(open('query.sparql').read())\nfor row in results:\n    print(row)\n\"\n```\n\n## Tool Commands\n\n### Common query patterns\n\nReuse the prefix prologue below with each query. Replace the illustrative\n`http:\u002F\u002Fexample.org\u002F` namespace with the dataset's namespace.\n\n```sparql\nPREFIX : \u003Chttp:\u002F\u002Fexample.org\u002F>\nPREFIX rdf: \u003Chttp:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#>\nPREFIX rdfs: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2000\u002F01\u002Frdf-schema#>\nPREFIX owl: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2002\u002F07\u002Fowl#>\nPREFIX skos: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2004\u002F02\u002Fskos\u002Fcore#>\nPREFIX obo: \u003Chttp:\u002F\u002Fpurl.obolibrary.org\u002Fobo\u002F>\n\n# List all classes with labels\nSELECT ?class ?label WHERE {\n  ?class a owl:Class ; rdfs:label ?label .\n  FILTER(!isBlank(?class))\n}\n\n# Count classes\nSELECT (COUNT(DISTINCT ?class) AS ?count) WHERE {\n  ?class a owl:Class .\n  FILTER(!isBlank(?class))\n}\n\n# Find subclasses of a specific class\nSELECT ?sub ?label WHERE {\n  ?sub rdfs:subClassOf :ParentClass ;\n       rdfs:label ?label .\n}\n\n# Find classes missing definitions\nSELECT ?class ?label WHERE {\n  ?class a owl:Class ; rdfs:label ?label .\n  FILTER NOT EXISTS { ?class skos:definition ?def }\n  FILTER NOT EXISTS { ?class obo:IAO_0000115 ?def }\n  FILTER(!isBlank(?class))\n}\n\n# Property usage statistics\nSELECT ?prop (COUNT(*) AS ?usage) WHERE {\n  ?s ?prop ?o .\n  ?prop a owl:ObjectProperty .\n}\nGROUP BY ?prop\nORDER BY DESC(?usage)\n```\n\n### Property Path Reference\n\n| Pattern | Meaning | Example |\n|---------|---------|---------|\n| `*` | Zero or more hops | `?x rdfs:subClassOf* ?y` |\n| `+` | One or more hops | `?x rdfs:subClassOf+ ?y` |\n| `|` | Alternative path | `?x (skos:exactMatch|skos:closeMatch) ?y` |\n| `^` | Inverse property | `?x ^rdfs:subClassOf ?parent` |\n| `\u002F` | Concatenation | `?x rdfs:subClassOf\u002Frdfs:subClassOf ?gparent` |\n\nCommon caution points:\n- Property paths over cyclic graphs can explode result sizes.\n- Add selective anchors and `LIMIT` when exploring transitive paths.\n- Prefer bounded patterns for production queries when possible.\n\n### RDF-star patterns\n\n```sparql\nPREFIX : \u003Chttp:\u002F\u002Fexample.org\u002F>\n\n# GraphDB: match asserted triple with metadata\nSELECT ?s ?p ?o ?metaValue WHERE {\n  ?s ?p ?o .\n  \u003C\u003C ?s ?p ?o >> :hasConfidence ?metaValue .\n}\n\n# Stardog: edge properties (if enabled)\nSELECT ?s ?p ?o ?conf WHERE {\n  ?s ?p ?o .\n  \u003C\u003C ?s ?p ?o >> :confidence ?conf .\n}\n```\n\n### Federated queries\n\n```sparql\nPREFIX : \u003Chttp:\u002F\u002Fexample.org\u002F>\nPREFIX dbo: \u003Chttp:\u002F\u002Fdbpedia.org\u002Fontology\u002F>\nPREFIX rdfs: \u003Chttp:\u002F\u002Fwww.w3.org\u002F2000\u002F01\u002Frdf-schema#>\n\n# Query across multiple endpoints\nSELECT ?local ?external WHERE {\n  ?local a :LocalClass .\n  SERVICE \u003Chttp:\u002F\u002Fdbpedia.org\u002Fsparql> {\n    ?external a dbo:Thing ;\n              rdfs:label ?label .\n  }\n}\n```\n\n## Entailment Regime Awareness\n\nQuery results depend on whether inference is applied:\n\n- Local\u002Fraw file queries typically return only asserted triples.\n- Reasoned artifacts or reasoner-backed endpoints may return inferred triples.\n- CQ interpretation must state which entailment regime is assumed\n  (asserted-only vs inferred).\n\n## Outputs\n\nThis skill produces:\n\n| Artifact | Location | Format | Description |\n|----------|----------|--------|-------------|\n| Query files | `sparql\u002F{name}.sparql` | SPARQL | Stored, validated queries |\n| Query results | `{context-dependent}` | CSV\u002FTSV\u002FJSON | Query output |\n\n## Handoff\n\n**Receives from**: Any skill that needs SPARQL queries generated or executed\n\n**Passes to**: Requesting skill (query files and\u002For results)\n\n**Handoff checklist**:\n- [ ] Query syntax is validated\n- [ ] PREFIX declarations are complete and correct\n- [ ] Results are in the requested format\n- [ ] Query is saved to `sparql\u002F` if reusable\n\n## Performance Tips\n\n- Always use `LIMIT` for exploratory queries\n- Avoid leading wildcards in `FILTER regex` (`regex(?var, \".*pattern\")`) —\n  they prevent index usage\n- Use property paths (`rdfs:subClassOf+`) sparingly on large graphs\n- Check `OPTIONAL` patterns for Cartesian products\n- Prefer `FILTER EXISTS` \u002F `FILTER NOT EXISTS` over subqueries\n- Use `VALUES` clause for parameterized queries\n- Place most selective triple patterns first in the WHERE clause\n\n## Anti-Patterns to Avoid\n\n- **Missing PREFIXes**: Every CURIE must have a corresponding PREFIX\n  declaration. Use `_shared\u002Fnamespaces.json` as the source.\n- **No LIMIT on exploration**: Always limit exploratory queries. An\n  unbounded SELECT against a large graph can timeout or crash.\n- **SPARQL UPDATE on production**: Never execute UPDATE\u002FDELETE against\n  production endpoints. (Safety Rule #8)\n- **Assuming RDF-star assertion**: In GraphDB, `\u003C\u003C s p o >>` does NOT\n  assert the triple. You must also state `s p o .` separately.\n- **Ignoring blank nodes**: Always filter blank nodes when counting or\n  listing named entities.\n- **Assuming variable distinctness**: SPARQL can bind `?x` and `?y` to the\n  same node. Add `FILTER(?x != ?y)` when distinct entities are required.\n- **Ignoring entailment regime**: A query that works on materialized endpoint\n  results may fail on asserted-only local files.\n\n## Error Handling\n\n| Error | Likely Cause | Recovery |\n|-------|-------------|----------|\n| Parse error | Syntax error in SPARQL | Run through validator; check missing PREFIXes or braces |\n| Timeout | Query too complex or graph too large | Add LIMIT, rewrite with more selective patterns |\n| Empty results | Wrong prefix IRI or term not in graph | Verify prefix resolves correctly; check term existence |\n| 403 Forbidden | Endpoint requires authentication | Check credentials configuration |\n| RDF-star syntax error | Store doesn't support RDF-star | Check store capabilities; fall back to standard reification |\n",{"name":5,"description":7},"main","2398f391338607e713c72b1f6f0c574dfc7a5199",".claude\u002Fskills\u002Fsparql-expert",14,"https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect","https:\u002F\u002Fwww.oip.law","https:\u002F\u002Fgithub.com\u002Fbeep-effect","2026-11-13 03:23:03",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add beep-effect\u002Fbeep-effect --skill sparql-expert",{"tool":54,"command":55},"bunx","bunx skills add beep-effect\u002Fbeep-effect --skill sparql-expert",{"tool":57,"command":58},"pnpm","pnpm dlx skills add beep-effect\u002Fbeep-effect --skill sparql-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fsparql-expert\u002FSKILL.md",true,[],[63,89,99,109,146,170],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":35},"01M714DQT4JQHZ11X0RH0T8RQ7","auth-environments","Sign Claude Code in to a chosen Claude subscription on every linked T3 fleet host (grok-bot, beep-worker, dankserver, tbk-worker, tom-pc-1-wsl). Use when a Claude account hits its weekly limit, when `bun run beep accounts` shows the fleet's account used up, or on `\u002Fauth-environments`. Opens each host's OAuth page and a masked KDE code dialog together and verifies the admitted account.","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fauth-environments\u002FSKILL.md",[],[70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,34],"auth","environments","auth environments","path","limit","page","python","canonical","dialog","fleet","run","active","weekly","bot","workstation","up","worker","host","code",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":35},"01M6C0RK94T5QGSZ0K9TA5Q2EF","shadcn","Fixture for immutable shadcn skill provenance.","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002Fpackages\u002Ftooling\u002Ftool\u002Fcli\u002Ftest\u002Ffixtures\u002Fskills-provenance\u002Fshadcn\u002Fupstream\u002FSKILL.md",[],[91,96,97,98,33],"immutable","provenance","fixture",{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":35},"01M6C0RGPWMYM5KS62ZZPNAZ0W","qa-inventory-judge","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002Fpackages\u002Ftooling\u002Ftool\u002Fcli\u002Fskills\u002Fqa-inventory-judge\u002FSKILL.md",[],[105,106,107,108],"inventory","qa","qa inventory judge","judge",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":113,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":35},"01M6C0RDVR0A6W6ZJCJMEYJT77","practice-onboarding","Set up a lawyer's computer for their practice through the practice gateway. Use when the lawyer asks to get set up, to connect their documents, mail, calendar or practice tools, or when the practice gateway reports that setup is incomplete. Interviews the lawyer one question at a time, saves a practice profile, then checks and repairs the computer until setup is complete.","MIT","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002Fapps\u002Fpractice-gateway\u002Fplugin\u002Fskills\u002Fpractice-onboarding\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[122,123,124,125,126,127,128,129,34,85,130,131,132,133,134,135,136,137,138,139,88,140,141,142,143,144,145],"onboarding","practice onboarding","at","guide","interviews","calendar","mail","reports","time","get","save","question","profile","Tools","setup","beep","status","desktop","documents","connect","computer","windows","gateway","SET",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":155,"publishedAt":35},"01M6C0RB09NRJN0E1W3ND9HDE6","triage-nda","Screen NDAs before inventor disclosures or client pitches at Oppold IP Law. Flag disclosure, residuals, marking, term, and hidden IP rights for attorney review.","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002Fapps\u002Fpractice-claude-mod\u002Fskills\u002Ftriage-nda\u002FSKILL.md",[152],{"categoryNo":153,"categoryName":154,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000037","律师与法务",[156,157,158,159,160,161,162,163,164,25,124,165,166,167,168,169,33],"nda","triage","triage nda","2026","screen","ip","plugins","work","review","knowledge-work","legal","client","hidden","rights",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":177,"publishedAt":35},"01M6C0R8B5D35H50QY426AYR39","review-contract","Review IP agreements for Oppold IP Law. Use for assignments, licenses, inventor agreements, joint development, or NDAs involving inventions. Prepare cited issues and proposed revisions for attorney review.","https:\u002F\u002Fgithub.com\u002Fbeep-effect\u002Fbeep-effect\u002Fblob\u002Fmain\u002Fapps\u002Fpractice-claude-mod\u002Fskills\u002Freview-contract\u002FSKILL.md",[176],{"categoryNo":153,"categoryName":154,"taxonomyType":119,"taxonomyTypeDesc":120},[164,178,179,159,165,166,27,161,33,180,162,163,25,181,182],"review contract","contract","prepare","issues","development"]