2013-11-21 5 views
1

Добавление ограничения уникальности в атрибут xsd: attributeGroup.Добавление ограничения уникальности в xsd: attributeGroup's attribute

Текущий myAttr-группа выглядит следующим образом:

<xsd:attributeGroup name="myAttr"> 
     <xsd:attribute name="**name**" type="xsd:string" use="required"/> 
     <xsd:attribute name="value" type="xsd:string" use="required"/> 
</xsd:attributeGroup> 

А потом он привыкает в нескольких местах, таких как:

<xsd:complexType name="SomeComplexType"> 
    . 
    . 
     <xsd:attributeGroup ref="myAttr"/> 
     <xsd:attribue name="more-attr" type="xsd:string" use="required"/> 
     . 
     . 
</xsd:complexType>   
. 
. 

Есть ли способ добиться применения уникальности constrainst на уровне атрибутов, а на Элемента уровень?

XML выглядит примерно так:

<MyRoot> 
    . 
    . 

    <MyComplexTypeElement **name**="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="xyz" value="ss" more-attr="22">Value 2asdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="some" value="rrr" more-attr="2">Value 3asdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="XYZ" value="rr" more-attr="23" >Value 4sdfs</MyComplexTypeElement> 

     . 
     . 

</MyRoot> 

я проверил с <xsd:unique> можно достичь только на уровне элемента.

+0

Я попытался с: , но, похоже, не поддерживается – user1587504

ответ

0

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

Для этого XML-документ, который будет действителен:

<?xml version="1.0" encoding="utf-8"?> 
<MyRoot> 
    <MyComplexTypeElement name="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="xyz" value="ss" more-attr="22">Value 2asdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="some" value="rrr" more-attr="2">Value 3asdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="XYZ" value="rr" more-attr="23" >Value 4sdfs</MyComplexTypeElement> 
</MyRoot> 

Но этот XML документ недействительным из-за значения дубликата name атрибута:

<?xml version="1.0" encoding="utf-8"?> 
<MyRoot> 
    <MyComplexTypeElement name="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="abc" value="rr" more-attr="2">Value 1sdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="xyz" value="ss" more-attr="22">Value 2asdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="some" value="rrr" more-attr="2">Value 3asdf</MyComplexTypeElement> 
    <MyComplexTypeElement name="XYZ" value="rr" more-attr="23" >Value 4sdfs</MyComplexTypeElement> 
</MyRoot> 

Используйте этот XSD:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:attributeGroup name="myAttr"> 
    <xs:attribute name="name" type="xs:string" use="required"/> 
    <xs:attribute name="value" type="xs:string" use="required"/> 
    <xs:attribute name="more-attr" type="xs:string" use="required"/> 
    </xs:attributeGroup> 

    <xs:element name="MyRoot"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="MyComplexTypeElement" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attributeGroup ref="myAttr"/> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="UniqueNameAttr"> 
     <xs:selector xpath="MyComplexTypeElement"/> 
     <xs:field xpath="@name"/> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 

Нарушение единственности ограничения будет давать ошибку, такие как:

[Error] try.xml:5:61: cvc-identity-constraint.4.1: Duplicate unique value [abc] declared for identity constraint "UniqueNameAttr" of element "MyRoot". 

Обновление на комментарий OP в:

Я выше подход, но на нарушения в моей xml, я не вижу ошибку . Я пытаюсь увидеть в IntelliJ ide - user1587504

Вышеупомянутые XML и XSD были протестированы с использованием известного надежного синтаксического анализа на основе Xerces. Вы можете рассчитывать на то, что он правильный для XSD 1.0.

Вещи, чтобы проверить:

  1. Используйте точные примеры, как указано первого перед изменением ваших конкретных обстоятельств, чтобы исключить возможность ошибки быть введено в применении понятий.
  2. Убедитесь, что XSD связан с XML.Как проверка работоспособности , измените корневой элемент XML на что-то не в XSD и убедитесь, что вы видите ошибки проверки на всех.

Если вы до сих пор не получили соответствующее диагностическое сообщение после того, как с использованием точного примера выше, а доказав, что вы можете увидеть другие ошибки проверки, вы можете подозреваете, что ваш инструмент. Однако очень быстрый поиск не выявил никаких проблем с проверкой IntelliJ с использованием xs: unique. Фактически, here is some evidence that IntelliJ does support xs:unique.

+0

Я использовал выше подход, но на vi olation в моем xml, я не вижу ошибки. Я пытаюсь увидеть в IntelliJ ide – user1587504

Смежные вопросы