2017-02-08 17 views
2

У меня есть схема, в которой я хотел бы преобразовать simpleType в анонимный simpleType. Исходная схема приведена ниже, я сделал несколько попыток, таких как:XML-схема: преобразование simpletype в анонимный тип

Снятие основания = "xxx";

Добавление простого типа после расширения;

Etc ...

Но в конечном итоге с недопустимой схемой.

Вопросы:

  1. Как преобразовать вход в действительный анонимный simpleType схемы без потери информации?
  2. Кроме того, существует ли xslt для этого автоматически с динамическим вводом имени элемента, имени типа и т. Д.?

Спасибо заранее,

Входные схемы:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="test" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="test" elementFormDefault="qualified"> 
<xs:element name="elem1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="simpleType1"> 
       <xs:attribute name="att1" type="simpleType2" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
<xs:simpleType name="simpleType1"> 
    <xs:restriction base="xs:decimal"> 
     <xs:fractionDigits value="5"/> 
     <xs:totalDigits value="18"/> 
     <xs:minInclusive value="0"/> 
    </xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="simpleType2"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[A-Z]{3,3}"/> 
    </xs:restriction> 
</xs:simpleType> 
</xs:schema> 

Моя попытка Результат:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="test" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="test" elementFormDefault="qualified"> 
<xs:element name="elem1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension> 
       <xs:simpleType> 
        <xs:restriction base="xs:decimal"> 
         <xs:fractionDigits value="5"/> 
         <xs:totalDigits value="18"/> 
         <xs:minInclusive value="0"/> 
        </xs:restriction> 
       </xs:simpleType> 
       <xs:attribute name="att1" use="required"/> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:pattern value="[A-Z]{3,3}"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Проверка показывает, что это ошибочный схема с ошибками, такими как:

Атрибут 'base' требуется в элементе.

Элемент не допускается под элемент.

Атрибут 'name' требуется в элементе.

ответ

1

В XSD невозможно использовать чисто анонимные локальные определения при объявлении элемента как ограниченным контентом, так и атрибутом.

Вы можете, конечно, использовать локальное определение для типа атрибута (att1) в одиночку, но вы не можете для типа (simpleType1) запретной простого содержимого элемента (elem1), если вам необходимо также объявить att1 на elem1.

Смотрите также:How to restrict element content when element has attribute

+0

Да, на самом деле, я сумел использовать локальный определенный тип на атрибут, но не в состоянии сделать это с «расширением базы» на simpleType1 ... – dellair