สัปดาห์นี้ฉันได้รับงานที่น่าสนใจ: การดูดฝุ่นจากแอปพลิเคชัน Java ที่อยู่แล้ว แอปพลิเคชันนี้วิเคราะห์ไฟล์ XML ที่เฉพาะเจาะจงในรูปแบบที่เป็นเจ้าของ ฉันรู้ว่า XML ไม่ฟังดูเซ็กซี่สําหรับนักพัฒนา junior แต่ก็มีประโยชน์ที่น่าตื่นตาตื่นใจ หนึ่งสามารถยืนยันไฟล์กับจริยธรรม จริยธรรมดังกล่าวเรียกว่า XSD สั้น ๆ สําหรับ XML Schema Definition ความจริงที่สนุก: คุณเขียน XSD ใน XML ในโพสต์นี้ฉันอธิบายปัญหาสิ่งที่ฉันพยายามและโซลูชั่นที่ทํางานในที่สุด ปัญหา สิ่งที่ดีคือแอพพลิเคชันแล้วใช้ XSD อย่างไรก็ตามในเวลาของการเริ่มต้นของแอพพลิเคชันการยืนยัน XSD อยู่ใน เพิ่มคุณสมบัติที่สําคัญหลายอย่าง โดยเฉพาะอย่างยิ่ง v1.1 เพิ่ม และ . เวอร์ชัน 1.0 เวอร์ชัน 1.1 การยืนยัน ความเป็นตัวตนข้อ จํากัด มีความคิดเห็น `//TODO validate` จํานวนมากในรหัส Java ที่ไม่สามารถใช้ได้ใน XSD 1.0 แต่สามารถใช้ได้ใน XSD 1.1. ฉันคิดว่ามันจะง่ายต่อการอัพเกรด ฉันผิด แนวทางที่เลวร้าย ภายใต้ฝาครอบ JDK ใช้การประยุกต์ใช้ Xerces ที่ห่อไว้สําหรับการสํารวจ สําหรับความสนุกสนานโปรดตรวจสอบแพคเกจ `com.sun.org.apache.xerces.internal.jaxp` ใน JDKs ที่ติดตั้งแล้ว การประยุกต์ใช้นี้ติดอยู่กับการยืนยัน XSD 1.1. ฉันคิดว่า the ฉันเพิ่มรุ่นล่าสุดใน build ของฉันและ... ไม่มีอะไร ฉันเจาะลึกเข้าไปใน JAR และพบว่าดังต่อไปนี้: Xerces ปกติ public final class Constants { /** XML 1.1 feature ("xml-1.1"). */ public static final String XML_11_FEATURE = "xml-1.1"; // Constant to enable Schema 1.1 support public final static boolean SCHEMA_1_1_SUPPORT = false; public final static short SCHEMA_VERSION_1_0 = 1; public final static short SCHEMA_VERSION_1_0_EXTENDED = 2; } - ปริมาณ ภาษาไทย ภาษาไทย หากคุณสงสัยเพราะการสนับสนุน schema 1.1 เป็นที่คงที่ยินดีต้อนรับสู่โลกของฉัน ฉันไปต่อไปลงรูกระต่าย The โครงการมีสองสาขาที่มีศักยภาพที่น่าสนใจ และ การ ชั้นเรียนในสาขาก่อนหน้านี้ดูเหมือน: โซฟา J xml-schema-1.1-dev xml-schema-1.1-tests Constants public final class Constants { /** XML 1.1 feature ("xml-1.1"). */ public static final String XML_11_FEATURE = "xml-1.1"; // Constant to enable Schema 1.1 support public final static boolean SCHEMA_1_1_SUPPORT = false; public final static short SCHEMA_VERSION_1_0 = 1; public final static short SCHEMA_VERSION_1_0_EXTENDED = 2; public final static short SCHEMA_VERSION_1_1 = 4; } 1. ยังคงไม่ได้สนับสนุน 2. แต่ดูน่าทึ่ง อัจฉริยะ ภาษาไทย ฉันกําลังมองหาสิ่งประดิษฐ์ดังกล่าวใน : มันแสดงไม่มีศิลปะที่ทุ่มเท Maven ศูนย์ มันไม่ได้มาในใจของฉันในเวลานั้น แต่ในขณะที่เขียนโพสต์ฉันตรวจสอบ: the หน้าที่ไม่ได้มีการกระจาย XSD 1.1 มันหมายความว่าได้รับ JAR สร้าง POM เฉพาะและเผยแพร่พวกเขาใน Artifactory ภายในซึ่งฉันไม่สามารถเขียนได้ เป็นไปได้ แต่ใช้เวลานาน Xerces ดาวน์โหลด ค้นหาทางเลือก ฉันกําลังมองหาทางเลือก แต่คนเดียวที่ฉันพบคือซากสัน แพคเกจ Saxon เป็นชุดของเครื่องมือสําหรับการประมวลผลเอกสาร XML ส่วนประกอบหลักคือ: โปรเซสเซอร์ XSLT ซึ่งสามารถใช้งานได้จากบรรทัดคําสั่งหรือเรียกใช้ได้จากแอปพลิเคชันโดยใช้ API ที่มาพร้อมกับ Saxon ใช้ XSLT 3.0 Recommendation ผลิตภัณฑ์นี้ยังสามารถใช้เพื่อเรียกใช้แผ่นสไตล์ XSLT 2.0 หรือแผ่นสไตล์ XSLT 1.0 ในโหมดการเข้ากันได้ด้านหลัง โปรเซสเซอร์ XPath ที่สามารถเข้าถึงได้กับแอปพลิเคชันผ่านทาง API ที่มาพร้อม ซึ่งรองรับ XPath 2.0 และ XPath 3.1 นอกจากนี้ยังสามารถใช้ในโหมดการเข้ากันได้ด้านหลังเพื่อประเมินการแสดงออก XPath 1.0 An XQuery processor that can be used from the command line, or invoked from an application by use of a supplied API. This supports XQuery 3.1, which also allows XQuery 1.0 or 3.0 queries to be executed. With Saxon-EE, you can also use the XQuery extensions defined in the XQuery Update 1.0 Recommendation, but later working drafts of XQuery Update are not supported (W3C has abandoned work on these versions). An XML Schema Processor. . This can be used on its own to validate a schema for correctness, or to validate a source document against the definitions in a schema. It is also used to support the schema-aware functionality of the XSLT and XQuery processors. Like the other tools, it can be run from the command line, or invoked from an application. This supports both XSD 1.0 and XSD 1.1 แพคเกจ Saxon เป็นชุดของเครื่องมือสําหรับการประมวลผลเอกสาร XML ส่วนประกอบหลักคือ: โปรเซสเซอร์ XSLT ซึ่งสามารถใช้งานได้จากบรรทัดคําสั่งหรือเรียกใช้ได้จากแอปพลิเคชันโดยใช้ API ที่มาพร้อมกับ Saxon ใช้ XSLT 3.0 Recommendation ผลิตภัณฑ์นี้ยังสามารถใช้เพื่อเรียกใช้แผ่นสไตล์ XSLT 2.0 หรือแผ่นสไตล์ XSLT 1.0 ในโหมดการเข้ากันได้ด้านหลัง โปรเซสเซอร์ XPath ที่สามารถเข้าถึงได้กับแอปพลิเคชันผ่านทาง API ที่มาพร้อม ซึ่งรองรับ XPath 2.0 และ XPath 3.1 นอกจากนี้ยังสามารถใช้ในโหมดการเข้ากันได้ด้านหลังเพื่อประเมินการแสดงออก XPath 1.0 โปรเซสเซอร์ XQuery ที่สามารถใช้งานได้จากบรรทัดคําสั่งหรือเรียกร้องจากแอปพลิเคชันโดยใช้ API ที่มาพร้อมกัน นี้รองรับ XQuery 3.1 ซึ่งยังช่วยให้สามารถเรียกใช้คําถาม XQuery 1.0 หรือ 3.0 ด้วย Saxon-EE คุณยังสามารถใช้ส่วนขยาย XQuery ที่กําหนดไว้ในคําแนะนํา XQuery Update 1.0 แต่การทํางานในภายหลังของ XQuery Update ไม่ได้รับการสนับสนุน (W3C ได้ยกเลิกการทํางานเกี่ยวกับรุ่นเหล่านี้) เครื่องประมวลผลแผนภูมิ XML นี้รองรับทั้ง XSD 1.0 และ XSD 1.1. สามารถใช้เพื่อยืนยันแผนภูมิเพื่อให้ถูกต้องหรือเพื่อยืนยันเอกสารแหล่งข้อมูลกับคําจํากัดความในแผนภูมิ นอกจากนี้ยังใช้เพื่อรองรับฟังก์ชันการระมัดระวังแผนภูมิของโปรเซสเซอร์ XSLT และ XQuery เช่นเดียวกับเครื่องมืออื่น ๆ สามารถเรียกใช้จากคําสั่งหรือเรียกใช้จากแอพพลิเคชัน Saxon คืออะไร Saxon คืออะไร หลังจากวิจัยเล็กน้อยฉันพบว่า Sax มีข้อเสียสองประการที่สําคัญ: แม้ว่าคุณสามารถใช้ API JAXP แบบปกติได้ แต่คุณต้องเปลี่ยนไปยัง API ที่เป็นเจ้าของของ Saxon เพื่อปลดล็อคพลังงานเต็มรูปแบบ รวมถึงการยืนยัน XSD 1.1 Saxon มาในสองรสชาติ: Enterprise Edition มีค่าธรรมเนียมและ Home Edition มีค่าใช้จ่ายฟรี อื่น ๆ ไม่ให้การยืนยัน XSD 1.1 ฉันไม่มีงบประมาณและไม่มีเวลาที่จะล่าสัตว์สําหรับมัน กลับไปที่ Square One มันเป็นเวลาที่จะประเมินสถานการณ์ใหม่ การสร้างจากแหล่งที่มาหรือไม่ ไม่สามารถทําได้ ซ็อกโซน? การชําระเงิน ความหวังสุดท้ายของฉันคือ AI ฉันต้องพูดว่าสําหรับครั้งเดียวมันเป็นตัวช่วยชีวิต แสดงให้เห็นว่าการสร้างสอง Xerces ที่มีคุณสมบัติ XSD 1.1 มีอยู่บน พวกเขาถูกเผยแพร่โดย OpenGIS ในปี 2015-2016 ในช่วงเวลาที่มันค่อนข้างง่ายที่จะเผยแพร่ที่นั่น ในความเป็นจริงพูดถึงสาขาที่มันมาจาก: . Maven ศูนย์ ของพวกเขา โปม http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/ ในขณะนี้ฉันอยู่ไม่กี่แถวของรหัสห่างจากเป้าหมาย: var schemaFactory = SchemaFactory.newInstance(Constants.W3C_XML_SCHEMA11_NS_URI); var schema = schemaFactory.newSchema(schemaFile); var saxParserFactory = SAXParserFactory.newInstance(); saxParserFactory.setNamespaceAware(true); saxParserFactory.setSchema(schema); var reader = saxParserFactory.newSAXParser().getXMLReader(); reader.setContentHandler(handler); reader.setErrorHandler(handler); reader.setEntityResolver(handler); การตั้งค่ารุ่น XSD 1.1 วางแผนไปยังโรงงาน ปกติ SAX Parsing ฉันยังคงต้องตรวจสอบอย่างถูกต้องว่าไม่มีปัญหาด้านความปลอดภัยจากการสร้าง "ป่า" นี้ แต่มันทํางานได้: ฉันสามารถใช้คุณสมบัติจาก XSD 1.1! ข้อสรุป ในโพสต์นี้ฉันอธิบายการเดินทางของฉันในการประยุกต์ใช้ XSD 1.1 ใน Java มันง่ายกว่าที่ฉันคาดหวังในตอนแรก แต่ฉันหวังว่ามันจะช่วยให้คนอื่น ๆ ที่พบว่าตัวเองอยู่ในสถานการณ์ที่คล้ายกัน เพื่อไปข้างหน้า: Java API สําหรับการประมวลผล XML (JAXP) โครงการ Apache XercesTM โพสต์ครั้งแรกที่ A Java Geek เครื่องมือ Java Geek