N3.JS 라이브러리는 rdf.js 저급 사양을 구현하여 JavaScript에서 RDF를 쉽게 처리 할 수 있습니다. 그것은 제공 :
구문 분석 및 글쓰기는 다음과 같습니다.
Node.js의 경우 N3.JS는 NPM 패키지로 제공됩니다.
$ npm install n3
const N3 = require ( 'n3' ) ;
N3.JS는 웹 팩 또는 브라우저리를 통해 브라우저에서 원활하게 작동합니다. 이러한 도구에 익숙하지 않은 경우 WebPack : 번들 만들기 - 시작 하거나 Browserify 소개를 읽을 수 있습니다. "UMD 번들"을 생성하고 이름을 제공해야합니다 (예 : Browserify의 -s N3
옵션이 포함).
CDN을 통해로드 할 수도 있습니다.
< script src =" https://unpkg.com/n3/browser/n3.min.js " > </ script >
N3.JS는 RDF.JS 저급 사양을 따릅니다.
N3.DataFactory
트리플과 쿼드를 생성하기 위해 공장 기능을 제공합니다.
const { DataFactory } = N3 ;
const { namedNode , literal , defaultGraph , quad } = DataFactory ;
const myQuad = quad (
namedNode ( 'https://ruben.verborgh.org/profile/#me' ) , // Subject
namedNode ( 'http://xmlns.com/foaf/0.1/givenName' ) , // Predicate
literal ( 'Ruben' , 'en' ) , // Object
defaultGraph ( ) , // Graph
) ;
console . log ( myQuad . termType ) ; // Quad
console . log ( myQuad . value ) ; // ''
console . log ( myQuad . subject . value ) ; // https://ruben.verborgh.org/profile/#me
console . log ( myQuad . object . value ) ; // Ruben
console . log ( myQuad . object . datatype . value ) ; // http://www.w3.org/1999/02/22-rdf-syntax-ns#langString
console . log ( myQuad . object . language ) ; // en
이 문서의 나머지 부분에서는 "트리플"과 "쿼드"를 동일하게 처리합니다. 쿼드는 단순히 명명 된 그래프 또는 기본 그래프의 트리플이라고 가정합니다.
N3.Parser
콜백을 통해 거북이, 트리그, n 트리플 또는 n 쿼드 문서를 쿼드로 변환합니다.
const tomAndJerry = `PREFIX c: <http://example.org/cartoons#>
# Tom is a cat
c:Tom a c:Cat.
c:Jerry a c:Mouse;
c:smarterThan c:Tom.`
const parser = new N3 . Parser ( ) ;
parser . parse ( tomAndJerry ,
( error , quad , prefixes ) => {
if ( quad )
console . log ( quad ) ;
else
console . log ( "# That's all, folks!" , prefixes ) ;
} ) ;
콜백의 첫 번째 인수는 선택적 오류 값이고 두 번째는 쿼드입니다. 더 이상 쿼드가 없으면 콜백은 quad
용 null
과 함께 마지막으로 호출됩니다.
대안 적으로, onQuad
, onPrefix
및 onComment
다음과 같이 quads
, prefixes
및 comments
듣는 데 사용되는 객체를 제공 할 수 있습니다.
const parser = new N3 . Parser ( ) ;
parser . parse ( tomAndJerry , {
// onQuad (required) accepts a listener of type (quad: RDF.Quad) => void
onQuad : ( err , quad ) => { console . log ( quad ) ; } ,
// onPrefix (optional) accepts a listener of type (prefix: string, iri: NamedNode) => void
onPrefix : ( prefix , iri ) => { console . log ( prefix , 'expands to' , iri . value ) ; } ,
// onComment (optional) accepts a listener of type (comment: string) => void
onComment : ( comment ) => { console . log ( '#' , comment ) ; } ,
} ) ;
콜백이 제공되지 않으면 구문 분석이 쿼드 배열을 동기로 반환합니다.
const parser = new N3 . Parser ( ) ;
// An array of resultant Quads
const quadArray = parser . parse ( tomAndJerry ) ;
기본적으로 N3.Parser
거북이, 트리그, n 트리플 및 n 쿼드의 허용 슈퍼 세트를 구문 분석합니다.
해당 언어와의 엄격한 호환성을 위해, 창조시 format
인수를 전달하십시오.
const parser1 = new N3 . Parser ( { format : 'N-Triples' } ) ;
const parser2 = new N3 . Parser ( { format : 'application/trig' } ) ;
표기법 3 (n3)은 format
인수를 통해서만 지원됩니다.
const parser3 = new N3 . Parser ( { format : 'N3' } ) ;
const parser4 = new N3 . Parser ( { format : 'Notation3' } ) ;
const parser5 = new N3 . Parser ( { format : 'text/n3' } ) ;
구문 분석하려는 문서의 기본 IRI를 제공 할 수 있습니다. 이것은 창조시 baseIRI
주장을 전달함으로써 이루어집니다.
const parser = new N3 . Parser ( { baseIRI : 'http://example.org/' } ) ;
기본적으로 N3.Parser
b{digit}_
접두사로 빈 노드 레이블을 접두사합니다. 이는 동일한 레이블이있는 관련없는 빈 노드의 충돌을 방지하기 위해 수행됩니다. blankNodePrefix
생성자 인수는 접두사를 수정하는 데 사용하거나 빈 문자열로 설정된 경우 접두사를 완전히 비활성화 할 수 있습니다.
const parser = new N3 . Parser ( { blankNodePrefix : '' } ) ;
N3.Parser
Node.js가 자라면서 스트림을 구문 분석 할 수 있으며 준비가 되 자마자 쿼드를 반환합니다.
const parser = new N3 . Parser ( ) ,
rdfStream = fs . createReadStream ( 'cartoons.ttl' ) ;
parser . parse ( rdfStream , console . log ) ;
N3.StreamParser
는 node.js stream 및 rdf.js 싱크 구현입니다. 이 솔루션은 소스 데이터가 소비자가 준비되었을 때만 읽히기 때문에 소비자가 느려지는 경우 이상적입니다.
const streamParser = new N3 . StreamParser ( ) ,
rdfStream = fs . createReadStream ( 'cartoons.ttl' ) ;
rdfStream . pipe ( streamParser ) ;
streamParser . pipe ( new SlowConsumer ( ) ) ;
function SlowConsumer ( ) {
const writer = new require ( 'stream' ) . Writable ( { objectMode : true } ) ;
writer . _write = ( quad , encoding , done ) => {
console . log ( quad ) ;
setTimeout ( done , 1000 ) ;
} ;
return writer ;
}
전용 prefix
이벤트는 prefix
및 term
인수로 모든 접두사를 나타냅니다. N3.streamParser 생성자에서 comments: true
설정하여 전용 comment
이벤트를 활성화 할 수 있습니다.
N3.Writer
쿼드를 RDF 문서로 연속화합니다. addQuad
통해 쿼드를 작성하십시오.
const writer = new N3 . Writer ( { prefixes : { c : 'http://example.org/cartoons#' } } ) ; // Create a writer which uses `c` as a prefix for the namespace `http://example.org/cartoons#`
writer . addQuad ( quad (
namedNode ( 'http://example.org/cartoons#Tom' ) , // Subject
namedNode ( 'http://example.org/cartoons#name' ) , // Predicate
literal ( 'Tom' ) // Object
) ) ;
writer . end ( ( error , result ) => console . log ( result ) ) ;
기본적으로 N3.Writer
거북이를 씁니다 (또는 일부 쿼드가 명명 된 그래프에있는 경우 트리그).
대신 n 트리플 (또는 n- 쿼드)을 작성하려면 생성시 format
인수를 전달하십시오.
const writer1 = new N3 . Writer ( { format : 'N-Triples' } ) ;
const writer2 = new N3 . Writer ( { format : 'application/trig' } ) ;
N3.Writer
또한 addQuad
통해 node.js 스트림에 쿼드를 쓸 수 있습니다.
const writer = new N3 . Writer ( process . stdout , { end : false , prefixes : { c : 'http://example.org/cartoons#' } } ) ;
writer . addQuad (
namedNode ( 'http://example.org/cartoons#Tom' ) , // Subject
namedNode ( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' ) , // Predicate
namedNode ( 'http://example.org/cartoons#Cat' ) // Object
) ;
writer . addQuad ( quad (
namedNode ( 'http://example.org/cartoons#Tom' ) , // Subject
namedNode ( 'http://example.org/cartoons#name' ) , // Predicate
literal ( 'Tom' ) // Object
) ) ;
writer . end ( ) ;
N3.StreamWriter
는 node.js stream 및 rdf.js 싱크 구현입니다.
const streamParser = new N3 . StreamParser ( ) ,
inputStream = fs . createReadStream ( 'cartoons.ttl' ) ,
streamWriter = new N3 . StreamWriter ( { prefixes : { c : 'http://example.org/cartoons#' } } ) ;
inputStream . pipe ( streamParser ) ;
streamParser . pipe ( streamWriter ) ;
streamWriter . pipe ( process . stdout ) ;
거북이와 트리그의 […]
및 목록 (…)
표기법을 사용하고 싶을 수도 있습니다. 그러나 스트리밍 라이터는이를 자동으로 만들 수 없습니다. 속기 표기법은 빈 노드 나 목록 헤드를 나중에 사용하지 않는 경우에만 가능하며 스트림 끝에서 결정적으로 결정할 수 있습니다.
blank
및 list
기능을 사용하면 대신 수동으로 만들 수 있습니다.
const writer = new N3 . Writer ( { prefixes : { c : 'http://example.org/cartoons#' ,
foaf : 'http://xmlns.com/foaf/0.1/' } } ) ;
writer . addQuad (
writer . blank (
namedNode ( 'http://xmlns.com/foaf/0.1/givenName' ) ,
literal ( 'Tom' , 'en' ) ) ,
namedNode ( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' ) ,
namedNode ( 'http://example.org/cartoons#Cat' )
) ;
writer . addQuad ( quad (
namedNode ( 'http://example.org/cartoons#Jerry' ) ,
namedNode ( 'http://xmlns.com/foaf/0.1/knows' ) ,
writer . blank ( [ {
predicate : namedNode ( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' ) ,
object : namedNode ( 'http://example.org/cartoons#Cat' ) ,
} , {
predicate : namedNode ( 'http://xmlns.com/foaf/0.1/givenName' ) ,
object : literal ( 'Tom' , 'en' ) ,
} ] )
) ) ;
writer . addQuad (
namedNode ( 'http://example.org/cartoons#Mammy' ) ,
namedNode ( 'http://example.org/cartoons#hasPets' ) ,
writer . list ( [
namedNode ( 'http://example.org/cartoons#Tom' ) ,
namedNode ( 'http://example.org/cartoons#Jerry' ) ,
] )
) ;
writer . end ( ( error , result ) => console . log ( result ) ) ;
N3.Store
사용하면 트리플을 메모리에 저장하고 빠르게 찾을 수 있습니다.
이 예에서는 새 상점을 만들고 트리플을 추가합니다 :Pluto a :Dog.
및 :Mickey a :Mouse
.
그런 다음 :Mickey
과 같은 트리플을 찾습니다.
const store = new N3 . Store ( ) ;
store . add (
quad (
namedNode ( 'http://ex.org/Pluto' ) ,
namedNode ( 'http://ex.org/type' ) ,
namedNode ( 'http://ex.org/Dog' )
)
) ;
store . add (
quad (
namedNode ( 'http://ex.org/Mickey' ) ,
namedNode ( 'http://ex.org/type' ) ,
namedNode ( 'http://ex.org/Mouse' )
)
) ;
// Retrieve all quads
for ( const quad of store )
console . log ( quad ) ;
// Retrieve Mickey's quads
for ( const quad of store . match ( namedNode ( 'http://ex.org/Mickey' ) , null , null ) )
console . log ( quad ) ;
여러 매장을 사용하는 경우 메모리 소비가 엔티티 인덱스를 공유 할 수있게하여 메모리 소비를 줄일 수 있습니다.
const entityIndex = new N3 . EntityIndex ( ) ;
const store1 = new N3 . Store ( [ ] , { entityIndex } ) ;
const store2 = new N3 . Store ( [ ] , { entityIndex } ) ;
Dataset
인터페이스 이 스토어는 다음 속성을 노출시키는 Dataset
인터페이스를 준수합니다.
속성 :
size
-세트의 쿼드 수를 지정하는 비 음성 정수.행동 양식:
add
- 지정된 쿼드를 데이터 세트에 추가합니다. Quad.equals
에 정의 된 기존 쿼드는 무시됩니다.delete
- 데이터 세트에서 지정된 쿼드를 제거합니다.has
데이터 세트에 특정 쿼드가 포함되어 있는지 여부를 결정합니다.match
- 주어진 인수와 일치하는 현재 인스턴스의 모든 쿼드로 구성된 새 데이터 세트를 반환합니다.[Symbol.iterator]
- 위의 예제에서와 같이 데이터 세트의 모든 quads
에 반복 할 수 있도록 반복자 프로토콜을 구현합니다. 스토어는 표준 Dataset
인터페이스 (문서) 외에도 다음 조작 방법을 구현합니다.
addQuad
addQuads
쿼드 배열을 삽입합니다removeQuad
removeQuads
remove
removeMatches
deleteGraph
createBlankNode
사용하지 않은 빈 노드 식별자를 반환합니다매장은 다음 검색 방법 (문서)을 제공합니다.
match
주어진 패턴과 일치하는 쿼드의 스트림과 생성기를 반환합니다.getQuads
주어진 패턴과 일치하는 쿼드 배열을 반환합니다.countQuads
주어진 패턴과 일치하는 쿼드 수를 계산합니다.forEach
모든 일치하는 쿼드에서 콜백을 실행합니다every
반환됩니다.some
일치하는 쿼드의 콜백이 적어도 한 번은 true를 반환하는지 여부를 반환합니다.getSubjects
일치하는 쿼드에서 발생하는 고유 한 주제 배열을 반환합니다.forSubjects
일치하는 쿼드에서 발생하는 고유 한 주제에 대한 콜백을 실행합니다.getPredicates
일치하는 쿼드에서 발생하는 고유 한 선행 배열을 반환합니다.forPredicates
일치하는 쿼드에서 발생하는 고유 한 곤경에서 콜백을 실행합니다.getObjects
일치 쿼드에서 발생하는 고유 한 객체 배열을 반환합니다.forObjects
일치 쿼드에서 발생하는 고유 한 객체에서 콜백을 실행합니다.getGraphs
일치 쿼드에서 발생하는 고유 한 그래프 배열을 반환합니다.forGraphs
일치하는 쿼드에서 발생하는 고유 한 그래프에서 콜백을 실행합니다. N3.JS는 다음과 같이 추론을 지원합니다.
import { Reasoner , Store , Parser } from 'n3' ;
const parser = new Parser ( { format : 'text/n3' } ) ;
const rules = `
{
?s a ?o .
?o <http://www.w3.org/2000/01/rdf-schema#subClassOf> ?o2 .
} => {
?s a ?o2 .
} .
`
const rulesDataset = new Store ( parser . parse ( rules ) ) ;
const dataset = new Store ( /* Dataset */ )
// Applies the rules to the store; mutating it
const reasoner = new Reasoner ( store ) ;
reasoner . reason ( rules ) ;
참고 : N3.JS는 현재 전제 및 결론에서 기본 그래프 패턴의 규칙 만 지원합니다. 내장 및 후진 체인은 지원되지 않습니다 . 모든 표기법 3 추론 기능을 지원하는 RDF/JS 추론에 대해서는 Eye-JS를 참조하십시오.
N3.JS 파서 및 작가는 다음 W3C 사양과 완전히 호환됩니다.
또한 N3.JS 파서는 또한 표기법 3 (N3)도 지원합니다 (아직 공식 사양 없음).
N3.JS 파서 및 작가는 W3C 사양의 RDF-Star 변형과 완전히 호환됩니다.
기본 모드는 허용되며 rdf-star를 포함한 다양한 구문을 혼합 할 수 있습니다. 엄격하고 결함이없는 동작에 대한 형식의 이름 또는 마임 유형의 형식을 생성자에게 format
옵션을 전달하십시오. 형식 문자열에 star
또는 *
(예 : turtlestar
또는 TriG*
)가 포함 된 경우 해당 형식에 대한 RDF-Star 지원이 활성화됩니다.
N3.JS 서브 모듈은 다음 rdf.js 인터페이스와 호환됩니다.
N3.DataFactory
DataFactory
을 구현합니다Term
와 NamedNode
, BlankNode
, Literal
, Variable
, DefaultGraph
중 하나를 생성하는 용어Term
, Triple
및 Quad
생성합니다.N3.StreamParser
Stream
과 Sink
구현합니다N3.StreamWriter
Stream
과 Sink
구현합니다N3.Store
Store
Source
Sink
DatasetCore
를 구현합니다 N3.JS 라이브러리는 Ruben Verborgh에 의해 저작권을 갖고 MIT 라이센스에 따라 릴리스됩니다.
기부금을 환영하며 버그 보고서 또는 풀 요청이 항상 도움이됩니다. 더 큰 기능을 구현하려는 경우 먼저 저에게 연락하는 것이 가장 좋습니다.