RDFS
RDF היא שפה כללית אשר אפשרה לנו לתאר משאבים ע"י שימוש באוצר המילים שלנו, RDF לא הניחה שום דבר לגבי היקף אוצר המילים הספציפי שבו בחרנו להשתמש לצורך תיאור משאב מסוים, לצורך הוספת יכולת זו או למעשה לצורך הגבלת "אוצר המילים"- vocabulary אנו נשתמש בRDFS- RDF SCHEMA.
כלומר, למעשה כול מה שעשינו עד עכשיו בRDF היה למעשה תיאור של INSTANCES (מופעים) ספציפיים של משאבים.
לצורך יצירת סכמה אנו למעשה ניצור קובץ RDF מיוחד בו יש להוסיף בתחילתו את המזהה:
Xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#
כלומר זהו קובץ RDF הכולל הגדרת סכמה הוא אוסף של משאבים ותכונותיהם אשר מאפשרים למשתמש בו להגדיר את אוצר המילים המבוקש לתחום מסוים.
הרעיון הכללי הוא הגדרת מחלקות וקישור בין מופעים ספציפיים למחלקות
כאשר מחלקה היא למעשה קבוצה של דברים עם תכונות/ מאפיינים וכן תחום DOMAIN וטווח RANGE משותפים. נא שימו לב כי תהליך בניית המחלקה שונה לוגית מהתהליך שהיינו עושים ב C# היינו בונים מחלקה ואז מכניסים לתוכנה את כול חלקיה כלומר מלמעלה למטה-top down approach כאן בRDFS הלוגיקה אחרת מתחילים מלמטה למעלה- bottom up approach כלומר מגדירים מחלקות ללא! תכולה ואח"כ מחברים תכונות למחלקות רלוונטיות.
כאשר תחום המחלקה זה הגבלה על הערכי התכונות שהיא יכולה לכלול וטווח זה הגבלה על התכונות שהיא יכולה לכלול.
מחלקה יכולה להיות קשורהRELATE למחלקה אחרת או יורשת INHERIT ממנה.
להלן טבלת רכיבים חשובים בהגדרת סכמת RDF
שם |
משמעות |
rdfs:Class |
אלמנט אשר מגדיר קבוצה של דברים קשורים שחולקים תכונות תחומים וטווחים |
rdfs:label |
מאפיין אשר מגדיר תווית קריאה לאדם למחלקה |
rdfs:subClassOf |
אלמנט אשר מגדיר שמחלקה זו היא למעשה מקרה פרטי SPECIALIZATION של מחלקה יותר כללית |
rdf:property |
אלמנט אשר מגדיר תכונה של מחלקה ואת טווחו |
rdfs:domain |
תכונה זו מגדירה לאיזו מחלקה תכונה זו שייכת, ערך התכונה חייב להיות מוגדר קודם כמחלקה |
rdfs:range |
תכונה זו את הערכים החוקיים לאלמנט ערך התכונה חייב להיות מחלקה שהוגדרה קודם, |
rdf:type |
תכונה סטנדרטית זו יוצרת הקשר בין נושא – מופע ספציפי למחלקה שהוגדרה בסכמה |
rdfs:subPropertyOf |
תכונה שמגדירה שנושא של תכונה הוא תת תכונה של תכונה אחרת קיימת |
rfds:seeAlso |
תכונת שירות אשר מאפשרת להגדיר קשר למסמך RDF שכולל מידע רלוונטי נוסף לגבי מרחב השמות הנוכחי |
rdfs:isDefinedby |
תכונה אשר מגדירה את טווח השמות של נושא זוהי תת תכונה של rdfs:seeAlso בד"כ משתמשים בזה בשביל לקשר למסמך RDFS |
rdfs:comment |
תכונת שירות אשר מוסיפה מידע תיאורי- הערה על המחלקה ומאפייניה |
rdfs:literal |
תכונה אשר שמייצגת מחרוזת ערך קבוע |
rdfs:XMLiteral |
תכונה אשר מייצגת ערך קבוע במבנה XMLי |
תהליך העבודה ליצירת קובץ RDFS:
לפני תחילת הכתיבה יש לקבוע מהם המחלקות ומהם התכונות של המחלקה,
בעיקרון נקבע כמחלקה כול דבר שנרצה לדבר עליו בקובץ נתוני RDF כמשאב בקטע rdf:Description אשר בתוכו יהיה קישור למחלקה בעזרת rdf:type , כול שאר הדברים יהיו תכונות של המחלקה.
הערה חשובה:
נניח כי יש לנו פרטי מידע אלו: עמיחי פיגנבוים אשר מזה שלו הוא 1234 מלמד קורס ניהול אתרים מזהה 3586601
כמן כן נתונה לנו מחלקה בשם Course ותכונות של המחלקה: coursename ו istaughtby
ניתן ב2 דרכים לכתוב השימוש בה בRDF:
<rdf:description rdf:ID="crs3586601">
<rdf:type rdf:resource="#Course"/>
<uni:coursename>site admins</uni:coursename>
<uni:istaughtby rdf:resource="#lctr1234"/>
</rdf:description>
או לחילופין במקוצר:
<uni:course rdf:ID="crs3586601" uni:coursename="site admins">
<uni:istaughtby rdf:resource="#lctr1234"/>
</uni:course>
כלומר זה דומה למה שהיינו עושים בחלוקה לטבלאות בבסיסי נתונים טבלאיים, נזהה את הישויות אלו יהיו המחלקות/ טבלאות ואת המאפיינים שלהם אלו יהיו השדות/ טורים/ תכונות המחלקה.
דוגמא לשימוש בSUBCLASSOF:
<rdfs:Class
rdf:ID="animal" />
<rdfs:Class rdf:ID="horse">
<rdfs:subClassOf rdf:resource="#animal"/>
</rdfs:Class>
כול יכולות הRDF שהכרנו כגון האוספים, הראיפיקציה גם מוכרים בRDFS
נניח כי אנו רוצים לייצג מידע אודות סטודנט ולימודיו באוניברסיטה,
מניתוח השאלה עולה לפחות חלוקה זו:
מרצים: שם מרצה
קורס: הפרטים: כותר קורס מרצה ושנה ומזהה
סטודנט: שם משפחה, שם פרטי, אימייל ומזהה
לימודי סטודנט בקורס: מזהה סטודנט, מזהה קורס וציון.
דוגמה למסמך שכולל RDFS וכן נתונים אשר משתמשים בה:
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:uni="http://www.computing-services.co.il"
xml:base="http://www.computing-services.co.il">
<rdfs:Class
rdf:ID="Student">
<rdfs:comment>
the
class of Student
</rdfs:comment>
</rdfs:Class>
<rdf:Property
rdf:ID="Fname">
<rdfs:comment>
Student
first name property of student
</rdfs:comment>
<rdfs:domain
rdf:resource="#Student"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdf:Property
rdf:ID="Lname">
<rdfs:comment>
Student
last name property of student
</rdfs:comment>
<rdfs:domain
rdf:resource="#Student"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdf:Property
rdf:ID="Email">
<rdfs:comment>
Student
Email property of student
</rdfs:comment>
<rdfs:domain
rdf:resource="#Student"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdfs:Class
rdf:ID="Lecturer">
<rdfs:comment>
the
class of Lecture
</rdfs:comment>
</rdfs:Class>
<rdf:Property
rdf:ID="Name">
<rdfs:comment>
lecture
name property
</rdfs:comment>
<rdfs:domain
rdf:resource="#Lectruer"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdfs:Class
rdf:ID="Course">
<rdfs:comment>
the
class of Course
</rdfs:comment>
</rdfs:Class>
<rdf:Property
rdf:ID="Title">
<rdfs:comment>
Course
Title property of Course
</rdfs:comment>
<rdfs:domain
rdf:resource="#Course"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdf:Property
rdf:ID="CourseLecturer">
<rdfs:comment>
Course
Lecture property of Course
</rdfs:comment>
<rdfs:domain
rdf:resource="#Course"/>
<rdfs:range
rdf:resource="#Lecturer"/>
</rdf:Property>
<rdf:Property
rdf:ID="Year">
<rdfs:comment>
Course
Year property of Course
</rdfs:comment>
<rdfs:domain
rdf:resource="#Course"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<rdfs:Class
rdf:ID="StudentCourses">
<rdfs:comment>
the
courses taken by the
student
</rdfs:comment>
</rdfs:Class>
<rdf:Property
rdf:ID="StudentId">
<rdfs:comment>
Student
id property of Student
Courses
</rdfs:comment>
<rdfs:domain
rdf:resource="#StudentCourses"/>
<rdfs:range
rdf:resource="#Student"/>
</rdf:Property>
<rdf:Property
rdf:ID="CourseId">
<rdfs:comment>
Course
id property of Student Courses
</rdfs:comment>
<rdfs:domain
rdf:resource="#StudentCourses"/>
<rdfs:range
rdf:resource="#Course"/>
</rdf:Property>
<rdf:Property
rdf:ID="Grade">
<rdfs:comment>
Grade
property of Student Courses
</rdfs:comment>
<rdfs:domain
rdf:resource="#StudentCourses"/>
<rdfs:range
rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
</rdf:Property>
<uni:Student
rdf:ID="std01">
<uni:Fname>
ploni
</uni:Fname>
<uni:Lname>
almoni
</uni:Lname>
<!--
<uni:doel>
[email protected]
</uni:doel>
-->
<uni:Email>
[email protected]
</uni:Email>
</uni:Student>
<uni:Lecture
rdf:ID="lctr01">
<uni:Name>
Amichai
feigenboim
</uni:Name>
</uni:Lecture>
<uni:Course
rdf:ID="crs01">
<uni:Title>
Semantic
Web
</uni:Title>
<uni:CourseLecturer
rdf:resource="#lctr01"/>
</uni:Course>
<uni:StudentCourses
rdf:ID="std01crs01">
<uni:StudentId
rdf:resource="#std01"/>
<uni:CourseId
rdf:resource="#crs01"/>
<uni:Grade>
90
</uni:Grade>
</uni:StudentCourses>
</rdf:RDF>
תרגיל כיתה 1:
נא לשנות את צורת כתיבת פרטי המידע אשר מבוססים על בRDFS כך שיכתבו לפי הצורה המקוצרת,
נא הוסיפו עוד 2 מרצים, 3 קורסים , יש להוסיף לסטודנט הקיים עוד קורס, ולהוסיף עוד סטודנט עם 3 קורסים
תרגיל כיתה 2:
מצ"ב תרשים מפורט למבנה RDFS ופריט מידע RDF נא ליצר אותו:
תרגיל כיתה 3:
להלן תרשים ללא פרטים- באילו רכיבים להשתמש נא תרגמו אותו לRDFS בלבד.