XML сылка на элемент
У нас есть, например, типы объектов. Я их описываю в XML документе. Как вы знаете, типы различаются именами (внешне). Т.е.
<Type name="lala">
...
</Type>
<Type name="baba">
...
</Type>
...
Потом мне надо описать объекты:
<Object name="babaObj" typeOf="baba"/>
В этом примере я в атрибуте typeOf пишу просто имя типа. Потом мне самому надо будет искать тип по имени.
Но мне посоветовал один чел, и сказал, что в XML есть подобие ссылок. Т.е. я могу сделать сразу ссылку на элемент Type.
м.б. href ?
Потом мне самому надо будет искать тип по имени.
что значит самому искать? вот так
selectSingleNode("//baba")
сложно?
Вот статья на эту тему.
что значит самому искать? вот так
Сорри, я имел ввиду, что надо искать (вообще)...
А слышал, что в XML поддерживает ссылки...
а ты не думал использовать XSLT вместо трансформационной схемы?
Хотя были предложения...
Посмотрю..
Тока по функциональности, мне же не надо хмл преобразовывать... А запрос...
Если задавать такие не ясные вопросы, то народ и будет тебе говорить всё, что сам об XML слышал типа XSLT, XLink, XPath и т.д.
Если хочешь узнать весь список технологий XML проще зайти на www.w3c.org
В этом примере я в атрибуте typeOf пишу просто имя типа. Потом мне самому надо будет искать тип по имени.Адрес документа и XPath-путь внутри документа вполне достаточно, чтобы найти элемент и для этого достаточно одной команды, которую я написал. Если ты хочешь неуникальные имена для типов, тогда просто XPth-путь будет другой.
на самом деле XML поддерживает ссылки, только не помню как
поддерживает ссылки
что это значит?
На примере видно о чем я. Если хочешь повторю, но отвечать на мой пост не обязательно...
Команду которую ты написал - команда поиска, т.е. надо включать поиск !
А я спрашиваю про ССЫЛКИ ! с использованием, которых не НАДО ПОИСКА !
selectSingleNode("//baba")
Ты сам же видишь, что это ПОИСК ПО ИМЕНИ ! КАКАЯ РАЗНИЦА - РЕАЛИЗОВАННО ЛИ ЭТО ГДЕ-ТО ИЛИ НАПИСАННО РУКАМИ (В ОБЩИХ ЧЕРТАХ)
ЗЫ: ПОЖАЛУЙСТА, не надо тут левый базар устраивать !
можно указать, что такой-то атрибут должен быть ссылкой на id другого элемента
А - он со мной работает в проекте, поэтому он упомянул чуток другую вещь, которая мне тоже нужна, но не тут
это всего лишь проверка целостности данных
я в курсе. Просто обрывок информыции в памяти всплыл, ща вот в мсдн уточнил.
А моя "проблема", как если у меня есть Object как я могу присобачить ссылку так чтобы за "одну операцию" получить Node типа
в твоем случае id - это значение атрибута name
в чем проблема, я же написал, имя берешь из значения атрибута
Давай допустим, у ТИПА нет имени даже...
тогда в атрибуте typeOf указываешь XPath-путь к нему (я об этом уже намекал)
гы... и как ты на него ссылаться собираешься?
Т.е. описание объекта выглядет так:
<Object name="babaObj" typeOf="baba"/>
Потом я делаю:
selectSingleNode("//baba")
И получаю Ноде ТИПА...
Но я подразумеваю, что в описании ОБЪЕКТА должно быть типа:
<Object name="babaObj" typeOf=LINK>, какая-та ссылка...
И потом типа:
getNode(LINK)
Есть ли такое?
Кстати, в XSLT можно XPath брать из атрибута?
DTD устарели, и зачем они здесь?
над вторым вопросом сейчас подумаю
с учетом того, что может указываться не имя, а XPath-путь, я не вижу разницы
Раздел описания типа. Внутри типов находятся различные данные
<Type>
...
</Type>
<Type>
...
</Type>
<Type>
...
</Type>
...
<Object name="Obj" typeOf=LINK />
Можно ли так сделать, чтобы по LINK-у получить именно тот Node "Type". Если в XML такие ссылки?
Щя разберусь с этими Пасами, недавно тока пришел с лабы
Вот, допустим его действительно прислала форма с DataBinding (Data Island) или это хакер злобно хакает сервак невалидным XML'ем?!
гы... и как ты на него ссылаться собираешься?
Мой вопрос: Есть ли в XML ссылки на Node?
блин... как ты себе это представляешь?
А по поводу реализации этого, помойму можно такое сделать. И добавить это в DOM парсер.
первый вариант, испльзовать порядок расположения.
По любому тебе надо как-то отличать элементы <Type>, вот как ты будешь устраивать это различие, это и будешь прописывать в XPath-е
Кстати, в XSLT можно XPath брать из атрибута?нет, нельзя (хотя ошибаться может каждый )
Вообще, полгода назад я уже писал, не следует использовать XSLT по его не прямому назначению, дальше простых вещей вам не удастся продвинуться. Его прямое назначение - преобразования для отображения XML-документов (см. анатоцию к спецификации).
т.е. можно в xsd прописать как-нибуть так:
<element name="type"> .... </element>
<element name="object">
<complexType>
.....
<attribute name="ofType" type="NCTOKEN" mustRefToElement="type"/>
</complexType>
</element>
тогда в DOМ может и будет возможность для атрибута ofType получить не строку, а узел соотв типа
это прописано в в документации по DOM в Java:
In XML, where the value of an attribute can contain entity references, the child nodes of the Attr node may be either Text or EntityReference nodes (when these are in use; see the description of EntityReference for discussion).
Осталось только выяснить, как это оформить в схеме
Рекомендуется использовать xsd (xml-scheme а не DTD
посмотри спецификацю XML Schema, прежде чем "прописать как-нибуть так", а не придумывай свои атрибуты. Атрибута mustRefToElement нет.
я сам не знаю как это делается на самом деле.
в этом и вопрос состоит
Можешь попробовать поюзать XPointer: http://www.w3.org/TR/WD-xptr
вернее раздел 5.2
ты не просек фишки
схема имеет след. вид:
...
<element name="type">
<complexType>
...
<attribute name="name" type="token"/>
</complexType>
</element>
<element name="object">
<complexType>
...
<attribute name="objOfType" type="token"/>
</complexType>
</element>
<key name="typeNameKey">
<selector xpath="type"/>
<field xpath="@name"/>
</key>
<keyref name="objOfTypeKeyref">
<selector xpath="object"/>
<field xpath="@objOfType"/>
</keyref>
....
вот только не уверен в xpath в selectore.
интересно, DOM Parser рюхнет, и если да, то будет идексировать по ключам (думаю, что XPathDocument в .Net индексирует)
Ельдар, проверить не хочешь?
Мой прогноз: работа не будет
причем тут индексирование я ваще не понял
а индексирование тем, чтобы это оганичение эффективно тестить при построении DOM дерева и возможно потом при реализации метода getChild у соотв Attr.
Короче, работать не будем, можем поспорить на пиво
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="moduleSchema" targetNamespace="http://tempuri.org/moduleSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/moduleSchema.xsd" xmlns:mstns="http://tempuri.org/moduleSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="module">
<xs:complexType>
<xs:sequence>
<xs:element name="types">
<xs:complexType>
<xs:sequence>
<xs:element name="type" type="TypeType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="objects">
<xs:complexType>
<xs:sequence>
<xs:element name="object" type="ObjectType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="typeNameKey" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:type" />
<xs:field xpath="@name" />
</xs:key>
<xs:key name="objectNameKey" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:object" />
<xs:field xpath="@name" />
</xs:key>
<xs:keyref name="objectOfTypeKeyref" refer="typeNameKey">
<xs:selector xpath=".//mstns:object" />
<xs:field xpath="@objectOfType" />
</xs:keyref>
</xs:element>
<xs:complexType name="TypeType">
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
<xs:complexType name="ObjectType">
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="objectOfType" type="xs:string" />
</xs:complexType>
</xs:schema>
маза в том, что эту схема в дезайнере схем сваял в VS
Классы-то делает, но вот ссылок как раз и не видно.
Но в схеме связи выражаются через key и keyref как в присере, что я написал
Пиздец, в начале треда вам теребовались ссылки , теперь вы говорите о том как в .Net-те идет XML-сериализация. Я хуею с вас товарищи, чё вам надо, зачем было этот тред заводить?
а похоже делает через селект как раньше предложили
Оставить комментарий
rid2000
Такое бывает?Мне сказали, что есть на подобие того... Но я не могу найти инфу пока... может поможете...
Если такое есть, то как это записать в схеме?...
Я ща ищу инфу, нужна срочно. Если поможете в поиске, буду примного благодарен