OWL: ограничить значение свойства числовой строкой - PullRequest
2 голосов
/ 30 октября 2010

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

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Я думаю, что вам нужны Datatype Restrictions в сочетании с xsd:pattern.

Следующая аксиома взята из OWL 2 Primer ...

:Teenager  rdfs:subClassOf
       [ rdf:type             owl:Restriction ;
         owl:onProperty       :hasAge ;
         owl:someValuesFrom   
          [ rdf:type             rdfs:Datatype ;
            owl:onDatatype       xsd:integer ;
            owl:withRestrictions (  [ xsd:minExclusive     "12"^^xsd:integer ]
                                    [ xsd:maxInclusive     "19"^^xsd:integer ]
            )
          ]
       ] .

... и если вы немного сдвинете его с помощью xsd:pattern, мы можем получить что-токак ...

:YourClass  rdfs:subClassOf
       [ rdf:type             owl:Restriction ;
         owl:onProperty       :yourHasNumericProperty ;
         owl:someValuesFrom   
          [ rdf:type             rdfs:Datatype ;
            owl:onDatatype       xsd:integer ;
            owl:withRestrictions  ([xsd:pattern "E[1-9][0-9]*"])
          ]
       ] .

С помощью xsd:pattern вы можете использовать ограничение типа данных на основе регулярных выражений.

Надеюсь, это даст вам некоторые указания.

0 голосов
/ 31 октября 2010

На самом деле это то, что вы можете сделать в RDF.Для любого литерала в RDF вы можете указать тип с чем-то вроде этого (в черепахе / RDF) ...

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:x :myDataTypeProperty "123"^^xsd:integer .
:y :myDataTypeProperty "some string"^^xsd:string .
:z :myDataTypeProperty "2004-12-06"^^xsd:date .

Тот же пример в RDF / XML

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns="http://www.foo.bar.com#">
  <rdf:Description rdf:about="http://www.foo.bar.com#x">
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">123</myDataTypeProperty>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.foo.bar.com#y">
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some string</myDataTypeProperty>
  </rdf:Description>
  <rdf:Description rdf:about="http://www.foo.bar.com#z">
    <myDataTypeProperty rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2004-12-06</myDataTypeProperty>
  </rdf:Description>
</rdf:RDF>

В XMLSchema (XSD) В спецификации вы можете найти все поддерживаемые типы данных.Но убедитесь, что вы используете только те, которые указаны в SPARQL спецификации

Вы можете чеканить свои собственные типы данных, если хотите, и иметь что-то вроде:

:x :myDataTypeProperty "123"^^ns:MyClassificationScheme .

И вы можете пойти дальше и сказать, что ...

ns:MyClassificationScheme rdfs:subClassOf xsd:integer .

Когда вы запускаете SPARQL-запрос к данным, вы можете указать тип, когда вы применяете фильтры, например:

SELECT * WHERE { 
   ?person :born ?birthDate .
   FILTER ( ?birthDate > "2005-02-28"^^xsd:date ) .
}

Я надеюсь, что это ответило на ваш вопрос.

Отредактировано

Как упомянул Панзи, мой ответ шел в неправильном направлении.Я все равно оставляю это.

...