
يوفر Walder طريقة سهلة لإعداد موقع ويب أو واجهة برمجة تطبيقات الويب أعلى الرسوم البيانية المعرفة اللامركزية. تتضمن الرسوم البيانية المعرفة البيانات مع معنى تلك البيانات. هذا يجعل من الممكن دمج البيانات من الرسوم البيانية المعرفة المتعددة ، حتى لو كانت الأطراف المختلفة المستقلة تحافظ عليها أو استضافتها. يمكن استضافة الرسوم البيانية المعرفة عبر القرون الصلبة ، ونقاط النهاية sparql ، وواجهات شظايا النمط الثلاثي ، وملفات RDF ، وما إلى ذلك. باستخدام مفاوضات المحتوى ، يجعل Walder البيانات في هذه الرسوم البيانية المعرفة المتاحة للعملاء عبر HTML و RDF و JSON-LD. يحدد المستخدمون في ملف التكوين الذي يستخدمه Walder البيانات وكيفية معالجته لهذه البيانات. اكتشف أي واجهات برمجة التطبيقات التي تم بناؤها مع Walder هنا.
جدول المحتويات
تثبيت Walder على مستوى العالم عبر yarn global add walder .
للتنمية ، اتبع هذه الخطوات:
yarn install .$ yarn global add file:$(pwd) . يتوفر Walder كمكتبة CLI و JavaScript.
Usage: walder [options]
Options:
-v, --version output the version number
-c, --config < configFile > YAML configuration file input
-p, --port [portNumber] server port number (default: 3000)
-l, --log [level] enable logging and set logging level (one of [error, warn, info, verbose, debug]) (default: " info " )
--no-cache disable Comunica default caching
--lenient turn Comunica errors on invalid data into warnings
-h, --help output usage information // From the root directory
const Walder = require ( '.' ) ;
const configFilePath = 'path/to/configfile' ;
const port = 9000 ; // Defaults to 3000
const logging = 'info' ; // Defaults to 'info'
const cache = false ; // Defaults to true
const lenient = true ; // Defaults to false
const walder = new Walder ( configFilePath , { port , logging , cache , lenient , cwd } ) ;
walder . activate ( ) ; // Starts the server
walder . deactivate ( ) ; // Stops the serverتكتب ملف تكوين في YAML بعد مواصفات OpenAPI 3.0. يجب أن يحتوي ملف التكوين على الهيكل التالي:
openapi : 3.0.2
info : # OpenAPI metadata
title : ' Example site '
version : 0.1.0
x-walder-resources : # Directories used by Walder - OPTIONAL
root : # Path to the root folder of the directories used by Walder (absolute or relative to the directory containing the config file) - OPTIONAL (default: .)
views : # Path to directory containing view template files (absolute or relative to the root folder) - OPTIONAL (default: views)
pipe-modules : # Path to directory containing local pipe modules (absolute or relative to the root folder) - OPTIONAL (default: pipe-modules)
public : # Path to directory containing all files that should be available statically (e.g. stylesheets) (absolute or relative to the root folder) - OPTIONAL (default: public)
layouts : # Path to directory containing all layout template files that can be used by view template files (absolute or relative to the root folder) - OPTIONAL (default: layouts)
x-walder-datasources : # Default list of data sources
- ... # E.g. link to SPARQL endpoint or a GraphQL-LD query
paths : # List of path entries
path-entry-1 :
...
path-entry-2 :
...
x-walder-errors : # Default error page views - status codes with files containing the HTML view template (absolute path or relative to the views directory)
404 : ...
500 : ...
... يحتوي مفتاح x-walder-resources لملف التكوين على مسارات إلى الدلائل التي تستخدمها Walder. هذا المفتاح وقيمه اختياري. إذا لم يعطي المستخدم مسارات ، يستخدم Walder القيم الافتراضية التالية بالنسبة إلى دليل ملف التكوين.
root : .
views : views
pipe-modules : pipe-modules
public : public
layouts : layouts لمنع Walder من جعل الملفات الخاطئة علنية ، عندما لا يمنح المستخدم طريقًا إلى المجال public ، public Walder بإنشاء دليل جديد إذا لم يجد هذا الدليل في دليل العمل الحالي ويستخدم ذلك.
يحدد إدخال المسار مسارًا ولديه الهيكل التالي:
path : # The path linked to this query
request : # The HTTP request type (GET, POST, etc.)
summary : ... # Short description
parameters : # Path variables/Query parameters
- in : ... # 'path' or 'query'
name : ... # Name of the parameter
schema :
type : ... # Type of the parameter
description : ... # Description of the parameter
x-walder-query :
graphql-query : ... # One or more GraphQL queries
json-ld-context : ... # The JSON-LD corresponding to the GraphQL query
sparql-query : ... # One or more SPARQL queries
json-ld-frame : ... # A JSON-LD frame that should be applied to the result of a SPARQL query
options : # Global options that will be applied to all the graphql-queries of this path (OPTIONAL)
datasources : # Query specific datasources (OPTIONAL)
additional : ... # Boolean stating that the following datasources are meant to be used on top of the default ones
sources : # List of query specific datasources
- ... # E.g. link to SPARQL endpoint
x-walder-postprocessing : # The (list of) pipe modules used for postprocessing
module-id : # Identifier of the pipe module
source : ... # Path leading to source code of the pipe module (absolute path or relative to the pipe-modules directory)
parameters : # the parameters for the pipe module (OPTIONAL)
- _data # (DEFAULT) this gives all the data, but all paths in the data object are supported (e.g. _data.0.employee)
- ... # Additional parameters if your function supports those (OPTIONAL)
responses : # Status codes with files containing the HTML view template (absolute path or relative to the views directory)
200 : ... # (REQUIRED)
500 : ... # (OPTIONAL)يبدأ الأمر التالي خادمًا على المنفذ 3000 (افتراضي) باستخدام ملف تكوين مثال.
$ walder -c example/config.yaml
سيبدأ هذا خادمًا على localhost:3000 مع الطرق التالية:
في إدخال المسار أعلاه ، حدد المستخدم options كمعرف عالمي (اختياري) يستخدمه Walder لكل استعلام لهذا المسار. لدينا خياران حيث يمكننا الاختيار من بين: sort remove-duplicates . مع بناء الجملة:
options :
sort : # Enable sorting on the data (OPTIONAL)
object : # JSONPath to the object you want to sort for
selectors : # The values inside the object over which you want to sort
- ... # The default option when you want ascending order, just give the value (JSONPath notation supported for further nesting)
- value : ... # When you want descending order, specify the value/order (JSONPath notation supported for further nesting)
order : desc
remove-duplicates : # Enable the removal of duplicates of the data (OPTIONAL)
object : ... # The JSONPath tot the object that you want to compare
value : ... # The value that has to be compared to determine whether it's duplicate (JSONPath notation is also supported for further nesting) إذا كنت لا تريد أن تكون options عالمية للمسار بأكمله ، فيمكنك تحديد options لكل استعلام.
path : # The path linked to this query
request : # The HTTP request type (GET, POST, etc.)
summary : ... # Short description
parameters : # Path variables/Query parameters
- in : ... # 'path' or 'query'
name : ... # Name of the parameter
schema :
type : ... # Type of the parameter
description : ... # Description of the parameter
x-walder-query :
graphql-query : ... # One or more GraphQL queries
name :
query : ... # The GraphQL query
options : # options that will be applied only to this specific graphql-query (OPTIONAL)
...يبدأ الأمر التالي خادمًا باستخدام ملف التكوين هذا.
$ walder -c example/config-sorting-duplicates.yaml
سيبدأ هذا خادمًا على localhost:3000 مع الطرق التالية:
يمكنك تقسيم ملف التكوين في ملفات متعددة ، باستخدام الكلمة الرئيسية $ref . نتبع Spec Openapi 3.0 الذي يشرح كيفية استخدام المرجعية.
عند الرجوع لأول مرة ، تحتاج إلى استخدام المسار الذي يبدأ من دليل ملف التكوين ، ولكن إذا كان الملف المرجع به مراجع ، فيمكنه استخدام المسارات المتعلقة بموقعه الخاص ، كما هو موضح أدناه.
ملف التكوين الفعلي يشير إلى مساراته
openapi : 3.0.2
info :
title : ' Example site '
version : 0.1.0
x-walder-resources :
path : ./
views : views
pipe-modules : pipeModules
public : public
x-walder-datasources :
- http://fragments.dbpedia.org/2016-04/en
paths :
/music/{musician} :
$ref : ' ./paths/music_musician.yaml '
/movies/{actor} :
$ref : ' ./paths/movies_actor.yaml '
x-walder-errors :
404 :
description : page not found error
x-walder-input-text/html : error404.html
500 :
description : internal server error
x-walder-input-text/html : error500.html أدناه ترى ./example/paths/movies_actor.yaml مع مرجع مع المسار بالنسبة لموقعه الخاص
get :
summary : Returns a list of the all movies the given actor stars in
parameters :
- in : path
name : actor
required : true
schema :
type : string
description : The target actor
x-walder-query :
$ref : ' ../walderQueryInfo/movies_actor_info.yaml '
responses :
200 :
description : list of movies
x-walder-input-text/html : movies.pug
باستخدام مفاوضات المحتوى ، يتيح Walder تنسيقات الإخراج التالية:
يستخدم Walder GraphQL-LD-Comunica لتنفيذ استعلامات GraphQL و @comunica/query-sparql لتنفيذ استعلامات sparql. نتيجة استعلام GraphQL-LD هي بيانات JSON. Walder أولاً يحولها إلى JSON-LD. هذا يتيح التحويل إلى تنسيقات RDF الأخرى أثناء التفاوض على المحتوى. نتيجة استعلام sparql هي مجموعة من الكواد. إذا تم تحديد إطار JSON-LD ، يتم تحويل الكواد إلى JSON-LD. نظرًا لأهمية التفاوض على المحتوى ، يتم دعم استفسارات البناء فقط.
يستخدم Walder دمجًا لاسترداد المحرك المقابل تلقائيًا لقالب معين. هذا يعني أن محركات القالب المدعومة تعتمد على الدمج.
يمكنك استخدام محركات قوالب مختلفة لطرق مختلفة ، على سبيل المثال ، يقوم Pug بإعداد HTML لمسار واحد ، في حين أن المقابض تجعل HTML لمسار آخر. يفعل Walder كل هذا من خلال النظر في ملحق ملف القالب المعطى.
يمكن استخدام القوالب في طرق العرض وكذلك في التخطيطات. لذلك سنقوم بتسمية قوالب عرضهم وقوالب التخطيط من أجل التمييز.
تتوفر نتائج الاستعلامات ، المحددة في ملف التكوين للمسار ، لتقديمها في القوالب كبيانات.
data . في حالة استعلام GraphQL-LD ، سيكون كل كائن صفيفًا ، ما لم يتم تمييز الاستعلام. Songs.HandleBars هو مثال على استهلاك نتيجة الاستعلام الفردي في المسار /music/{musician} في ملف التكوين هذا. Songs_movies.handlebars هو مثال على استهلاك نتائج الاستعلامات في الطريق /artist/{artist} في ملف التكوين هذا.
في حالة استعلام sparql ، يكون كل كائن مجموعة من الكواد إذا لم يتم تحديد إطار JSON-LD. وإلا سيكون كائن JSON-LD.
يعد استخدام التخطيطات طريقة رائعة لتجنب التكرار في قوالب العرض الخاصة بالمسار. من الأفضل تحديد هياكل HTML القابلة لإعادة الاستخدام مثل الرؤوس وتذييلات وأشرطة التنقل وغيرها من المحتويات ، والتي تهدف إلى الظهور في طرق متعددة ، في ملفات التخطيط .
يمكن تحديد ملف قالب تخطيط في ملف قالب عرض ، عن طريق layout حقل البيانات الوصفية الأمامية. يجب أن يحتوي على اسم ملف ، متاح في موقع layouts المحدد في ملف التكوين. قد يحتوي على مسار نسبي أمام اسم الملف.
مثال على عرض ملف قالب تحديد تخطيط:
---
layout: my-layout.pug
---
// view template continues here
يضع Walder محتويات HTML الداخلية التي تم إنشاؤها من ملف قالب العرض في البيانات التي تمت إعادة توجيهها إلى ملف قالب التصميم content مسمى.
ملف قالب التخطيط هو قالب آخر. عادة ما يوسع محتويات HTML الداخلية في الموضع الذي يختاره.
مثال بوج بسيط (ضع في اعتبارك !{content} ):
doctype html
html(lang="en")
head
title I'm based on a layout
body !{content}
بالإضافة إلى نتائج الاستعلام ، يضيف Walder بيانات تعريف الأمامية ، المحددة في قوالب العرض ، كسمات إضافية للبيانات.
اسم كل سمة إضافية يساوي اسم حقل البيانات الوصفية المقدمة. تم حجز حقل البيانات الوصفية التالية: layout content data والأسماء المعينة للاستعلامات في الطرق التي لها استعلامات متعددة (انظر أعلاه).
تتوفر هذه السمات لقالب العرض وإلى قالب التخطيط الذي يشير إليه ، إن وجد.
مثال على عرض ملف قالب تحديد حقل بيانات تعريف الأمامي وقراءة هذا الحقل (ضع في اعتبارك #{a1} ):
--
a1: Value for FrontMatter attribute a1!
---
doctype html
html(lang="en")
body
main a1: #{a1}
مثال ، ملف عرض قالب عرض ، تحديد قالب تخطيط وحقل بيانات تعريف أمامي آخر:
---
layout: layout-fm.pug
a2: Value for FrontMatter attribute a2!
---
main Lorem ipsum
مثال على قالب التخطيط المقابل (تخطيط-FM.Pug) قراءة هذا الحقل (ضع في اعتبارك #{a2} ):
doctype html
html(lang="en")
head
if a2
title #{a2}
body !{content}
أثناء تحليل ملف التكوين ، يقوم Walder أيضًا بالتحقق من صحة واكتمال الإدخال. عندما قام Walder بتحليل ملف التكوين بالكامل ووجد أخطاء ، يقوم Walder بإرجاع جميع الأخطاء والخارج.
في الوقت الحالي ، يتحقق والدر من ما يلي:
200~x-walder-input-text/html . يرتبط Walder صفحات الخطأ برمز حالة HTTP معين. يمكنك تحديد صفحات الأخطاء الافتراضية ، ولكن أيضًا صفحات خطأ محددة من خلال إضافتها إلى مفتاح responses في إدخال المسار المقابل.
404 : الصفحة لم يتم العثور عليها500 : خطأ الخادم الداخلي 500 : لا يمكن تطبيق وحدات الأنابيب المحددة 404 : لم يتم إعطاء المتغير المتوقع500 : لا يمكن تنفيذ الاستعلام المحددعند تشغيل Walder باستخدام الأمر التالي:
$ walder -c example/config-errors.yaml
المسارات التالية تؤدي إلى أخطاء:
404 (Global: page not found)500 (وحدات الأنابيب: لا يمكن تطبيق وحدات الأنابيب المحددة)500 (GraphQL-LD: لا يمكن تنفيذ الاستعلام المحدد) سيستخدم مقتطفات ملف التكوين التالي مع قالب عرض PATH الخاص بـ PATH moviesServerError.handlebars على الأخطاء التي تؤدي إلى رمز الحالة 500 عند التنقل إلى /movies .
عندما لا يتم تمرير actor معلمة الاستعلام المطلوب ، يعيد Walder رمز الحالة 404 . سيستخدم Walder ملف error404.html الافتراضي نظرًا لأن ملف التكوين لا يحتوي على قالب عرض HTML الخاص بالمسار للحالة المقابلة.
...
paths :
/movies :
get :
summary : Returns a list of the all movies the given actor stars in
parameters :
- in : query
name : actor
schema :
type : string
minimum : 0
description : The actor from whom the movies are requested
required : true
x-walder-query :
graphql-query : >
{
id @single
... on Film {
starring(label: $actor) @single
}
}
json-ld-context : >
{
"@context": {
"Film": "http://dbpedia.org/ontology/Film",
"label": { "@id": "http://www.w3.org/2000/01/rdf-schema#label", "@language": "en" },
"starring": "http://dbpedia.org/ontology/starring"
}
}
responses :
200 :
description : list of movies
x-walder-input-text/html : movies.pug
500 :
description : internal movie server error
x-walder-input-text/html : moviesServerError.handlebars
x-walder-errors :
404 :
description : page not found error
x-walder-input-text/html : error404.html
500 :
description : internal server error
x-walder-input-text/html : error500.html أثناء تطوير موقع الويب الخاص بك ، ربما تريد إعادة تحميل موقع الويب الخاص بك أثناء إجراء تغييرات على config.yaml . يمكنك القيام بذلك بسهولة باستخدام NPM-Watch. شاهد مقتطف package.json أدناه حول كيفية البدء
{
"watch" : {
"run" : " config.yaml "
},
"scripts" : {
"run" : " walder -c config.yaml --no-cache " ,
"watch" : " npm-watch "
},
"dependencies" : {
"walder" : " ^2.0.1 "
},
"devDependencies" : {
"npm-watch" : " ^0.7.0 "
}
} تشغيل npm run watch و Walder إعادة تحميل كل config.yaml تغيير!
| مكتبة | رخصة |
|---|---|
| comunica | معهد ماساتشوستس للتكنولوجيا |
| يقبل | معهد ماساتشوستس للتكنولوجيا |
| البديهية | معهد ماساتشوستس للتكنولوجيا |
| تشاي | معهد ماساتشوستس للتكنولوجيا |
| قائد | معهد ماساتشوستس للتكنولوجيا |
| توحيد | معهد ماساتشوستس للتكنولوجيا |
| تصحيح | معهد ماساتشوستس للتكنولوجيا |
| يعبر | معهد ماساتشوستس للتكنولوجيا |
| الواجهة الأمامية | معهد ماساتشوستس للتكنولوجيا |
| FS-Extra | معهد ماساتشوستس للتكنولوجيا |
| GraphQl-LD | معهد ماساتشوستس للتكنولوجيا |
| GraphQl-Ld-Comunica | معهد ماساتشوستس للتكنولوجيا |
| المقاود | معهد ماساتشوستس للتكنولوجيا |
| IS-HTML | معهد ماساتشوستس للتكنولوجيا |
| اليشم إلى الولادة | معهد ماساتشوستس للتكنولوجيا |
| json-refs | معهد ماساتشوستس للتكنولوجيا |
| jsonld | BSD-3-cause |
| Jsonpath | معهد ماساتشوستس للتكنولوجيا |
| تخفيض الطلب | معهد ماساتشوستس للتكنولوجيا |
| موكا | معهد ماساتشوستس للتكنولوجيا |
| مورغان | معهد ماساتشوستس للتكنولوجيا |
| N3 | معهد ماساتشوستس للتكنولوجيا |
| مسار الكائن | معهد ماساتشوستس للتكنولوجيا |
| الصلصال | معهد ماساتشوستس للتكنولوجيا |
| اختبار العواري | معهد ماساتشوستس للتكنولوجيا |
| TMP | معهد ماساتشوستس للتكنولوجيا |
| وينستون | معهد ماساتشوستس للتكنولوجيا |
| يامل | ISC |
هل قمت ببناء شيء Walder وترغب في إضافته إلى القائمة؟ الرجاء إنشاء طلب سحب!
هذا الرمز محمي بحقوق الطبع والنشر © 2019-2020 من جامعة غنت - IMEC وإصداره بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.