xsd для тега, который разрешает строковое содержимое по умолчанию и дочерние теги в случае, если указан атрибут [duplicate]

Ответы каждого замечательные, но вот один из них, я думаю, немного более полный ...

Это написано для использования javascript одного числа в одной строке:

^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$

Если вы хотите совпадать с границами слов, просто измените ^ и $ на \ b

. Я приветствую любые предложения, исправления или критику этого решения. Насколько я могу судить, это соответствует формату NANP (для номеров США - я не проверял другие североамериканские страны при создании этого), избегает любых ошибок 911 (не может быть в коде страны или региональном коде), устраняет только те 555 номеров, которые фактически недействительны (код региона 555, за которым следует 01xx, где x = любое число).

4
задан Deduplicator 11 February 2015 в 00:29
поделиться

1 ответ

Вы можете сделать это, используя присвоение условного типа XSD 1.1 :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           elementFormDefault="qualified"
           vc:minVersion="1.1"> 
  <xs:element name="listOfA">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="a" maxOccurs="unbounded">
          <xs:alternative test="@type = 1" type="a1Type"/>        
          <xs:alternative test="@type = 2" type="a2Type"/>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="a1Type">
    <xs:sequence>
      <xs:element name="name"/>
      <xs:element name="surname"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="a2Type">
    <xs:sequence>
      <xs:element name="name"/>
      <xs:element name="id"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
6
ответ дан kjhughes 16 August 2018 в 11:02
поделиться
  • 1
    MS VS 2015 делает ошибку & quot; ' w3.org/2001/XMLSchema:alternative' ; элемент не поддерживается в этом контексте & quot; когда просто копирует его (abover) на пустую страницу, – Jan Bergström 24 July 2016 в 14:12
  • 2
    Это связано с тем, что .NET не поддерживает Direct XSD 1.1 (что указывает этот вопрос, является приемлемым). Если вы используете .NET и хотите использовать XSD 1.1, попросите Microsoft добавить поддержку или использовать Saxon. – kjhughes 24 July 2016 в 16:14
  • 3
    Хорошее объяснение. Насколько я понимаю, это основная слабость XSD 1.1, она не нова и не очень реализована? И как таковой проблематично использовать в коммерческом стандартном программном обеспечении (как и я), в отличие от внутренних работ? Насколько мне известно, & lt; xs: альтернативный тест = & quot; является единственным способом рулевого управления правильными путями в XSD, или не так ли? – Jan Bergström 26 July 2016 в 13:45
  • 4
    Если XML можно перепроектировать, необходимости в XSD 1.1 и CTA можно избежать. (Подумайте, <typeA/>, а не <item type="typeA"/>.) Однако, пожалуйста, задайте новый вопрос, а не расширяйте обсуждения в нескольких направлениях в комментариях. Благодарю. – kjhughes 26 July 2016 в 14:19
  • 5
    @Sander: Если вы не можете определить, поддерживает ли ColdFusion XSD 1.1 из своей документации, вы всегда можете попробовать. Если он не поддерживает XSD 1.1, вы должны получить сообщение об ошибке, связанной с содержимым элемента, обернувшего xs:alternative, не соответствующего ожидаемой модели контента XSD 1.0 ((annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). – kjhughes 21 August 2017 в 14:20
Другие вопросы по тегам:

Похожие вопросы: