RDF 和 OWL/WOL 中的简单 JSON 对象格式是什么样的?
What does simple JSON object format look like in RDF and OWL/WOL?
我有以下 JSON 个对象...
var people = [
{"LName": "Smith", "FName": "Jane", "Gender": "Female", "Age": 20},
{"LName": "Doe", "FName": "John", "Gender": "Male", "Age": 40},
{"LName": "Smith", "FName": "Mary", "Gender": "Female", "Age": 29}
];
请注意,上面的表示只是第一范式 (1NF),表示三 (3) 个非规范化对象,其中每个对象都是 "People" table 中的一行,其中的列名称为 "LName"、"FName"、"Gender" 和 "Age".
鉴于以上情况,从 translated/converted 到 OWL/WOL 之后会是什么样子?
没有单一的方法可以做到这一点。相同的信息可以用多种方式编码为 RDF 或 OWL。这完全取决于您要编码和保存的信息类型。如果您只需要有关三个人的信息,那么您可以使用 FOAF 词汇表来对信息进行编码。或者如果你想保留 JSON 语义,你可以使用 JSON 结构的编码。或者,您可以使用所需的属性定义 ontology 并根据该属性进行编码。这就是前两种方法的样子。不过,您显然可以想出其他办法。
在 FOAF 中
如果您使用 FOAF 词汇表(它不是严格意义上的 OWL,而是定义了一个 RDF 词汇表,您最终可能会得到这样的结果:
在 N3
prefix foaf: <http://xmlns.com/foaf/0.1/>
[] a foaf:Person ;
foaf:firstName "Smith" ;
foaf:lastName "Jane" ;
foaf:gender "Female" ;
foaf:age 20 .
[] a foaf:Person ;
foaf:firstName "Doe" ;
foaf:lastName "John" ;
foaf:gender "Male" ;
foaf:age 40 .
[] a foaf:Person ;
foaf:firstName "Smith" ;
foaf:lastName "Mary" ;
foaf:gender "Female" ;
foaf:age 29 .
在RDF/XML
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:firstName>Smith</foaf:firstName>
<foaf:lastName>Mary</foaf:lastName>
<foaf:gender>Female</foaf:gender>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>29</foaf:age>
</foaf:Person>
<foaf:Person>
<foaf:firstName>Doe</foaf:firstName>
<foaf:lastName>John</foaf:lastName>
<foaf:gender>Male</foaf:gender>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>40</foaf:age>
</foaf:Person>
<foaf:Person>
<foaf:firstName>Smith</foaf:firstName>
<foaf:lastName>Jane</foaf:lastName>
<foaf:gender>Female</foaf:gender>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>20</foaf:age>
</foaf:Person>
</rdf:RDF>
JSON编码
如果你想保留更多的 JSON 信息,例如,你有一个数组,它有三个元素,等等,你可以做更多这样的事情:
在 N3
prefix json: <urn:json:>
[] a json:Array ;
json:elements (
[ json:hasProperty [ json:propertyName "LName" ;
json:propertyValue "Smith" ] ,
[ json:propertyName "FName" ;
json:propertyValue "Jane" ] ,
[ json:propertyName "Gender" ;
json:propertyValue "Female" ] ,
[ json:propertyName "Age" ;
json:propertyValue 20 ] ]
[ json:hasProperty [ json:propertyName "LName" ;
json:propertyValue "Dow" ] ,
[ json:propertyName "FName" ;
json:propertyValue "John" ] ,
[ json:propertyName "Gender" ;
json:propertyValue "Male" ] ,
[ json:propertyName "Age" ;
json:propertyValue 40 ] ]
[ json:hasProperty [ json:propertyName "LName" ;
json:propertyValue "Smith" ] ,
[ json:propertyName "FName" ;
json:propertyValue "Mary" ] ,
[ json:propertyName "Gender" ;
json:propertyValue "Female" ] ,
[ json:propertyName "Age" ;
json:propertyValue 29 ] ]
) .
在RDF/XML
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:json="urn:json:">
<json:Array>
<json:elements rdf:parseType="Collection">
<rdf:Description>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>LName</json:propertyName>
<json:propertyValue>Smith</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>FName</json:propertyName>
<json:propertyValue>Jane</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Gender</json:propertyName>
<json:propertyValue>Female</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Age</json:propertyName>
<json:propertyValue rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>20</json:propertyValue>
</json:hasProperty>
</rdf:Description>
<rdf:Description>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>LName</json:propertyName>
<json:propertyValue>Dow</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>FName</json:propertyName>
<json:propertyValue>John</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Gender</json:propertyName>
<json:propertyValue>Male</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Age</json:propertyName>
<json:propertyValue rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>40</json:propertyValue>
</json:hasProperty>
</rdf:Description>
<rdf:Description>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>LName</json:propertyName>
<json:propertyValue>Smith</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>FName</json:propertyName>
<json:propertyValue>Mary</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Gender</json:propertyName>
<json:propertyValue>Female</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Age</json:propertyName>
<json:propertyValue rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>29</json:propertyValue>
</json:hasProperty>
</rdf:Description>
</json:elements>
</json:Array>
</rdf:RDF>
它可以采用多种形式,具体取决于您希望如何对数据建模。
例如,您可以决定使用一些现有词汇表或 ontology(例如 FOAF),或者创建您自己的自制 ontology - 在这种情况下,您可以选择定义限制所涉及的属性(例如是否具有功能性、它们的类型等),甚至提供额外的规则以允许在分析数据时进行不同形式的推理(例如自动class将具有 "female" 性别的人归属到 Female
class)。
但一般来说,在创建 ontology 时,您需要使用两个 "sections":术语 (TBox),您可以在其中定义模型的各种 restrictions/classes/properties,以及根据模型实例化事物的断言 (ABox)。
一个简单的表示(在 Turtle 语法中)跳过了上面的大部分内容(除了一些基本的 属性 限制),可能看起来像这样:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://foo.bar#> .
# TBox
:Person a owl:Class .
:first_name a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:last_name a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:gender a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:age a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:integer .
# ABox
:person_1 a :Person;
:last_name "Smith;
:first_name "Jane";
:gender "female";
:age 20.
:person_2 a :Person;
:last_name "Doe;
:first_name "John";
:gender "male";
:age 40.
:person_3 a :Person;
:last_name "Smith;
:first_name "Mary";
:gender "female";
:age 29.
作为进一步建模的示例,您可以决定 :gender
只能取值 "female" 或 "male"。在这种情况下定义 :gender
的另一种方法是:
:gender a owl:DatatypeProperty;
rdfs:range [
a rdfs:Datatype;
owl:oneOf ( "Female" "Male")
] .
我想你也可以将 gender
定义为 functional 属性(Person
的每个实例只有一个唯一值)。
我有以下 JSON 个对象...
var people = [
{"LName": "Smith", "FName": "Jane", "Gender": "Female", "Age": 20},
{"LName": "Doe", "FName": "John", "Gender": "Male", "Age": 40},
{"LName": "Smith", "FName": "Mary", "Gender": "Female", "Age": 29}
];
请注意,上面的表示只是第一范式 (1NF),表示三 (3) 个非规范化对象,其中每个对象都是 "People" table 中的一行,其中的列名称为 "LName"、"FName"、"Gender" 和 "Age".
鉴于以上情况,从 translated/converted 到 OWL/WOL 之后会是什么样子?
没有单一的方法可以做到这一点。相同的信息可以用多种方式编码为 RDF 或 OWL。这完全取决于您要编码和保存的信息类型。如果您只需要有关三个人的信息,那么您可以使用 FOAF 词汇表来对信息进行编码。或者如果你想保留 JSON 语义,你可以使用 JSON 结构的编码。或者,您可以使用所需的属性定义 ontology 并根据该属性进行编码。这就是前两种方法的样子。不过,您显然可以想出其他办法。
在 FOAF 中
如果您使用 FOAF 词汇表(它不是严格意义上的 OWL,而是定义了一个 RDF 词汇表,您最终可能会得到这样的结果:
在 N3
prefix foaf: <http://xmlns.com/foaf/0.1/>
[] a foaf:Person ;
foaf:firstName "Smith" ;
foaf:lastName "Jane" ;
foaf:gender "Female" ;
foaf:age 20 .
[] a foaf:Person ;
foaf:firstName "Doe" ;
foaf:lastName "John" ;
foaf:gender "Male" ;
foaf:age 40 .
[] a foaf:Person ;
foaf:firstName "Smith" ;
foaf:lastName "Mary" ;
foaf:gender "Female" ;
foaf:age 29 .
在RDF/XML
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<foaf:Person>
<foaf:firstName>Smith</foaf:firstName>
<foaf:lastName>Mary</foaf:lastName>
<foaf:gender>Female</foaf:gender>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>29</foaf:age>
</foaf:Person>
<foaf:Person>
<foaf:firstName>Doe</foaf:firstName>
<foaf:lastName>John</foaf:lastName>
<foaf:gender>Male</foaf:gender>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>40</foaf:age>
</foaf:Person>
<foaf:Person>
<foaf:firstName>Smith</foaf:firstName>
<foaf:lastName>Jane</foaf:lastName>
<foaf:gender>Female</foaf:gender>
<foaf:age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>20</foaf:age>
</foaf:Person>
</rdf:RDF>
JSON编码
如果你想保留更多的 JSON 信息,例如,你有一个数组,它有三个元素,等等,你可以做更多这样的事情:
在 N3
prefix json: <urn:json:>
[] a json:Array ;
json:elements (
[ json:hasProperty [ json:propertyName "LName" ;
json:propertyValue "Smith" ] ,
[ json:propertyName "FName" ;
json:propertyValue "Jane" ] ,
[ json:propertyName "Gender" ;
json:propertyValue "Female" ] ,
[ json:propertyName "Age" ;
json:propertyValue 20 ] ]
[ json:hasProperty [ json:propertyName "LName" ;
json:propertyValue "Dow" ] ,
[ json:propertyName "FName" ;
json:propertyValue "John" ] ,
[ json:propertyName "Gender" ;
json:propertyValue "Male" ] ,
[ json:propertyName "Age" ;
json:propertyValue 40 ] ]
[ json:hasProperty [ json:propertyName "LName" ;
json:propertyValue "Smith" ] ,
[ json:propertyName "FName" ;
json:propertyValue "Mary" ] ,
[ json:propertyName "Gender" ;
json:propertyValue "Female" ] ,
[ json:propertyName "Age" ;
json:propertyValue 29 ] ]
) .
在RDF/XML
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:json="urn:json:">
<json:Array>
<json:elements rdf:parseType="Collection">
<rdf:Description>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>LName</json:propertyName>
<json:propertyValue>Smith</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>FName</json:propertyName>
<json:propertyValue>Jane</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Gender</json:propertyName>
<json:propertyValue>Female</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Age</json:propertyName>
<json:propertyValue rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>20</json:propertyValue>
</json:hasProperty>
</rdf:Description>
<rdf:Description>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>LName</json:propertyName>
<json:propertyValue>Dow</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>FName</json:propertyName>
<json:propertyValue>John</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Gender</json:propertyName>
<json:propertyValue>Male</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Age</json:propertyName>
<json:propertyValue rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>40</json:propertyValue>
</json:hasProperty>
</rdf:Description>
<rdf:Description>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>LName</json:propertyName>
<json:propertyValue>Smith</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>FName</json:propertyName>
<json:propertyValue>Mary</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Gender</json:propertyName>
<json:propertyValue>Female</json:propertyValue>
</json:hasProperty>
<json:hasProperty rdf:parseType="Resource">
<json:propertyName>Age</json:propertyName>
<json:propertyValue rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>29</json:propertyValue>
</json:hasProperty>
</rdf:Description>
</json:elements>
</json:Array>
</rdf:RDF>
它可以采用多种形式,具体取决于您希望如何对数据建模。
例如,您可以决定使用一些现有词汇表或 ontology(例如 FOAF),或者创建您自己的自制 ontology - 在这种情况下,您可以选择定义限制所涉及的属性(例如是否具有功能性、它们的类型等),甚至提供额外的规则以允许在分析数据时进行不同形式的推理(例如自动class将具有 "female" 性别的人归属到 Female
class)。
但一般来说,在创建 ontology 时,您需要使用两个 "sections":术语 (TBox),您可以在其中定义模型的各种 restrictions/classes/properties,以及根据模型实例化事物的断言 (ABox)。
一个简单的表示(在 Turtle 语法中)跳过了上面的大部分内容(除了一些基本的 属性 限制),可能看起来像这样:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://foo.bar#> .
# TBox
:Person a owl:Class .
:first_name a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:last_name a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:gender a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:string .
:age a owl:DatatypeProperty;
rdfs:domain :Person;
rdfs:range xsd:integer .
# ABox
:person_1 a :Person;
:last_name "Smith;
:first_name "Jane";
:gender "female";
:age 20.
:person_2 a :Person;
:last_name "Doe;
:first_name "John";
:gender "male";
:age 40.
:person_3 a :Person;
:last_name "Smith;
:first_name "Mary";
:gender "female";
:age 29.
作为进一步建模的示例,您可以决定 :gender
只能取值 "female" 或 "male"。在这种情况下定义 :gender
的另一种方法是:
:gender a owl:DatatypeProperty;
rdfs:range [
a rdfs:Datatype;
owl:oneOf ( "Female" "Male")
] .
我想你也可以将 gender
定义为 functional 属性(Person
的每个实例只有一个唯一值)。