Существует модель данных, которая позволяет вам идеально выразить такую информацию, а именно RDF / RDFS. RDF - это стандарт W3C для моделирования данных на основе троек (субъект, предикат, объект) и URI;и RDFS , среди прочего, позволяет описывать иерархии классов и иерархии свойств.И хорошо, что есть много библиотек, которые помогают вам создавать и запрашивать данные такого типа.
Например, если я хочу сказать, что конкретный документ Lion
имеет класс Animal
и programmer
относится к классу Geek
, я мог бы сказать:
doc:lion rdf:type class:mamal .
doc:programmer rdf:type class:Geek .
Теперь я мог бы объявить иерархию классов и сказать, что каждая млекопитающая - это животное, а каждое животное - живое существо.
class:mamal rdfs:subClassOf class:animal .
class:animal rdfs:subClassOf class:LivingThing .
И что каждый выродок - человек, а каждый человек - живое существо:
class:geek rdfs:subClassOf class:human .
class:human rdfs:subClassOf class:LivingThing .
Существует язык, похожий на SQL
, называемый SPARQL для запроса данных такого типа, например, если я выполню запрос:
SELECT * WHERE {
?doc rdf:type class:LivingThing .
}
Где ?doc
- это переменная, которая будет связывать вещи типа class:LivingThing
.В результате этого запроса я получу doc:lion
и doc:programmer
, потому что технология базы данных будет следовать семантике RDFS и, следовательно, вычисляя закрытие классов, она узнает, что doc:lion
и doc:programmer
равны class:LivingThing
.
Таким же образом запрос:
SELECT * WHERE {
doc:lion rdf:type ?class .
}
Скажет мне, что doc:lion
составляет rdf:type
из class:mamal
class:animal
и class:LivingThing
.
Так же, как я только что объяснил, в RDFS вы можете создавать иерархии свойств и говорить:
doc:programmer doc:studies doc:computerscience .
doc:lion doc:instint doc:hunting .
И мы можем сказать, что оба свойства doc:skill
и doc:instint
являются вложеннымисвойства doc:knows
:
doc:studies rdfs:subPropertyOf doc:knows .
doc:instint rdfs:subPropertyOf doc:knows .
С помощью запроса:
SELECT * WHERE {
?s doc:knows ?o .
}
Мы получим, что лев знает, как охотиться, и программисты знают информатику.
Большинство баз данных RDF / RDFS могут легко справиться с количеством элементов, которые вы упомянули в своем вопросе, и есть много вариантов для начала.Если вы Java-человек, вы можете взглянуть на Jena , есть также фреймворки для .Net lije , этот или Python с RDFLIB
Но самое главное, взгляните на документацию вашей CMS, потому что, возможно, есть плагины для экспорта метаданных в виде RDF.Drupal, например, довольно продвинут в этом случае (см. http://drupal.org/project/rdf