Help:Свойства и типы

Свойства и типы являются главными инструментами ввода семантических данных в Semantic MediaWiki. Свойства похожи на категории в MediaWiki, однако в отличие от категорий, у свойств есть не только название, но и значение. Для того, чтобы назначить вашей вики-странице свойство, вы должны отредактировать текст страницы и использовать следующую конструкцию: Имя свойства::Значение свойства Этот синтаксис очень похож на создание обычных вики-ссылок (напомним, что для этого в MediaWiki используется конструкция вида  Имя ссылки ). При вставке семантического свойства в текст вики страницы отображаться будет только значение этого свойства.

Создание семантических свойств
Начнем с примера. Зайдите на Википедию и найдите там статью про Берлин. Легко заметить, что эта статья ссылается на массу вики-страниц, описывающих страны: США, Польша, Германия, Чехия и др. Вместе с тем мы понимаем, что связь Берлина с Германией является совершенно особенной: Берлин является столицей Германии.

Семантические свойства используются как раз для того, чтобы помечать такого рода ссылки, несущие смысловую нагрузку. Связь Москвы с Россией, Берлина с Германией и Вашингтона с США логично назвать является столицей. Для того, чтобы давать названия ссылкам, в Semantic MediaWiki и используюстся свойства. Достаточно заменить текст

Германия

на

является столицей::Германия

... чтобы создать семантическое свойство является столицей.

Для тех, кто просматривает вики-страничку, ничего не изменится - значение нашего семантического свойства бдет выглядеть точно так же как обычная вики-ссылка. Однако если вы всегда будете пользоваться свойством является столицей вместо вики-ссылок, то сможете с помощью SMW-запросов создавать, например, автоматически обновляющиеся списки стран и их столиц:

Легко догадаться, что нужно всячески поощрять пользователей вашей вики использовать одни и те же имена семантических свойств для обозначения одних и тех же связей между объектами. Чтобы облегчить такое повторное использование свойств, каждому свойству в SMW сопоставляется страница, находящаяся в пространстве имен Property (Свойство). Иными словами точно так же как страницы категорий называются Категория:Имя_категории, все страницы свойств называются Свойство:Имя_свойства. На этой странице вы можете описать, для чего используется это свойство на вашей вики; её можно править так же, как и любую другую вики-страницу.

Со временем количество свойств, которые вы используете на вики, возрастает. На спецстранице Special:Properties перечислены все свойства и указано, сколько раз они были использованы.

Существует несколько способов для того, чтобы добавить свойство на страницу:

Превращение данных на странице в семантические свойства
Мы научились создавать именованные ссылки с одних страниц на другие. Однако в тексте вики-статьи есть много другой полезной информации, например, страница Берлин</tt> может содержать число жителей в городе Берлин. Было бы замечательно прицепить к этому числу тэг "Население". Таким образом, текст 3,396,990 ... стал бы доступным для компьютерной обработки. В Semantic MediaWiki это возможно - просто создайте семантическое свойство Население</tt>, как обычно: перед числом 3,396,990 поставьте имя свойства и два двоеточия ::</tt> и заключите всю эту конструкцию в двойные квадратные скобки    </tt>. В итоге получится

Население::3,396,990.

Сохраните текст страницы и посмотрите на результат. Как видите, вики создала ссылку для страницы под названием 3,396,990. Разумеется, нет никакого смысла в том, чтобы хранить отдельную страницу для каждого числа. Другой проблемой является то, что прямо сейчас значения свойства Население</tt> не воспринимаются системой как числа. Например, если вам захочется вывести список всех немецких городов и количество жителей в них (о том, как это сделать, прочитайте в разделе Help:Встраиваемые запросы), вы не сможете корректно отсортировать этот список по возрастанию населения: сортировка будет идти в алфавитном порядке и значение "1,000,000" будет идти раньше чем, например, "345". Итак, мы хотим, чтобы значения свойства Население</tt> воспринимались нашей вики как числа, а не как страницы. Для того, чтобы это сделать вы должны указать тип свойства: почитайте про это в главе.

Правильное именование семантических свойств
Выбор имён для свойств - дело довольно важное, гораздо важнее, чем вы могли бы предположить а первый взгляд. Свойства должны называться так, чтобы полностью исключать двусмысленность и путаницу.

Путаница может возникать буквально на ровном месте. Например, как понимать семантическое свойство Столица и на какой странице его ставить. Сравните два предложения:

Столицей Германии является Столица::Берлин. ↔ Берлин является столицей Столица::Германии

Первое предложение волне могло бы встретиться в статье Германия, а второе - в статье Берлин. Легко заметить что у свойства Столица в первом случае значением является город, а во втором страна. В этом случае лучше переименовать свойство столица, например, вот так: Столицей Германии является имеет столицу::Берлин. ↔ Берлин является столицей является столицей::Германии

Типы данных для свойств
Semantic MediaWiki поддерживает несколько типов данных для свойств, и эти типы даных определяют то, как будут выполняться различные операции над значениями свойств. В предыдущем примере у нас было свойство Население</tt>, для подобных свойств подходит тип Число</tt>.

Типы данных назначаются свойствам довольно интересным образом. У каждого свойства есть своя вики-страница в пространстве имен Property. На этой странице мы описываем то, как использовать свойство. Если добавить на страницу свойства Население специальное свойство  has type::Number </tt>, то тем самым мы укажем SMW, что с населением нужно обращаться как с числом.

Свойство has type</tt> - это одно из т.н. специальных свойств'. Вне зависимости от того, создали ли вы страницы для этих свойств в вики, данные свойства имеют специальное назначение.

Типы имеют большое значение. Во-первых, тип свойства определяет то, как именно будут обрабатываться значения этого свойства, а это важно для операций сравнения, сортировки и отображения значений. Во-вторых, нужно знать тип свойства для того, чтобы понимать разные способы написания одного и того же значения. К примеру, "1532", "1,532", и "1.532e3" обозначают одно и то же число. Наконец, свойства некоторых типов ведут себя особенным образом, о чем мы расскажем ниже. По этим причинам, каждое свойство должно быть явно помечено типом.

Почему же мы не указывали тип данных для свойства Является столицей</tt>, и все работало хорошо? Дело в том, что если вы не явно не указываете тип для свойства, SMW считает, что это свойство имеет тип  Страница</tt> (Page</tt>). Свойства типа Страница</tt>. Однако хорошей практикой является явное задание типов всех свойств, которые вы используете на вики; важно также подробно описывать, для чего нужно каждое свойство и как его правильно использовать. Администратор вики может изменить тип для свойств по умолчанию с помощью опции smwgPDefaultType в LocalSettings.php.

Вы можете помечать страницы свойствами различных типов таким же образом, каким вы создаёте именованные ссылки (свойства типа Страница</tt>). Несколько примеров:

Список типов данных
Используя свойства различных типов, вы можете описать очень многие вещи. На страничке Special:Types в вашей вики есть список всех доступных типов данных. В таблице мы приводим типы, которые есть в стандартном пакете SMW:

Перечисления и допустимые значения свойств
Порой нам хочется указать не только тип свойства, но и список допустимых значений, которые то свойство может принимать. Для этого на страничке свойства вы должны задать список допустимых значений, используя специальное свойство Property:Allows value, вот так:

has type::number Allows value::55 Allows value::56 Allows value::57

Единицы измерения
Тип данных Quantity позволит вам задавать единицы измерения для ваших числовых значений свойств, например 30 миль или 42 км. Для того, чтобы вики могла сама переводить одни единицы измерения в другие, вам придется явно определить единицу измерения, как описано в главе custom units. После этого ваши пользователи смогут использовать в значения свойства те единицы измерения, к которым привыкли, а вики позаботится об автоматическом преобразовании в запросах и при операциях сравнения.

Обратные (инверсные) свойства
Начиная с версии 1.5.0 в SMW стало возможным делать обратные свойства для типа Page. Подробнее об этом можно прочитать на странице Help:Inverse Properties.

Специальные свойства
В этой главе мы познакомились со специальными свойствами has type</tt> и <tt>Allows value</tt>. В SMW есть еще несколько подобных свойств, они описаны на страничке Special properties. Обратите внимание, что вы не можете использовать для своих свойств имена, совпадающие с именами специальных свойств. Начиная с SMW 1.4.0, вы можете делать запросы по специальным свойствам и Help:Отображение информации отображать их, как обычно.

Функция <tt>#set</tt> для "тихого" аннотирования
Вместо того, чтобы использовать двойные квадратные скобки <tt></tt> для аннотирования страниц семантическими свойствами, вы можете задействовать функцию <tt>#set</tt>. В качестве аргументов эта функция принимает пары <tt>название свойства=значение свойства </tt> и не печатает ничего на экран. Вот как это работает в нашем примере с Берлином:

Функция <tt>#set</tt> окажется полезной когда вам захочется сохранять в качестве значений свойства большие фрагменты текста, содержащие вики-разметку с квадратными скобками, например вики-ссылки. В этих случаях стандартный способ привязывания семантических свойств правильно работать не будет.

Повторяющиеся события
Другим примером сложных данных являются периодические, повторяющиеся события. Ясно, что периодическое событие включает в себя несколько дат и повторяется с даты А по дату Б с периодичностью В. Функция <tt>#set_recurring_event</tt> используется как раз для того, чтобы можно было простым образом задавать повторяющиеся события в вики. Так же как и <tt>#set</tt>, функция <tt>#set_recurring_event</tt> не печатает ничего в тексте вики-статьи. Вот пример использования <tt>#set_recurring_event</tt> для создания события, повторяющегося раз в неделю: За подробностями можно обратиться к главе Help:Recurring events.

Как обстояли дела в более ранних версиях SMW
Вплоть до SMW 1.5.6 для типов данных в вики было зарезервировано пространство имен "Type". Дабы не плодить лишние пространства имен, от такого подхода пришлось отказаться. Не удивляетесь, если встретите в этой вики выражения вроде "Type:Number". Для того, чтобы назначить тип для семантического свойства допустимы обе формы написания.

В очень старых версиях SMW свойства типа Page назывались связями между страницами, в то время как свойства других типов (числа, строки и т.д.) назывались атрибутами и назначались страницам, используя двоеточие и равно (<tt>:=</tt>) вместо двух двоеточий (<tt>::</tt>).