Aplicatii Web bazate pe semantica, agenti si servicii

Post on 22-Jan-2016

20 views 0 download

description

http://turing.cs.pub.ro/webs_07. Aplicatii Web bazate pe semantica, agenti si servicii. Universitatea Politehnica Bucuresti Anul universitar 2007-2008, Master Adina Magda Florea. Curs 3. XML RDF OWL. 1. XML. Sintaxa care descrie continutul; elemente XML - PowerPoint PPT Presentation

Transcript of Aplicatii Web bazate pe semantica, agenti si servicii

Aplicatii Web bazate pe semantica, agenti si servicii

Universitatea Politehnica BucurestiAnul universitar 2007-2008, MasterAdina Magda Florea

http://turing.cs.pub.ro/webs_07

Curs 3

XML RDF OWL

1. XML Sintaxa care descrie continutul; elemente XML Corespunde unui arbore. Un element are marcaje

(taguri) de inceput si sfarsit Elementele pot avea unul sau mai multe atribute,

fiecare cu o valoare asociata<temperature scale="Celsius">

Un document XML are un singur element de top-level

Restrictii Fiecare element care incepe cu un tag trebuie sa se

termine cu unul nu pot exista 2 atribute cu acelasi nume intr-un element

XML

XML defineste taguri specifice domeniului (spre deosebire de HTML – formatare)

Extensibilitate XML – orice vocabular specific domeniului poate fi construit

Nu este suficient pt a transmite semantica dar are potential in acest sens

Posibilitatea confuziei intre vocabulare => namespace

Namespaces Identificare corecta = plasarea elementelor si atributelor intr-un

spatiu de nume diferit (namespace, prescurtat ns) Un ns este identificat prin URL lui specificat in doc XML Declaratia de ns leaga un prefix local la un URI a ns<?xml version="1.0"?><weather xmlns="http://www.temperature.org" xmlns:places= "http://www.temperature.org/places" <temperature scale="Celsius"> <value> 25</value>

<error> 2 </error> <temperature/> <places:latitude>33.23</places:latitude> <places:longitude>155.23</places:longitudine></weather>

ns implicit

prefix in ns

XML Schema Descrie structura unui set de documente similare +

elemente, atribute si valori implicite Poate impune tipuri de date O XML Schema este un document scris in XML care

descrie structuri si valori permise pentru date valide XML (meta-document)

Un validator (XSV= XML Schema Validator) este un program care verifica un document XML daca este conform cu un XML Schema

xsd – XML Schema Definition http://www.w3.org/2001/03/webdata/xsv

2. RDF

Ofera o baza pt reprezentarea cunostintelor Un limbaj simplu format din asertiuni

(instructiuni) care permite reprezentarea cunostintelor, de ex resurse

RDF utilizeaza idei din reprezentarea cunostintelor dar foloseste Web pt a face cunostintele larg disponibile

De ce RDF?

XML Specifica un arbore al documentului Nu identifica continutul documentului Permite reprezentari mltiple pentru acelasi continut

RDF exprima chiar continutul RDF surprinde structura de esenta pe cand XML

surprinde structura de suprafata RDF descrie grafuri in general Intelesul depinde de graf si nu de documentul care

descrie graful

Resurse si literali RDF permite descrierea resurselor O resursa este un obiect

pt care se poate da o descriere este identificat printr-un URI dar si printr-o descriere

abstracta (nu neaparat se mapeaza la o adresa de retea) Ex: docs, imags, videoclips, services, unele in afara

web (oameni, obiecte) Resursele se mapeaza conceptual pe entitati

Un literal este ceva mai simplu O valoare (string, integer, ..) Nu i se poate da o descriere exista literali cu tip: sirul + referinta URI la o XML

Schema care descrie tipul

Instructiuni sau triplete

RDF se bazeaza pe o gramatica simpla Un document RDF este o multime de

instructiuni sau triplete Fiecare instructiune este formata din

Subiect: o resursa Obiect: o resursa sau un literal Predicat: o resursa (proprietate rdf:Property) Subiectul este legat de obiect prin predicat

(predicate binare)

Sintaxa

In principiu, RDF nu este legat de XML, dar este cea mai comuna sintaxa Foloseste sintaxa standard a namespace din XML Namespaces definite de standardul RDF

Abreviate tipic prin rdf si rdfs

Conceptul de baza – identificarea resurselor rdf:ID rdf:ID este interpretat ca un fragment de identificator relativ la

URI de baza pentru contextul curent O valoare rdf:ID precedata de # corespunde unui URI relativ

care, apendat la URI de baza, creaza URI absolut

Sintaxa

rdf:ID – introduce resursa ce se defineste rdf:about – refera o resursa definita in alt loc Se pot defini tipuri ale obiectelor prin rdf:type

Exemplu (folosind Dublin Core)

<?xml version='1.0' encoding='UTF-8'?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-

syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description

rdf:about="http://www.wiley.com/SOC"> <dc:title>Service-Oriented Computing</dc:title> <dc:creator>Munindar</dc:creator> <dc:creator>Michael</dc:creator> <dc:publisher>Wiley</dc:publisher> </rdf:Description></rdf:RDF>

rdf:Description grupeaza instructiuni despre un subiectSet de metadate pentru descrierea resurselor

Reificare Reificarea unui concept = posibilitatea de a-l referi In RDF instructiunile sunt reificate pentru a permite

altor instructiuni sa le refere In acest scop se defineste rdf:Statement

Vazute ca resurse, toate instructiunile sunt de tipul rdf:type rdf:Statement

Fiecare rdf:statement are 3 proprietati de baza: rdf:subject, rdf: object, rdf:predicate

Astfel se pot accesa cele 3 componente ale unei instructiuni RDF – limbaj logic in care se pot exprima relatii binare si

conjunctii (nu se pot exprima negatii si disjunctii) Corespunde "exsitential-conjunctive logic"

3. OWL Web Ontological Language – specifica clase si proprietati

intr-o forma bazata pe DL O ontologie defineste clase si relatii intre clase OWL trebuie sa permita colectarea informatiilor din surse

multiple Aceasta este partial realizata prin posibilitatea de a importa

ontologii OWL – presupunerea lumii deschise Descrierea resurselor nu este limitata la un fisier sau un

context Clasa C1 poate fi definita in ontologia O1 dar poate fi

extinsa in alte ontologii C1 monotona

Nu se pot retrage informatii Pot fi contradictorii

OWL

Definitii clase

<owl:Class rdf:ID="Winery"/>

<owl:Class rdf:ID="Region"/>

<owl:Class rdf:ID="ConsumableThing"/>

Suporta superclase multiple

<owl:Class rdf:ID="Mamifer">

<rdfs:subClassOf rdf:resource="#Animal"/>

<rdfs:subClassOf rdf:resource="#Patruped"/>

</owl:Class>

OWL

O clasa este definita prin proprietatile ei Proprietati – o relatie binara intre 2 clase definita

pe baza de domeniu si codomeniu (range)<owl:objectPropery rdf:ID="areParinte">

<rdfs:domain rdf:resource="#Animal"/>

<rdfs:range rdf:resource="#Animal"/>

</owl:objectPropery>

O proprietate poate avea sub-proprietati Un individ se defineste ca un obiect al clasei<Mamifer rdf:ID="Rodo">

<areParinte> <Animal rdf:ID="#Cleo"/></areParinte>

</Mamifer>

Namespaces

Declaratii de XML namespace care incep cu un tag rdf:RDF

Ofera modalitatea de a interpreta neambigu identificatori

O ontologie OWL tipica incepe cu o serie de declaratii de ns

Declaratii

Document OWL – elementul de top level este rdf:RDF

Apoi se declara de obicei ns cheie: OWL, RDF, RDF Schema, XML Schema si alte ns specifice domeniului

Urmeaza o asertiune cu elementul owl:Ontology care specifica ca este vorba de o ontologie

Urmeaza codificarea versiunilor si eventual importarea altor ontologii

Declaratii de namespaces<rdf:RDF

xmlns ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xml:base ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xmlns:vin ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xmlns:food="http://www.w3.org/TR/2003/PR-owl-guide-20031215/food#"

xmlns:owl ="http://www.w3.org/TR/owl-ref/#"xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"xmlns:xsd ="http://www.w3.org/2001/XMLSchema#">

Primele doua declaratii – ns asociate cu aceasta ontologie Declara default namespace, indicand faptul ca numele fara prefixuri se

refera la ontologia curenta Declaratia a 3a identifica ns al ontologiei curente cu prefixul vin

http://www.w3.org/TR/owl-guide/

Declaratii de namespaces<rdf:RDF

xmlns ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xml:base ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xmlns:vin ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xmlns:food="http://www.w3.org/TR/2003/PR-owl-guide-20031215/food#"xmlns:owl ="http://www.w3.org/TR/owl-ref/#"xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"xmlns:xsd ="http://www.w3.org/2001/XMLSchema#">

A 4a declaratie identifica ns ontologiei suport food cu prefixul food: A 5a declaratie spune ca in acest document elementele prefixate de owl:

trebuie intelese ca referind obiecte din ns numithttp://www.w3.org/TR/owl-ref#

Aceasta este o declaratie OWL conventionala utilizata pentru a introduce vocabularul OWL

Declaratii de namespaces<rdf:RDF

xmlns ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xml:base ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xmlns:vin ="http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#"xmlns:food="http://www.w3.org/TR/2003/PR-owl-guide-20031215/food#"

xmlns:owl ="http://www.w3.org/TR/owl-ref/#"xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"xmlns:xsd ="http://www.w3.org/2001/XMLSchema#">

OWL depinde de constructii definite de tipurile de date din RDF, RDFS si XML Schema. In acest document, prefixul rdf: se refera la elemente din ns xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

Urmatoarele doua declaratii de ns spun acelasi lucru despre tipurile de date din RDF Schema (rdfs:) si cele din XML Schema (xsd:)

Declararea entitatilor

In OWL referim (des) identificatorii utilizand valori de atribute. Acestea pot fi scrise complet, de exemplu:"http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#merlot"

sau utilizand abrevierile cu ajutorul definitiei unei entitati ENTITY, de exemplu:<!DOCTYPE rdf:RDF [ <!ENTITY vin "http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#" > <!ENTITY food "http://www.w3.org/TR/2003/PR-owl-guide-20031215/food#" >]>

Dupa aceste definitii, putem scrie:"&vin;merlot" care se va expanda la:"http://www.w3.org/TR/2003/PR-owl-guide-20031215/wine#merlot"

Header-ul ontologiei

<owl:Ontology rdf:about=""> <rdfs:comment>An example OWL ontology</rdfs:comment> <owl:priorVersion

rdf:resource="http://www.w3.org/TR/2003/CR-owl-guide-1a/wine"/> <owl:imports rdf:resource="http://www.w3.org/TR/2003/PR-owl-guide-1b/food"/> <rdfs:label>Wine Ontology</rdfs:label>...</owl:Ontology>

owl:Ontology colecteaza meta-date despre ontologie owl:imports include (importa) o ontologie referita (poate esua)

Clase

Clasele definesc o multime de obiecte (instante) Clasele OWL corespund conceptelor din DL owl:Class – definita ca o subclasa a rdfs:Class Toate clasele OWL sunt membrii ai owl:Class

O clasa predefinita owl:Thing este varful ierarhiei de clase (T)

owl:Nothing – predefinita: nu are instante, este o subclasa a oricarei clase ()

Clase

Cateva exemple simple:<owl:Class rdf:ID="Winery"/>

<owl:Class rdf:ID="Region"/>

<owl:Class rdf:ID="ConsumableThing"/>

rdf:ID defineste numele clasei In cadrul documentului Region poate fi referit astfel:

rdf:resource="#Region"

<rdf:about="#Winery"/> poate fi utilizat pentru a referi clasa "Winery" pentru extindere/rafinare

Subclase Subclasele introduc o relatie de subsumare

<owl:Class rdf:ID="Pasta"> <rdfs:subClassOf rdf:resource="#ConsumableThing"/>...</owl:Class>

In DL echivalent cu Pasta ConsumableThing

Rafinare<owl:Class rdf:about="Pasta"> <rdfs:subClassOf rdf:resource="#EdibleThing"/> ...</owl:Class>

Pasta EdibleThing

Indivizi Descriu membrii ai clasei

Declaratie individ cu numele CentralCoastRegion ca un membru al clasei Region

<Region rdf:ID="CentralCoastRegion"/>

CentralCoastRegion: Region

Aceasta este echivalent cu<owl:Thing rdf:ID="#CentralCoastRegion">

<rdf:type rdf:resource="#Region"/></owl:Thing>

rdf:type este o proprietate RDF care leaga un individ de clasa in care este membru

Indivizi<Region rdf:ID="SantaCruzMountainsRegion">

<locatedIn rdf:resource="#CaliforniaRegion"/></Region>

<Winery rdf:ID="SantaCruzMountainVineyard"/>

<CabernetSauvignon rdf:ID="SantaCruzMountainVineyardCabernetSauvignon"> <locatedIn rdf:resource="#SantaCruzMountainsRegion"/> <hasMaker rdf:resource="#SantaCruzMountainVineyard"/></CabernetSauvignon>

<VintageYear rdf:ID="Year1998"> <yearValue rdf:datatype="&xsd;positiveInteger"> 1998 </yearValue></VintageYear>

Proprietati

Exista 2 tipuri de proprietati: Proprietati obiect

instante a owl:ObjectProperty leaga instantele a 2 clase domeniul si codomeniul = o instanta a owl:Class si sunt owl:Thing

(daca nu se specifica altfel)

Proprietati tip de date instante a owl:DatatypeProperty leaga instantele unei clase de instante ale unui tip de date domeniul este la fel, codomeiul este o instanta a rdfs:DataType si este

owl:DataRange

RDF rdf:Property (refera o proprietate ca un URI) – in OWL se separa

pred(x,y) – x: inst clasa y: inst clasa

pred(x,y) – x: inst clasa y: inst tip de date

Proprietati obiect

O secventa de elemente OWL sunt legate (implicit) conjunctiv

Exemple proprietati obiect

<owl:ObjectProperty rdf:ID="madeFromGrape">

<rdfs:domain rdf:resource="#Wine"/>

<rdfs:range rdf:resource="#WineGrape"/>

</owl:ObjectProperty>

madeFromGrape.T WineT madeFromGrape.WineGrape

Proprietati si subproprietati

rdfs:subPropertyOf rdfs:domain rdfs:range rdfs:equivalentProperty rdfs:inverseOf – numai pt proprietati obiect

<owl:ObjectProperty rdf:ID="livesIn"> <rdfs:domain rdf:resource="#Animal"/> <rdfs:range rdf:resource="#Location"/> <rdfs:subPropertyOf rdf:resource="#hasHabitat"/> <rdfs:equivalentProperty rdf:resource="#hasHome"/></owl:ObjectProperty>

Alt exemplu prop. obiect<owl:Class rdf:ID="WineDescriptor"/><owl:Class rdf:ID="WineColor"> <rdfs:subClassOf rdf:resource="#WineDescriptor"/>...</owl:Class>

<owl:ObjectProperty rdf:ID="hasWineDescriptor"> <rdfs:domain rdf:resource="#Wine"/> <rdfs:range rdf:resource="#WineDescriptor"/></owl:ObjectProperty>

<owl:ObjectProperty rdf:ID="hasColor"> <rdfs:subPropertyOf

rdf:resource="#hasWineDescriptor"/> <rdfs:domain rdf:resource="#Wine"/> <rdfs:range rdf:resource="#WineColor"/></owl:ObjectProperty>

WineDescriptor Wine

WineColor

hasWineDescriptor

hasColor

hasColor hasWineDescriptorT hasColor.WineColor

Proprietati tip de date Exprima relatii intre instante de clase, literali RDF si tipuri de

date XML Schema Toate masinile OWL trebuie sa suporte cel putin tipurile de date:

xsd:integer si xsd:string Exemplu

<owl:DatatypeProperty rdf:ID="yearValue"> <rdfs:domain rdf:resource="#VintageYear"/> <rdfs:range rdf:resource="&xsd;positiveInteger"/></owl:DatatypeProperty>

yearValue leaga owl:Thing la valori intregi pozitive

Constructori de clase Cum se construieste o clasa?(a) Prin specificarea unui nume de clasa

<owl:Class rdf:ID="WineDescriptor"/>

(b) Prin specificarea nume clasa + descendenta<owl:Class rdf:ID="WineColor">

<rdfs:subClassOf rdf:resource="#WineDescriptor"/></owl:Class>

(c) combinatie de operatori logici: owl:IntersectionOf ( ), owl:unionOf ( ), owl:complementOf ( )sau enumerare owl:oneOf (enumerare toti indivizii)Se foloseste in general cu tipul rdf:parseType='Collection'

(d) Restrictii asupra proprietatilor = mecanism puternic

Combinatie de operatori logici

<owl:Class rdf:ID="WhiteBurgundy"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Burgundy"/> <owl:Class rdf:about="#WhiteWine"/></owl:intersectionOf></owl:Class>

<owl:Class rdf:ID="WhiteWine"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Wine"/> <owl:Restriction> <owl:onProperty rdf:resource="#hasColor"/> <owl:hasValue rdf:resource="#White"/> </owl:Restriction> </owl:intersectionOf></owl:Class>

Combinatie de operatori logici

<owl:Class rdf:ID="Fruit"> <owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#SweetFruit"/> <owl:Class rdf:about="#NonSweetFruit"/> </owl:unionOf></owl:Class>

Diferit de:

<owl:Class rdf:ID="Fruit"> <rdfs:subClassOf rdf:resource="#SweetFruit"/> <rdfs:subClassOf rdf:resource="#NonSweetFruit"/></owl:Class>

care defineste Fruit ca intersectia intre SweetFruit si NonSweetFruit, care poate fi vida

Combinatie de operatori logici

<owl:Class rdf:ID="ConsumableThing"/>

<owl:Class rdf:ID="NonConsumableThing"> <owl:complementOf rdf:resource="#ConsumableThing"/></owl:Class>

<owl:Class rdf:ID="NonFrenchWine"> <owl:intersectionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Wine"/> <owl:Class> <owl:complementOf> <owl:Restriction> <owl:onProperty rdf:resource="#locatedIn"/> <owl:hasValue rdf:resource="#FrenchRegion"/> </owl:Restriction> </owl:complementOf> </owl:Class> </owl:intersectionOf></owl:Class>

Enumerare<owl:Class rdf:ID="WineColor"> <rdfs:subClassOf rdf:resource="#WineDescriptor"/> <owl:oneOf rdf:parseType="Collection">

<owl:WineColor rdf:about="#White"/><owl:WineColor rdf:about="#Rose"/><owl:WineColor rdf:about="#Red"/>

</owl:oneOf></owl:Class>

Restrictii Construirea claselor pe baza restrictiilor aplicate proprietatilor Obiectele are satisfac restrictia asupra proprietatii (proprietatilr

formeaza o clasa anonima owl:Restriction – subclasa a owl:Class O restrictie poate fi de 2 tipuri

owl:ObjectRestriction – se aplica pe o proprietate obiect owl:dataRestriction – se aplica pe o proprietate tip de date

Proprietatea asupra careia se aplica restrictia este specificata prin owl:Property

owl:someValuesFrom owl:hasValue owl:minCardinality owl:maxCardinality

Restrictii<owl:Class rdf:ID="Wine"> <rdfs:subClassOf rdf:resource="&food;PotableLiquid"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#madeFromGrape"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> </owl:Restriction> </rdfs:subClassOf>...</owl:Class> Zona verde defineste o clasa anionima care reprezinta lucrurile ce au o

proprietate madeFromGrape (apar in cel putin o astfel de proprietate) Definitia clasei Wine spune ca lucrurile care sunt Wine sunt de asemenea

membrii ai acestei clase anonime Fiecare individ Wine trebuie sa participe in cel putin o relatie

madeFromGrape

Wine Food:PotableLiquid ≥1 madeFromGrape

Restrictii

<owl:Class rdf:ID="USACompany"> <rdfs:subClassOf rdf:resource="#Company"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#locatedIn"/> <owl:hasValue rdf:resource="#USA"/> </owl:Restriction> </rdfs:subClassOf></owl:Class>

USACompany Company locatedIn:USA

Restrictii

<owl:Class rdf:ID="EuropeanCompany"> <rdfs:subClassOf rdf:resource="#Company"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#locatedIn"/> <owl:someValuesFrom rdf:resource="#EuropeanCountry"/> </owl:Restriction> </rdfs:subClassOf></owl:Class>

EuropeanCompany Company locatedIn.EuropeanCountry

Constructori de clase

Exemplu

<owl:Class> <owl:intersectionOf rdf:parseType="Collection">

<owl:Class rdf:about="#Person"/><owl:Restriction> <owl:onProperty rdf:resource="#hasChild"/> <owl:allValuesFrom>

<owl:unionOf rdf:parseType="Collection"> <owl:Class rdf:about="#Doctor"/> <owl:Restriction> <owl:onProperty rdf:resource="#hasChild"/>

<owl:someValuesFrom rdf:resource="#Doctor"/> </owl:Restriction> </owl:unionOf> </owl:allValuesFrom>

</owl:Restriction> </owl:intersectionOf></owl:Class>

Person hasChild.(Doctor hasChild.Doctor)

AxiomeIndivizi

Clase

Proprietati

Specii OWL

OWL Lite – in principal ierarhii si restrictii smple e.g., cardinalitati numai 0 or 1, fara disjunctii

OWL DL – expresivitate maxima dar pastrand completitudinea calcului si decidabilitate

OWL Full – libertatea sintactica a RDF fara garantii computationale e.g., in OWL Full o clasa poate fi tratata

simultan ca o colectie de indivizi si ca un individ

Exemplu ontologie OWL

Studentii opteaza pt cursuri, cursurile sunt oferite de departamente (unic), CS este un departament, un student trebuie sa urmeze cel putin un curs, un student full-time trebuie sa umeze intre 3 si 5 cursuri, un student full-time la CS

<owl:Class rdf:ID="Student"/>

<owl:Class rdf:ID="Course"/>

<owl:Class rdf:ID="Department"/>

<Department rdf:ID="CS"/>

Exemplu ontologie OWL<owl:ObjectProperty rdf:ID="takes"> <rdfs:domain rdf:resource="#Student"/> <rdfs:range rdf:resource="#Course"/></owl:ObjectProperty>

<owl:Restriction> <owl:onProperty rdf:resource="#takes"/> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality></owl:Restriction> O clasa anonima in care membrii urmeaza cel putin un curs. Stiind ca

domeiul este Student se poate infera ca este o subclasa a Student.

Nu se spune insa ca toti studentii urmeaza cel putin un curs!

Student

<owl:Class rdf:about="Student"> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#takes"/> <owl:minCardinality

rdf:datatype="&xsd;nonNegativeInteger"> 1 </owl:minCardinality> </owl:Restriction> </rdfs:subClassOf></owl:Class>

FullTimeStudent<owl:Class rdf:ID="FullTimeStudent"> <owl:IntersectionOf rdf:parseType="Collection"> <rdfs:Class rdf:about="#Student"/> <owl:Restriction> <owl:onProperty rdf:resource="#takes"/> <owl:minCardinality

rdf:datatype="&xsd;nonNegativeInteger"> 3 </owl:minCardinality> <owl:maxCardinality

rdf:datatype="&xsd;nonNegativeInteger"> 5 </owl:maxCardinality> </owl:Restriction> </owl:IntersectionOf></owl:Class>

offers si offeredBy

<owl:InverseFunctionalProperty rdf:ID="offers">

<rdfs:domain rdf:resource="#Department"/>

<rdfs:range rdf:resource="#Course"/>

</owl:InverseFunctionalProperty>

<owl:ObjectProperty rdf:ID="offeredBy">

<owl:inverseOf rdf:resource="#offers"/>

</owl:ObjectProperty>

CSCourse

<owl:Class rdf:ID="CSCourse">

<owl:IntersectionOf rdf:parseType="Collection">

<rdfs:Class rdf:about="#Course"/>

<owl:Restriction>

<owl:onProperty rdf:resource="#offeredBy"/>

<owl:hasValue rdf:resource="#CS"/>

</owl:Restriction>

</owl:IntersectionOf>

</owl:Class>

CSFullTimeStudent

<owl:Class rdf:ID="CSFullTimeStudent">

<owl:IntersectionOf rdf:parseType="Collection">

<rdfs:Class rdf:about="#FullTimeStudent"/>

<owl:Restriction>

<owl:onProperty rdf:resource="#takes"/>

<owl:allValuesFrom rdf:resource="#CSCourse"/>

</owl:Restriction>

</owl:IntersectionOf>

</owl:Class>