powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как создать xsd с помощью xsl
8 сообщений из 8, страница 1 из 1
Как создать xsd с помощью xsl
    #39088368
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Содержимое источника особо не важно, в нем есть значение у App/ProjName. Шаблон:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"
                xmlns:edm="http://schemas.microsoft.com/ado/2009/11/edm"
                exclude-result-prefixes="msxsl edmx edm">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <xsl:element name="xs:schema">
      <xsl:attribute name="targetNamespace">
        <xsl:text>http://tempuri.org/</xsl:text>
        <xsl:value-of select="App/ProjName"/>
      </xsl:attribute>
      <xsl:attribute name="xmlns" namespace="http://tempuri.org/{App/ProjName}">
        <xsl:text>http://tempuri.org/</xsl:text>
        <xsl:value-of select="App/ProjName"/>
      </xsl:attribute>
      <xsl:attribute name="attributeFormDefault">unqualified</xsl:attribute>
      <xsl:attribute name="elementFormDefault">qualified</xsl:attribute>

    </xs:element>
  </xsl:template>
</xsl:stylesheet>

результат:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<xs:schema 
    targetNamespace="http://tempuri.org/Project1" 
    xp_0:xmlns="http://tempuri.org/Project1" 
    attributeFormDefault="unqualified" 
    elementFormDefault="qualified" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xp_0="http://tempuri.org/Project1">

При этом указывать <xsl:attribute name="xmlns" без namespace нельзя.

А если так
Код: xml
1.
2.
3.
4.
5.
    <xs:schema xmlns="http://tempuri.org/{App/ProjName}">
      <xsl:attribute name="targetNamespace">
        <xsl:text>http://tempuri.org/</xsl:text>
        <xsl:value-of select="App/ProjName"/>
      </xsl:attribute>

то результат такой:

Код: xml
1.
2.
3.
4.
5.
6.
<xs:schema 
targetNamespace="http://tempuri.org/Project1" 
attributeFormDefault="unqualified" 
elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns="http://tempuri.org/{App/ProjName}2">

В xmlns нельзя подставлять значения.
А нужно-то всего ничего: xmlns=" http://tempuri.org/Project1".
Что еще можно придумать, кроме ручной правки xmlns и формирования в режиме xsl:output="text"?
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39089133
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА нужно-то всего ничего: xmlns=" http://tempuri.org/Project1". А зачем? Ты же сам понимаешь, что префикс - это просто алиас.

Попробуй еще так
Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:stylesheet version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"
                xmlns:edm="http://schemas.microsoft.com/ado/2009/11/edm"
                xmlns="{concat('http://tempuri.org/', /App/ProjName)}">
                exclude-result-prefixes="msxsl edmx edm">
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39089346
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_AntonariyА нужно-то всего ничего: xmlns=" http://tempuri.org/Project1". А зачем? Ты же сам понимаешь, что префикс - это просто алиас.Я понимаю, студия не понимает, и при ссылке на эту схему (да и сама схема) пестрит предупреждениями "ссылка на схему "" недоступна в этом месте". убираешь xp_0 - все пучком.

_Vasilisk_Попробуй еще такНе взлетит. {} не отрабатываются в контексте атрибута, имеющего имя xmlns.

Пока что решил вопрос за рамками xsl:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
      <xsl:template match="/">
        <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified">
          <NML:VAR NAME="ns">http://tempuri.org/<NML:GET FIELD="FullName" REGEXP="^([^,]+),"/>2</NML:VAR>
          <NML:ATTR NAME="xmlns"><NML:VAR NAME="ns"/></NML:ATTR>
          <NML:ATTR NAME="targetNamespace"><NML:VAR NAME="ns"/></NML:ATTR>
          <xsl:call-template name="inc_schema"/>
        </xs:schema>
      </xsl:template>
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39089440
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНе взлетит. {} не отрабатываются в контексте атрибута, имеющего имя xmlns.Погоди. Я присмотрелся - у тебя же бред полный написан. Завтра напишу, как должно быть
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39089442
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот про это
Код: xml
1.
<xsl:attribute name="xmlns"

забудь сразу. xmlns - это не атрибут
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39089675
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_AntonariyНе взлетит. {} не отрабатываются в контексте атрибута, имеющего имя xmlns.Погоди. Я присмотрелся - у тебя же бред полный написан.студия от этого документа вообще бьется в конвульсиях. :)
если xml-документ содержит декларацию схемы, то студия считает схему приоритетной частью документа, описывающей документ. а тут нежданчик - xsl посреди схемы :)
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39090114
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. А задача интересней, чем я думал. В схеме же нет ни одного элемента из целевого пространства имен
...
Рейтинг: 0 / 0
Как создать xsd с помощью xsl
    #39090148
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что задача не решается. Нужен костыль либо в виде xsl:text, либо в виде двойного преобразования
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как создать xsd с помощью xsl
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]