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 的每个实例只有一个唯一值)。