OWL rdfs: langString maxCardinality для каждого языка - PullRequest
1 голос
/ 18 марта 2019

Возможно ли в OWL установить максимальное ограничение количества элементов для языкового свойства, что ограничит количество элементов для каждого языка.

Например, я хочу только один dct:title на язык. Итак,

:demo dct:title "Demo"@en, "Demo"@nl.

будет в порядке, но

:bad_demo dct:title "Bad demo"@en, "Wrong demo"@en.

выдаст ошибку?

1 Ответ

7 голосов
/ 18 марта 2019

Вы можете частично сделать это в OWL 2 DL.Однако вам придется добавить ограничение количества элементов для каждого используемого вами языка.В OWL 2 DL не может быть общей аксиомы, которая работала бы для всех возможных языков.В синтаксисе Turtle:

@base <http://example.com/>.
@prefix dct:  <http://purl.org/dc/terms/>.
@prefix owl:  <http://www.w3.org/2002/07/owl#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#>.

<>  a  owl:Ontology;
  rdfs:comment  "An ontology with cardinality restrictions on some languages."@en .
<ThingWithTitle>  a  owl:Class;
  rdfs:subClassOf  [
    a  owl:Restriction;
    owl:onProperty  dct:title;
    owl:maxQualifiedCardinality  1;
    owl:onDataRange  [
      a  rdfs:Datatype;
      owl:onDatatype  rdf:plainLiteral;
      owl:withRestrictions  ([rdf:langRange "en"])
    ]
  ], [
    a  owl:Restriction;
    owl:onProperty  dct:title;
    owl:maxQualifiedCardinality  1;
    owl:onDataRange  [
      a  rdfs:Datatype;
      owl:onDatatype  rdf:plainLiteral;
      owl:withRestrictions  ([rdf:langRange "nl"])
    ]
  ], [
    # ...
    # same for de, es, fr, it, zh, etc.
    # ...
  ]
].

С этой онтологией будет несовместимо следующее:

<doc1>  a  <ThingWithTitle>;
  dct:title  "Title"@en, "Another title"@en-UK .

Вы можете быть более конкретным и разрешить использование нескольких английских / голландских названий, если они нена том же диалекте.Просто замените rdf:langRange "en" на rdf:langRange "en-UK" и т. Д.

В OWL 2 Full вы можете выразить это в общих чертах (то есть для всех языков), но это ужасно сложно, и на Земле нет рассуждений, которые могли бы справитьсяс этим типом рассуждений, так что лучше не пытаться, если вы не любите академические проблемы ради интеллектуальной мастурбации.

Редактировать:

После некоторой интенсивной умственной мастурбации,Я придумал следующее:

[ 
  owl:onDatatype  xsd:string;
  owl:withRestrictions  (
    [
      xsd:pattern  "...regular_expression_for_an_extended_language_range_from_rfc_4647..."
    ]
  )
]  rdfs:subClassOf  [
  owl:onProperty  [owl:inverseOf rdf:langRange];
  owl:someValuesFrom  [
    owl:onProperty  [owl:inverseOf rdf:first];
    owl:someValuesFrom  [
      owl:onProperty  [owl:inverseOf  owl:withRestrictions];
      owl:someValuesFrom  [
        owl:intersectionOf  (
          [
            owl:onProperty  owl:onDatatype;
            owl:hasValue  rdf:plainLiteral
          ], [
            owl:onProperty  [owl:inverseOf  owl:onDataRange];
            owl:someValuesFrom  [
              owl:intersectionOf  (
                [
                  owl:onProperty  owl:maxQualifiedCardinality;
                  owl:hasValue  1
                ], [
                  owl:onProperty  owl:onProperty;
                  owl:hasValue  dct:title
                ], [
                  owl:onProperty  [owl:inverseOf  rdfs:subClassOf];
                  owl:hasValue  <ThingWithTitle>
                ]
              )
            ]
          ]
        )
      ]
    ]
  ]
] .

Проверка того, что это работает в семантике OWL 2 на основе RDF , оставлено читателю в качестве упражнения.

...